> ## Documentation Index
> Fetch the complete documentation index at: https://docs.synq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# API

## Services

### DeliveriesService

(synq.deliveries.v1.DeliveriesService)

DeliveriesService reports what was sent to your notification integrations —
webhooks, PagerDuty, Opsgenie — and what came back.

It answers the three questions an integration owner has. "Did this event
reach my endpoint": list the deliveries for an event id and read the outcome
of each. "Why did my endpoint reject it": read the attempts, which carry the
request as it was sent and the response as it came back. "Why did I get
nothing at all": every delivery that sent nothing records a reason, so a
silent integration can be explained rather than guessed at.

Deliveries are kept for 90 days. Credential-bearing header values are never
returned, on either side of an attempt — see `Header`.

#### ListDeliveries

ListDeliveries ([ListDeliveriesRequest](#listdeliveriesrequest)) [ListDeliveriesResponse](#listdeliveriesresponse)

List deliveries, newest event first. With no `integration_id` this is the
whole workspace's feed; with one it is that integration's.

#### BatchGetDeliveries

BatchGetDeliveries ([BatchGetDeliveriesRequest](#batchgetdeliveriesrequest)) [BatchGetDeliveriesResponse](#batchgetdeliveriesresponse)

Fetch deliveries by id. Ids that do not exist, or have passed out of the
retention window, are omitted from the response rather than causing an
error. Unlike `ListDeliveries`, this always returns the routing provenance.

#### GetDelivery

GetDelivery ([GetDeliveryRequest](#getdeliveryrequest)) [GetDeliveryResponse](#getdeliveryresponse)

Fetch a single delivery by id. `BatchGetDeliveries` does the same for many
at once and is the variant exposed over REST.

#### ListAttempts

ListAttempts ([ListAttemptsRequest](#listattemptsrequest)) [ListAttemptsResponse](#listattemptsresponse)

List every attempt made for one delivery, oldest first. A delivery is
attempted at most ten times, so the result is small and is not paginated.

#### SummariseDeliveries

SummariseDeliveries ([SummariseDeliveriesRequest](#summarisedeliveriesrequest)) [SummariseDeliveriesResponse](#summarisedeliveriesresponse)

Count deliveries over a window, bucketed by outcome, by skip reason and by
HTTP status class. Use it to watch your own delivery failure rate without
paging through the feed.

#### Redeliver

Redeliver ([RedeliverRequest](#redeliverrequest)) [RedeliverResponse](#redeliverresponse)

Send an earlier delivery again, to the same integration, with the same
event. The replay is a new delivery with its own id, linked to the original
through `redelivery_of`, and appears in `ListDeliveries` like any other.

It is signed with the integration's current secret rather than the one the
original used, which makes it the way to confirm that a rotated secret is
accepted by the receiver.

Retrying this call sends the delivery again. Rate-limited per integration;
over the limit it fails with `RESOURCE_EXHAUSTED` rather than queueing.

#### SendTestDelivery

SendTestDelivery ([SendTestDeliveryRequest](#sendtestdeliveryrequest)) [SendTestDeliveryResponse](#sendtestdeliveryresponse)

Send a test delivery to an integration, to confirm the endpoint is reachable
and that it accepts what is sent. It is always sent, whatever event types
the integration subscribes to — a test that silently matches nothing would
report the same as a broken endpoint.

Returns the id of the delivery it created. The send is asynchronous: poll
`BatchGetDeliveries` with that id until the outcome leaves `OUTCOME_PENDING`.

Retrying this call sends another test. Rate-limited per integration; over
the limit it fails with `RESOURCE_EXHAUSTED` rather than queueing.

### SavedViewsService

(synq.savedviews.v1.SavedViewsService)

SavedViewsService manages saved views — named, reusable selections over your
entities (and other surfaces) with display configuration, sharing and
per-user pinning.

A saved view is owned by the user who created it. It can be kept private,
shared with the whole workspace, or granted to specific users. Reads return,
for the calling user, how each view relates to them (mine / shared / granted)
and what they are allowed to do with it. Workspace administrators can manage
any view in the workspace.

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Create or update a saved view.

The view id is supplied by the caller (a UUID), which makes this operation
idempotent — repeating the same request converges to the same view rather
than creating a duplicate. Mutable fields are optional: a field that is set
is written, a field that is omitted is left unchanged. To guard against
overwriting a concurrent edit, pass the `etag` you last read.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete a saved view. Idempotent — deleting an already-deleted or unknown
view succeeds. Pass `etag` to guard against deleting a concurrently-edited
view.

#### BatchGet

BatchGet ([BatchGetRequest](#batchgetrequest)) [BatchGetResponse](#batchgetresponse)

Fetch multiple saved views by id. Ids the caller cannot see, or that do not
exist, are omitted from the response rather than causing an error.

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

List the saved views the calling user can see. By default returns every
visible view (their own, workspace-owned, shared-with-workspace and
granted-to-them); narrow with `scopes`, `context` and `only_pinned`.

#### SetPin

SetPin ([SetPinRequest](#setpinrequest)) [SetPinResponse](#setpinresponse)

Pin or unpin a saved view to the calling user's main screen. Pinning is a
per-user preference: it applies only to the caller and does not modify the
view or its version, so any user who can see a view may pin it.

### IssuesService

(synq.issues.issues.v1.IssuesService)

IssuesService is a service for managing Issues.

#### BatchGetIssues

BatchGetIssues ([BatchGetIssuesRequest](#batchgetissuesrequest)) [BatchGetIssuesResponse](#batchgetissuesresponse)

#### ListIssues

ListIssues ([ListIssuesRequest](#listissuesrequest)) [ListIssuesResponse](#listissuesresponse)

#### MarkInvestigating

MarkInvestigating ([MarkInvestigatingRequest](#markinvestigatingrequest)) [MarkInvestigatingResponse](#markinvestigatingresponse)

Mark issue as being investigated.

#### MarkFixed

MarkFixed ([MarkFixedRequest](#markfixedrequest)) [MarkFixedResponse](#markfixedresponse)

Mark issue as fixed.

#### MarkExpected

MarkExpected ([MarkExpectedRequest](#markexpectedrequest)) [MarkExpectedResponse](#markexpectedresponse)

Mark issue as expected.

#### MarkNoActionNeeded

MarkNoActionNeeded ([MarkNoActionNeededRequest](#marknoactionneededrequest)) [MarkNoActionNeededResponse](#marknoactionneededresponse)

Mark issue as no action needed.

#### PostComment

PostComment ([PostCommentRequest](#postcommentrequest)) [PostCommentResponse](#postcommentresponse)

Post a comment on an issue.

### IssuesService

(synq.issues.v2.IssuesService)

IssuesService is a service for managing Issues.

#### BatchGetIssues

BatchGetIssues ([BatchGetIssuesRequest](#batchgetissuesrequest)) [BatchGetIssuesResponse](#batchgetissuesresponse)

#### ListIssues

ListIssues ([ListIssuesRequest](#listissuesrequest)) [ListIssuesResponse](#listissuesresponse)

#### MarkInvestigating

MarkInvestigating ([MarkInvestigatingRequest](#markinvestigatingrequest)) [MarkInvestigatingResponse](#markinvestigatingresponse)

Mark issue as being investigated.

#### MarkFixed

MarkFixed ([MarkFixedRequest](#markfixedrequest)) [MarkFixedResponse](#markfixedresponse)

Mark issue as fixed.

#### MarkExpected

MarkExpected ([MarkExpectedRequest](#markexpectedrequest)) [MarkExpectedResponse](#markexpectedresponse)

Mark issue as expected.

#### MarkNoActionNeeded

MarkNoActionNeeded ([MarkNoActionNeededRequest](#marknoactionneededrequest)) [MarkNoActionNeededResponse](#marknoactionneededresponse)

Mark issue as no action needed.

#### ClearStatus

ClearStatus ([ClearStatusRequest](#clearstatusrequest)) [ClearStatusResponse](#clearstatusresponse)

Clear the triage status of an issue, returning it to an untriaged state.
Reverses a previous MarkInvestigating / MarkFixed / MarkExpected /
MarkNoActionNeeded so the issue shows up again in open/untriaged views.

#### PostComment

PostComment ([PostCommentRequest](#postcommentrequest)) [PostCommentResponse](#postcommentresponse)

Post a comment on an issue.

### IntegrationsService

(synq.integrations.v1.IntegrationsService)

IntegrationsService manages connections from Coalesce Quality to your data
systems (warehouses, databases, and transformation tools).

Concurrency: every integration carries an opaque `etag`. Read it from
`GetIntegration` / `ListIntegrations`, then pass it back on
`UpdateIntegration` / `DeleteIntegration` to ensure you modify the version you
last saw. A stale etag is rejected with ABORTED (HTTP 409). Omit
the etag for last-write-wins.

Quota: each workspace has a limit on the number of integrations. Creating
beyond the limit is rejected with RESOURCE\_EXHAUSTED.

Secrets: credential fields (passwords, tokens, keys) are write-only. They are
masked (returned empty) on every read. On update, omit a secret to keep it,
send a new value to rotate it, or send an explicit empty string to clear it
(where the field is `optional`).

#### CreateIntegration

CreateIntegration ([CreateIntegrationRequest](#createintegrationrequest)) [CreateIntegrationResponse](#createintegrationresponse)

Create a new integration. The server assigns the id and returns the created
integration including any generated outputs.

The integration type is fixed by the populated `config` variant and cannot
be changed later. Counts against the per-workspace quota.

Not safe to blindly retry: the server mints a new id on each call, so a
retried create produces a second integration. On a transport error, list /
look up before retrying.

#### GetIntegration

GetIntegration ([GetIntegrationRequest](#getintegrationrequest)) [GetIntegrationResponse](#getintegrationresponse)

Fetch a single integration by id. Secret config fields are masked.

#### ListIntegrations

ListIntegrations ([ListIntegrationsRequest](#listintegrationsrequest)) [ListIntegrationsResponse](#listintegrationsresponse)

List all integrations in the workspace (optionally filtered by enabled
state). Secret config fields are masked. The full set is returned in one
response — a workspace has only a handful of integrations.

#### BatchGetIntegrations

BatchGetIntegrations ([BatchGetIntegrationsRequest](#batchgetintegrationsrequest)) [BatchGetIntegrationsResponse](#batchgetintegrationsresponse)

Fetch multiple integrations by id in one call. Ids not found (or not in the
workspace) are omitted from the response rather than erroring.

#### UpdateIntegration

UpdateIntegration ([UpdateIntegrationRequest](#updateintegrationrequest)) [UpdateIntegrationResponse](#updateintegrationresponse)

Update an integration. The `config` is replaced wholesale — send the
complete desired config (omitted secrets are preserved; see the
service-level secret semantics). `title` is patch-style: omit it to leave
it unchanged.

The `config` variant must match the existing integration's type; changing
the type is rejected with FAILED\_PRECONDITION.

Safe to retry: addresses an existing id and converges to the same state.
With an `etag` set, a retry after success returns ABORTED
(the version moved) — treat that as "already applied".

#### DeleteIntegration

DeleteIntegration ([DeleteIntegrationRequest](#deleteintegrationrequest)) [DeleteIntegrationResponse](#deleteintegrationresponse)

Delete an integration. The integration stops being scheduled and is removed
from listings. Safe to retry (deleting an already-deleted id is a no-op).

#### EnableIntegration

EnableIntegration ([EnableIntegrationRequest](#enableintegrationrequest)) [EnableIntegrationResponse](#enableintegrationresponse)

Enable a previously disabled integration. No-op if already enabled.

#### DisableIntegration

DisableIntegration ([DisableIntegrationRequest](#disableintegrationrequest)) [DisableIntegrationResponse](#disableintegrationresponse)

Disable an integration without deleting it. The configuration is kept but
the integration is no longer scheduled or refreshed. No-op if already
disabled.

#### RefreshIntegration

RefreshIntegration ([RefreshIntegrationRequest](#refreshintegrationrequest)) [RefreshIntegrationResponse](#refreshintegrationresponse)

Trigger an immediate, ad-hoc refresh of an integration. Available only for
types whose `Capabilities.can_refresh` is true; otherwise rejected with
FAILED\_PRECONDITION.

Not idempotent: each call enqueues a new refresh.

#### GetIntegrationHealth

GetIntegrationHealth ([GetIntegrationHealthRequest](#getintegrationhealthrequest)) [GetIntegrationHealthResponse](#getintegrationhealthresponse)

Return current health plus a paginated history of recent runs for an
integration. When pagination is omitted, a bounded recent window is
returned (the most recent runs from the last 7 days).

### UsersService

(synq.users.v1.UsersService)

#### ListUsers

ListUsers ([ListUsersRequest](#listusersrequest)) [ListUsersResponse](#listusersresponse)

#### BatchGetUsers

BatchGetUsers ([BatchGetUsersRequest](#batchgetusersrequest)) [BatchGetUsersResponse](#batchgetusersresponse)

#### GetByAlias

GetByAlias ([GetByAliasRequest](#getbyaliasrequest)) [GetByAliasResponse](#getbyaliasresponse)

#### GetByEmail

GetByEmail ([GetByEmailRequest](#getbyemailrequest)) [GetByEmailResponse](#getbyemailresponse)

#### UpsertUserAliases

UpsertUserAliases ([UpsertUserAliasesRequest](#upsertuseraliasesrequest)) [UpsertUserAliasesResponse](#upsertuseraliasesresponse)

#### DeleteUserAliases

DeleteUserAliases ([DeleteUserAliasesRequest](#deleteuseraliasesrequest)) [DeleteUserAliasesResponse](#deleteuseraliasesresponse)

#### GetUserAliases

GetUserAliases ([GetUserAliasesRequest](#getuseraliasesrequest)) [GetUserAliasesResponse](#getuseraliasesresponse)

#### GetUserIdentities

GetUserIdentities ([GetUserIdentitiesRequest](#getuseridentitiesrequest)) [GetUserIdentitiesResponse](#getuseridentitiesresponse)

Returns all canonical identity strings for a user.
If user\_id is omitted, returns identities for the currently authenticated user.
These identity strings can be passed to ListIssues(interacted\_by\_identities)
to filter issues the user has interacted with.
Format: "synq:\<user\_id>", "email:\<email>", "slack:\<slack\_user\_id>", "msteams:\<member\_id>", etc.

### NLQueryService

(synq.queries.v1.NLQueryService)

NLQueryService generates structured Query protos from natural language descriptions using an LLM.

#### GenerateQuery

GenerateQuery ([GenerateQueryRequest](#generatequeryrequest)) [GenerateQueryResponse](#generatequeryresponse)

GenerateQuery generates a Query from a natural language description.

### QueriesService

(synq.queries.v1.QueriesService)

QueriesService compiles and evaluates ResolverQL — the compact text query
language used across Coalesce Quality to select entities — over the public
API.

ResolverQL is a string DSL (for example `with_type("TABLE")` or
`in_folder(...)`); a structured `synq.queries.v1.Query` is its parsed,
machine-readable form. This service is the bridge between the two and the
read-only execution surface for both:

* `TranslateResolverQl` compiles a ResolverQL expression into a structured
  `Query` without evaluating it — inspect it, validate it, or reuse it as a
  filter on another API (entity listing, folder browsing, ...).
* `ResolveQuery` compiles a ResolverQL expression (or takes an
  already-structured `Query`), evaluates it against the catalog, and
  returns the matched entity ids. This is the general author -> resolve
  loop.

#### TranslateResolverQl

TranslateResolverQl ([TranslateResolverQlRequest](#translateresolverqlrequest)) [TranslateResolverQlResponse](#translateresolverqlresponse)

Compile a ResolverQL expression into a structured public `Query`. Unlike
`ResolveQuery`, it does not evaluate the query against the catalog. A
syntactically invalid or uncompilable expression fails with
INVALID\_ARGUMENT.

#### ResolveQuery

ResolveQuery ([ResolveQueryRequest](#resolvequeryrequest)) [ResolveQueryResponse](#resolvequeryresponse)

Evaluate a selection and return the matched entity ids, paginated. Pass a
ResolverQL expression via `resolver_ql` (it is compiled server-side) or an
already-structured `query`. Invalid ResolverQL fails with INVALID\_ARGUMENT.

### MonitorPredictionsService

(synq.monitors.predictions.v1.MonitorPredictionsService)

Access to anomaly detection model predictions and raw metric timeseries.

#### GetMonitorPredictions

GetMonitorPredictions ([GetMonitorPredictionsRequest](#getmonitorpredictionsrequest)) [GetMonitorPredictionsResponse](#getmonitorpredictionsresponse)

Returns prediction timeseries for a monitor. The monitor must exist
and not be deleted. Defaults to the monitor's current metrics\_version.

#### GetEntityMetrics

GetEntityMetrics ([GetEntityMetricsRequest](#getentitymetricsrequest)) [GetEntityMetricsResponse](#getentitymetricsresponse)

Returns raw metric timeseries for an entity. Identity-aware: resolves
logical assets (e.g., dbt models) to their underlying physical tables.

#### BatchGetLatestEntityMetrics

BatchGetLatestEntityMetrics ([BatchGetLatestEntityMetricsRequest](#batchgetlatestentitymetricsrequest)) [BatchGetLatestEntityMetricsResponse](#batchgetlatestentitymetricsresponse)

Returns the most recent observed table-stats sample (row count, freshness) for each
requested entity. Identity-aware: resolves logical assets to their underlying physical
tables. Paths with no recent sample are omitted from the response rather than returned
with empty values — callers should treat a missing entry as "no data". Lookback matches
GetEntityMetrics (30 days).

### MonitorInfoService

(synq.monitors.info.v1.MonitorInfoService)

#### MonitorInfo

MonitorInfo ([MonitorInfoRequest](#monitorinforequest)) [MonitorInfoResponse](#monitorinforesponse)

### HistoryService

(synq.monitors.history.v1.HistoryService)

#### History

History ([HistoryRequest](#historyrequest)) [HistoryResponse](#historyresponse)

### DeploymentRulesService

(synq.monitors.automated\_monitors.v1.DeploymentRulesService)

#### GetDeployOverview

GetDeployOverview ([GetDeployOverviewRequest](#getdeployoverviewrequest)) [GetDeployOverviewResponse](#getdeployoverviewresponse)

#### GetDeployDeleteOverview

GetDeployDeleteOverview ([GetDeployDeleteOverviewRequest](#getdeploydeleteoverviewrequest)) [GetDeployDeleteOverviewResponse](#getdeploydeleteoverviewresponse)

#### DeleteDeploymentRule

DeleteDeploymentRule ([DeleteDeploymentRuleRequest](#deletedeploymentrulerequest)) [DeleteDeploymentRuleResponse](#deletedeploymentruleresponse)

#### ListDeploymentRules

ListDeploymentRules ([ListDeploymentRulesRequest](#listdeploymentrulesrequest)) [ListDeploymentRulesResponse](#listdeploymentrulesresponse)

#### ListDeploymentRulesForAsset

ListDeploymentRulesForAsset ([ListDeploymentRulesForAssetRequest](#listdeploymentrulesforassetrequest)) [ListDeploymentRulesForAssetResponse](#listdeploymentrulesforassetresponse)

#### BatchGetDeploymentRules

BatchGetDeploymentRules ([BatchGetDeploymentRulesRequest](#batchgetdeploymentrulesrequest)) [BatchGetDeploymentRulesResponse](#batchgetdeploymentrulesresponse)

#### UpsertDeploymentRule

UpsertDeploymentRule ([UpsertDeploymentRuleRequest](#upsertdeploymentrulerequest)) [UpsertDeploymentRuleResponse](#upsertdeploymentruleresponse)

#### BatchUpdateDeploymentRuleTitle

BatchUpdateDeploymentRuleTitle ([BatchUpdateDeploymentRuleTitleRequest](#batchupdatedeploymentruletitlerequest)) [BatchUpdateDeploymentRuleTitleResponse](#batchupdatedeploymentruletitleresponse)

#### DeployDeploymentRule

DeployDeploymentRule ([DeployDeploymentRuleRequest](#deploydeploymentrulerequest)) [DeployDeploymentRuleResponse](#deploydeploymentruleresponse)

#### BatchDeployDeploymentRules

BatchDeployDeploymentRules ([BatchDeployDeploymentRulesRequest](#batchdeploydeploymentrulesrequest)) [BatchDeployDeploymentRulesResponse](#batchdeploydeploymentrulesresponse)

#### BatchUpsertDeploymentRules

BatchUpsertDeploymentRules ([BatchUpsertDeploymentRulesRequest](#batchupsertdeploymentrulesrequest)) [BatchUpsertDeploymentRulesResponse](#batchupsertdeploymentrulesresponse)

#### BatchDeleteDeploymentRules

BatchDeleteDeploymentRules ([BatchDeleteDeploymentRulesRequest](#batchdeletedeploymentrulesrequest)) [BatchDeleteDeploymentRulesResponse](#batchdeletedeploymentrulesresponse)

### CustomMonitorsService

(synq.monitors.custom\_monitors.v1.CustomMonitorsService)

#### BatchCreateMonitor

BatchCreateMonitor ([BatchCreateMonitorRequest](#batchcreatemonitorrequest)) [BatchCreateMonitorResponse](#batchcreatemonitorresponse)

#### BatchUpdateMonitor

BatchUpdateMonitor ([BatchUpdateMonitorRequest](#batchupdatemonitorrequest)) [BatchUpdateMonitorResponse](#batchupdatemonitorresponse)

#### BatchDeleteMonitor

BatchDeleteMonitor ([BatchDeleteMonitorRequest](#batchdeletemonitorrequest)) [BatchDeleteMonitorResponse](#batchdeletemonitorresponse)

#### BatchUpdateMonitorMode

BatchUpdateMonitorMode ([BatchUpdateMonitorModeRequest](#batchupdatemonitormoderequest)) [BatchUpdateMonitorModeResponse](#batchupdatemonitormoderesponse)

#### ConfigChangesOverview

ConfigChangesOverview ([ConfigChangesOverviewRequest](#configchangesoverviewrequest)) [ConfigChangesOverviewResponse](#configchangesoverviewresponse)

#### BatchUpdateMonitorSeverity

BatchUpdateMonitorSeverity ([BatchUpdateMonitorSeverityRequest](#batchupdatemonitorseverityrequest)) [BatchUpdateMonitorSeverityResponse](#batchupdatemonitorseverityresponse)

#### ListConfigsMonitors

ListConfigsMonitors ([ListConfigsMonitorsRequest](#listconfigsmonitorsrequest)) [ListConfigsMonitorsResponse](#listconfigsmonitorsresponse)

#### ListMonitors

ListMonitors ([ListMonitorsRequest](#listmonitorsrequest)) [ListMonitorsResponse](#listmonitorsresponse)

### EntityExecutionsService

(synq.entities.executions.v2.EntityExecutionsService)

EntityExecutionsService provides read-only access to entity execution history.
This service allows customers to retrieve information about all executions that happened on their entities,
including execution status, timing, and messages.

Use cases:

* Retrieve execution history for specific entities
* Filter executions by time range, status, or execution type
* Get aggregated summaries of execution activity
* Track execution trends and patterns

#### ListExecutions

ListExecutions ([ListExecutionsRequest](#listexecutionsrequest)) [ListExecutionsResponse](#listexecutionsresponse)

ListExecutions retrieves a paginated list of executions for one or more entities.
Executions are returned in reverse chronological order (newest first).

Supports filtering by:

* Entity identifiers (required)
* Time range
* Execution type(s)
* Status(es)

#### BatchGetExecutions

BatchGetExecutions ([BatchGetExecutionsRequest](#batchgetexecutionsrequest)) [BatchGetExecutionsResponse](#batchgetexecutionsresponse)

BatchGetExecutions retrieves multiple executions by their IDs.
This is useful when you already know the execution IDs and want to fetch their details.

#### GetExecutionsSummary

GetExecutionsSummary ([GetExecutionsSummaryRequest](#getexecutionssummaryrequest)) [GetExecutionsSummaryResponse](#getexecutionssummaryresponse)

GetExecutionsSummary provides aggregated statistics about executions for specified entities.
This is useful for quickly understanding execution patterns without fetching all execution details.

Returns:

* Counts by execution type
* Counts by status
* Time range of available executions
* Latest execution per entity

#### GetLatestExecutions

GetLatestExecutions ([GetLatestExecutionsRequest](#getlatestexecutionsrequest)) [GetLatestExecutionsResponse](#getlatestexecutionsresponse)

GetLatestExecutions retrieves the most recent execution for each specified entity.
IMPORTANT: Only returns executions where the entity appears in EntityExecution.entities (what executed).
This means it returns executions OF the entity (e.g., model runs, monitor runs, task runs),
NOT executions that merely reference the entity in targets or extra\_references.
For example, querying for a table won't return results because tables don't execute on their own -
they are created/updated by models (which do execute).
Optionally filter by execution status to get the latest execution with a specific status.

### EntityExecutionsService

(synq.entities.executions.v1.EntityExecutionsService)

Deprecated: Use \[synq.entities.custom.v1.EntityExecutionsService] instead

#### UpsertExecution

UpsertExecution ([UpsertExecutionRequest](#upsertexecutionrequest)) [UpsertExecutionResponse](#upsertexecutionresponse)

Execution affects status of the custom entity

#### UpsertLogEntry

UpsertLogEntry ([UpsertLogEntryRequest](#upsertlogentryrequest)) [UpsertLogEntryResponse](#upsertlogentryresponse)

LogEntry is a log message for the custom entity

### LineageService

(synq.entities.lineage.v1.LineageService)

LineageService allows you to fetch:

* Entity level lineage from a starting point of one or more entities.
* Column Level lineage from a starting point of multiple columns of a single entity.

#### GetLineage

GetLineage ([GetLineageRequest](#getlineagerequest)) [GetLineageResponse](#getlineageresponse)

### ChecksCategoriesService

(synq.entities.checks.v2.ChecksCategoriesService)

ChecksCategoriesService reads and edits the categories of the checks in a
workspace.

Categorising checks is what turns a long list of tests into a picture of data
quality: it lets you ask how much of a data product is covered for
completeness, or which freshness checks exist across three warehouses that
each name the same idea differently.

Every check resolves to at most one category per dimension:

* technical — what kind of check this is, mechanically ("nullness",
  "uniqueness", "freshness");
* governance — what the check is for, in data-quality terms
  ("Completeness", "Accuracy", "Timeliness").

The two are independent, and each resolves from three sources, in descending
precedence: a category set explicitly on the check through this service, a
category the producing tool declared, and a category one of the workspace's
categorisation rules computed. Rules are managed by
ChecksCategorisationRulesService and are the right tool for anything that
generalises; set a category explicitly only for the checks that are genuine
exceptions.

The workspace and the acting identity always come from the request
credentials, never from the payload.

#### UpsertCheckCategories

UpsertCheckCategories ([UpsertCheckCategoriesRequest](#upsertcheckcategoriesrequest)) [UpsertCheckCategoriesResponse](#upsertcheckcategoriesresponse)

Set the category of one or more checks explicitly. An explicit category is
authoritative for its check: it overrides both the producer-declared
category and anything the categorisation rules compute, and it survives
every later rule change.

Each dimension updates independently. A field that is omitted leaves that
dimension as it is; a field set to the empty string clears the explicit
category on that dimension, so the check falls back to its
producer-declared or rule-computed value. Repeating the same request
converges to the same state rather than accumulating changes.

#### DeleteCheckCategories

DeleteCheckCategories ([DeleteCheckCategoriesRequest](#deletecheckcategoriesrequest)) [DeleteCheckCategoriesResponse](#deletecheckcategoriesresponse)

Clear the explicit categories of one or more checks, on both dimensions.
Each check falls back to its producer-declared or rule-computed category.
Idempotent — clearing a check that has no explicit category succeeds.

#### ListCheckCategories

ListCheckCategories ([ListCheckCategoriesRequest](#listcheckcategoriesrequest)) [ListCheckCategoriesResponse](#listcheckcategoriesresponse)

List the workspace's checks with their resolved categories. Returns every
check by default; the filters combine, so one call answers questions like
"which dbt tests still have no governance category" or "which checks did
this rule categorise".

#### BatchGetCheckCategories

BatchGetCheckCategories ([BatchGetCheckCategoriesRequest](#batchgetcheckcategoriesrequest)) [BatchGetCheckCategoriesResponse](#batchgetcheckcategoriesresponse)

Read the categories of specific checks. Ids that do not exist are omitted
from the response rather than causing an error, so a partially-stale list
of ids still returns what it can.

#### ListCategories

ListCategories ([ListCategoriesRequest](#listcategoriesrequest)) [ListCategoriesResponse](#listcategoriesresponse)

List the workspace's category vocabulary: the category names in use on
each dimension, whether a workspace or platform rule produces each one, and
how many checks carry it. Use it to populate a category picker so a
workspace converges on one spelling per concept, and to see how much of the
workspace is still uncategorised.

#### ListCategorisationFilters

ListCategorisationFilters ([ListCategorisationFiltersRequest](#listcategorisationfiltersrequest)) [ListCategorisationFiltersResponse](#listcategorisationfiltersresponse)

List the attribute values the workspace's checks actually have — the
platforms, entity types, packages and kinds available to build a
categorisation rule or a listing filter from.

Pass `selected` to narrow each list to values that co-occur with the
current selection, so a rule editor never offers a combination that matches
nothing. A list never constrains itself: choosing one platform still leaves
every other platform selectable.

### ChecksCategorisationRulesService

(synq.entities.checks.v2.ChecksCategorisationRulesService)

ChecksCategorisationRulesService manages the rules that categorise a
workspace's checks automatically.

A rule says "checks matching this predicate get this category on this
dimension". Rules are the scalable way to categorise: they apply to checks
that already exist and to every check ingested afterwards, so a new dbt
package or a new warehouse does not mean a fresh round of manual tagging. A
rule-computed category is the lowest-precedence source — a category set
explicitly on a check through ChecksCategoriesService, and one the producing
tool declared, both win over it.

A typical loop is: ListCategorisationFilters to see what the workspace's
checks look like, PreviewRule to check the reach of a candidate, UpsertRule
to save it, then GetRecategorisationStatus to confirm the existing checks
have caught up.

Every workspace starts with a set of platform-provided rules covering the
common cases. They are visible here, they can be superseded by a workspace
rule of any priority, and they cannot be edited from a workspace.

#### UpsertRule

UpsertRule ([UpsertRuleRequest](#upsertrulerequest)) [UpsertRuleResponse](#upsertruleresponse)

Create or update a categorisation rule.

The rule id is supplied by the caller (a UUID), which makes this operation
idempotent — repeating the same request converges to the same rule rather
than creating a duplicate. On create, `dimension`, `title`, `category` and
`matcher` are required. On update, a field that is set is written and a
field that is omitted is left unchanged. To guard against overwriting a
concurrent edit, pass the `etag` you last read.

Saving a rule schedules a sweep that recategorises the workspace's existing
checks. It normally completes in seconds; GetRecategorisationStatus
confirms it.

#### DeleteRule

DeleteRule ([DeleteRuleRequest](#deleterulerequest)) [DeleteRuleResponse](#deleteruleresponse)

Delete a categorisation rule. Checks the rule categorised fall back to the
next rule that matches them, or become uncategorised. Idempotent —
deleting an already-deleted or unknown rule succeeds. Pass `etag` to guard
against deleting a concurrently-edited rule.

#### ListRules

ListRules ([ListRulesRequest](#listrulesrequest)) [ListRulesResponse](#listrulesresponse)

List the rules that apply to the caller's workspace — its own rules plus
the platform-provided ones — in the order they are tried. Narrow with
`dimension` and `scope`.

#### BatchGetRules

BatchGetRules ([BatchGetRulesRequest](#batchgetrulesrequest)) [BatchGetRulesResponse](#batchgetrulesresponse)

Read specific rules by id — typically to resolve the `rule_id` a
ResolvedCategory carries into the rule that produced it. Ids the caller
cannot see, or that do not exist, are omitted from the response rather than
causing an error.

#### PreviewRule

PreviewRule ([PreviewRuleRequest](#previewrulerequest)) [PreviewRuleResponse](#previewruleresponse)

Report what a candidate rule would change, without saving it.

The candidate is slotted into the workspace's live rule set — replacing an
existing rule when `id` names one — and the whole resolution is run over
every check, so scope, priority, explicit categories and producer-declared
categories are all honoured. The response separates the candidate's raw
reach from its real effect, which are rarely the same number.

Preview a rule before saving it: one that matches broadly can recategorise
a large part of a workspace in a single sweep.

#### ListRuleMatches

ListRuleMatches ([ListRuleMatchesRequest](#listrulematchesrequest)) [ListRuleMatchesResponse](#listrulematchesresponse)

Report how many checks each rule currently categorises, with a sample of
them — the state already applied, not a projection. Use it to show
"categorises N checks" next to each rule, and to spot a rule that has
stopped matching anything. For the full, paginated list of one rule's
checks, call ChecksCategoriesService.ListCheckCategories with the rule id.

#### GetRecategorisationStatus

GetRecategorisationStatus ([GetRecategorisationStatusRequest](#getrecategorisationstatusrequest)) [GetRecategorisationStatusResponse](#getrecategorisationstatusresponse)

Progress of the re-categorisation sweep a rule change schedules. The sweep
normally completes in seconds, so this is how to confirm that the
workspace's existing checks have caught up with the new rules — not
something a client has to wait on.

### ChecksCategoriesService

(synq.entities.checks.v1.ChecksCategoriesService)

ChecksCategoriesService lets workspace admins set explicit category
overrides on individual checks. An explicit category is the
authoritative category for a check — it takes precedence over the
categories computed by the workspace's categorisation rules.

It is a public API so customers can manage check categories
programmatically; the same service is also mounted on the internal
API. The workspace and the acting identity are always taken from the
request context, never from the payload.

#### UpsertCheckCategories

UpsertCheckCategories ([UpsertCheckCategoriesRequest](#upsertcheckcategoriesrequest)) [UpsertCheckCategoriesResponse](#upsertcheckcategoriesresponse)

UpsertCheckCategories sets (or replaces) the explicit category for
one or more checks. Each entry is the complete state for its check —
both dimensions — so an empty `category` / `governance_category` means
"no explicit value for that dimension".

#### DeleteCheckCategories

DeleteCheckCategories ([DeleteCheckCategoriesRequest](#deletecheckcategoriesrequest)) [DeleteCheckCategoriesResponse](#deletecheckcategoriesresponse)

DeleteCheckCategories clears the explicit category (both dimensions)
for the given checks. Checks fall back to their rule-computed
categories afterwards.

#### ListCheckCategories

ListCheckCategories ([ListCheckCategoriesRequest](#listcheckcategoriesrequest)) [ListCheckCategoriesResponse](#listcheckcategoriesresponse)

ListCheckCategories returns every explicit check category in the
caller's workspace.

### ChecksCoverageService

(synq.entities.checks.v1.ChecksCoverageService)

ChecksCoverageService provides functionality to retrieve and analyze the coverage of checks
for entities in the system. It helps track which checks are applied to entities, including
both direct checks and propagated checks from upstream entities.

#### GetCoverage

GetCoverage ([GetCoverageRequest](#getcoveragerequest)) [GetCoverageResponse](#getcoverageresponse)

GetCoverage retrieves the coverage of checks for a specific entity.
This includes both direct checks applied to the entity and checks propagated
from upstream entities. The response provides detailed information about:

* Table-level checks
* Column-level checks
* Check propagation paths
* Column usage statistics

### TableConstraintsService

(synq.entities.constraints.v1.TableConstraintsService)

TableConstraintsService provides access to table constraint and index information.

#### GetTableConstraints

GetTableConstraints ([GetTableConstraintsRequest](#gettableconstraintsrequest)) [GetTableConstraintsResponse](#gettableconstraintsresponse)

Get table constraints (primary keys, foreign keys, indexes, etc.) for a given entity.

### SqlInsightsService

(synq.entities.sql\_insights.v1.SqlInsightsService)

SqlInsightsService exposes analytical information about the SQL used across a
workspace's entities. It answers questions such as "which SQL constructs are
used in my warehouse, and how often" and "what SQL constructs does this
specific entity use", without requiring the caller to re-parse any SQL.

#### ListSqlConstructs

ListSqlConstructs ([ListSqlConstructsRequest](#listsqlconstructsrequest)) [ListSqlConstructsResponse](#listsqlconstructsresponse)

ListSqlConstructs returns the distribution of SQL constructs across all
entities in the workspace, with an occurrence count per construct. The
result is workspace-scoped (derived from the authenticated request) — no
entity paths are supplied. Useful for building filter/autocomplete UIs and
for high-level "shape of our SQL" analytics.

#### BatchSqlDetails

BatchSqlDetails ([BatchSqlDetailsRequest](#batchsqldetailsrequest)) [BatchSqlDetailsResponse](#batchsqldetailsresponse)

BatchSqlDetails returns the SQL details (currently the set of detected SQL
constructs) for each of the requested entities, keyed by their synq path.
Entities with no SQL details are omitted from the response map.

### EntityIncidentsService

(synq.entities.status.v1.EntityIncidentsService)

EntityIncidentsService is the service which retrieves entity status.

#### GetIncidents

GetIncidents ([GetIncidentsRequest](#getincidentsrequest)) [GetIncidentsResponse](#getincidentsresponse)

Get specific entity status by its identifier.

#### BatchGetIncidents

BatchGetIncidents ([BatchGetIncidentsRequest](#batchgetincidentsrequest)) [BatchGetIncidentsResponse](#batchgetincidentsresponse)

Get multiple entity statuses by their identifiers.

### EntityIssuesService

(synq.entities.status.v1.EntityIssuesService)

EntityIssuesService is the service which retrieves entity issues status.

#### GetIssuesStatus

GetIssuesStatus ([GetIssuesStatusRequest](#getissuesstatusrequest)) [GetIssuesStatusResponse](#getissuesstatusresponse)

Get specific entity status by its identifier.

#### BatchGetIssuesStatus

BatchGetIssuesStatus ([BatchGetIssuesStatusRequest](#batchgetissuesstatusrequest)) [BatchGetIssuesStatusResponse](#batchgetissuesstatusresponse)

Get multiple entity statuses by their identifiers.

### EntitiesService

(synq.entities.entities.v1.EntitiesService)

EntitiesService is a service for retriving any entity.

#### GetEntity

GetEntity ([GetEntityRequest](#getentityrequest)) [GetEntityResponse](#getentityresponse)

Get specific entity by its identifier.

#### BatchGetEntities

BatchGetEntities ([BatchGetEntitiesRequest](#batchgetentitiesrequest)) [BatchGetEntitiesResponse](#batchgetentitiesresponse)

Get multiple entities by their identifiers.

#### ListEntities

ListEntities ([ListEntitiesRequest](#listentitiesrequest)) [ListEntitiesResponse](#listentitiesresponse)

List entities matching the given filter

#### SearchEntities

SearchEntities ([SearchEntitiesRequest](#searchentitiesrequest)) [SearchEntitiesResponse](#searchentitiesresponse)

Search for entities.

### OrchestrationService

(synq.entities.orchestration.v1.OrchestrationService)

OrchestrationService provides information about orchestration relationships between entities.
This includes relationships between Airflow tasks and transformation models (dbt, SQLMesh),
as well as task-to-task dependencies.

#### BatchOrchestration

BatchOrchestration ([BatchOrchestrationRequest](#batchorchestrationrequest)) [BatchOrchestrationResponse](#batchorchestrationresponse)

BatchOrchestration retrieves orchestration relationships for multiple entities.
For each entity, it returns both upstream entities (what orchestrates it) and
downstream entities (what it orchestrates).

### AnnotationsService

(synq.entities.annotations.v1.AnnotationsService)

AnnotationsService provides operations for managing and querying entity annotations.
Annotations are key-value pairs that can be attached to entities for categorization and filtering.

#### ListAnnotations

ListAnnotations ([ListAnnotationsRequest](#listannotationsrequest)) [ListAnnotationsResponse](#listannotationsresponse)

List all available annotations with their usage counts across entities.

### RelationshipsService

(synq.entities.custom.v1.RelationshipsService)

RelationshipsService allow management of relationships between entities. Relationships can
be created, updated, and deleted between 2 custom entities, or between a custom entity and Coalesce Quality native entity.enum
There is no option to create relationships between 2 Coalesce Quality native entities (dbt model, BI dashboard, etc.).

#### UpsertRelationships

UpsertRelationships ([UpsertRelationshipsRequest](#upsertrelationshipsrequest)) [UpsertRelationshipsResponse](#upsertrelationshipsresponse)

Create or update relationships between entities. If the relationship already exists, it will be updated, otherwise it will be created.

#### DeleteRelationships

DeleteRelationships ([DeleteRelationshipsRequest](#deleterelationshipsrequest)) [DeleteRelationshipsResponse](#deleterelationshipsresponse)

Delete relationships between entities. If the relationship does not exist, it will be ignored.

#### ListRelationships

ListRelationships ([ListRelationshipsRequest](#listrelationshipsrequest)) [ListRelationshipsResponse](#listrelationshipsresponse)

Delete relationships between entities. If the relationship does not exist, it will be ignored.

### EntityExecutionsService

(synq.entities.custom.v1.EntityExecutionsService)

#### UpsertExecution

UpsertExecution ([UpsertExecutionRequest](#upsertexecutionrequest)) [UpsertExecutionResponse](#upsertexecutionresponse)

Execution affects status of the custom entity

#### UpsertLogEntry

UpsertLogEntry ([UpsertLogEntryRequest](#upsertlogentryrequest)) [UpsertLogEntryResponse](#upsertlogentryresponse)

LogEntry is a log message for the custom entity

### FeaturesService

(synq.entities.custom.v1.FeaturesService)

#### UpsertEntityFeature

UpsertEntityFeature ([UpsertEntityFeatureRequest](#upsertentityfeaturerequest)) [UpsertEntityFeatureResponse](#upsertentityfeatureresponse)

Create or update an entity. If the entity does not exist, it will be created, otherwise it will be updated. Entities are identified and deduplicated by their Identifier in a scope of a given customer workspace.

#### DeleteEntityFeature

DeleteEntityFeature ([DeleteEntityFeatureRequest](#deleteentityfeaturerequest)) [DeleteEntityFeatureResponse](#deleteentityfeatureresponse)

Delete an entity by its identifier. If the entity does not exist, it will be a no-op.

#### ListEntityFeatures

ListEntityFeatures ([ListEntityFeaturesRequest](#listentityfeaturesrequest)) [ListEntityFeaturesResponse](#listentityfeaturesresponse)

List all entities.

### EntitiesService

(synq.entities.custom.v1.EntitiesService)

custom.EntitiesService is a service for managing custom entities. Entities can represent
various data platform concepts such as services, consumers, applications or data pipelines
that are not natively available in Coalesce Quality.

Entities are identified by a unique identifier and can be created, updated, read and deleted.

#### UpsertEntity

UpsertEntity ([UpsertEntityRequest](#upsertentityrequest)) [UpsertEntityResponse](#upsertentityresponse)

Create or update an entity. If the entity does not exist, it will be created, otherwise it will be updated. Entities are identified and deduplicated by their Identifier in a scope of a given customer workspace.

#### DeleteEntity

DeleteEntity ([DeleteEntityRequest](#deleteentityrequest)) [DeleteEntityResponse](#deleteentityresponse)

Delete an entity by its identifier. If the entity does not exist, it will be a no-op.

#### ListEntities

ListEntities ([ListEntitiesRequest](#listentitiesrequest)) [ListEntitiesResponse](#listentitiesresponse)

List all entities.

### GroupsService

(synq.entities.custom.v1.GroupsService)

It eliminates the need to keep state on client side to remember which assets were already created
and which should be deleted. The server will keep track of the current state of the group and client
can always send the intended new state. The server will calculate the diff and entities that are
no longer present in the group will be removed.

Example:

1. group has entities A, B, C at time t1
2. client sends group with entities B, C, D at time t2
3. server will remove entity A from the system and update the current state of the group to B, C, D

The service is designed to be idempotent and can be called multiple times with the same state without
causing any side effects.

#### ListEntityGroups

ListEntityGroups ([ListEntityGroupsRequest](#listentitygroupsrequest)) [ListEntityGroupsResponse](#listentitygroupsresponse)

ListEntityGroups lists all groups.

#### UpsertEntitiesGroup

UpsertEntitiesGroup ([UpsertEntitiesGroupRequest](#upsertentitiesgrouprequest)) [UpsertEntitiesGroupResponse](#upsertentitiesgroupresponse)

UpsertEntitiesGroup updates current definition of group to the server. As part of the upsert operation
the difference of entity ids is calculated between past state and the current state and entities that are
no longer part of the group are removed.

#### DeleteEntitiesGroup

DeleteEntitiesGroup ([DeleteEntitiesGroupRequest](#deleteentitiesgrouprequest)) [DeleteEntitiesGroupResponse](#deleteentitiesgroupresponse)

DeleteEntitiesGroup deletes a group by its identifier. If the group does not exist, it will be a no-op.

### TypesService

(synq.entities.custom.v1.TypesService)

TypesService is a service for managing custom entity types.

#### UpsertType

UpsertType ([UpsertTypeRequest](#upserttyperequest)) [UpsertTypeResponse](#upserttyperesponse)

Create or update an entity. If the entity does not exist, it will be created, otherwise it will be updated. Entities are identified and deduplicated by their Identifier in a scope of a given customer workspace.

#### DeleteType

DeleteType ([DeleteTypeRequest](#deletetyperequest)) [DeleteTypeResponse](#deletetyperesponse)

Delete an entity by its identifier. If the entity does not exist, it will be a no-op.

#### ListTypes

ListTypes ([ListTypesRequest](#listtypesrequest)) [ListTypesResponse](#listtypesresponse)

List all entities.

### ChecksRelationshipsService

(synq.entities.custom.v1.ChecksRelationshipsService)

#### UpsertCheckRelationships

UpsertCheckRelationships ([UpsertCheckRelationshipsRequest](#upsertcheckrelationshipsrequest)) [UpsertCheckRelationshipsResponse](#upsertcheckrelationshipsresponse)

Create or update relationships that attach a check (e.g. a SQL test) to the
entities it validates. Idempotent per (check, checked) pair: an existing
relationship is updated, otherwise it is created.

#### DeleteCheckRelationships

DeleteCheckRelationships ([DeleteCheckRelationshipsRequest](#deletecheckrelationshipsrequest)) [DeleteCheckRelationshipsResponse](#deletecheckrelationshipsresponse)

Delete relationships between checks and the entities they validate.
Relationships that do not exist are ignored.

### FoldersService

(synq.entities.folders.v1.FoldersService)

FoldersService discovers and browses the folder / containment hierarchy of the
catalog: the roots data hangs from, the sub-folders under any folder, the
folders a given entity lives in, and the entities contained in a folder.

It is a read / navigation surface, not folder management — there are no
create, move, or delete operations.

Addressing: every folder has an opaque `folder_entity_id` (round-trip it
verbatim) and a structured `FolderRef{root_entity_id, folders[]}` (the
human-friendly form). Entities — both folder members and the ids you pass to
`GetFolderOf` — are named by their opaque entity id, the same id used across
the rest of the entities API.

Depth footgun: membership is SHALLOW by default. `Browse` returns only the
direct children of a folder, and `ListMembers` returns only the entities
placed directly in the folder. Set `deep = true` (or raise `Browse.depth`) to
recurse into sub-folders.

#### Browse

Browse ([BrowseRequest](#browserequest)) [BrowseResponse](#browseresponse)

Browse the hierarchy one level at a time. With no `parent`, returns the
roots (top-level integrations / containers). With a `parent` folder, returns
that folder's direct sub-folders and the entity ids of its direct,
non-folder members.

One level per call — sub-folders are returned as `Folder`s (each with a
`child_folder_count`), which you Browse into in turn; there is no nested
tree in the response. `filter` narrows the returned members to entities
matching a query.

#### GetFolderOf

GetFolderOf ([GetFolderOfRequest](#getfolderofrequest)) [GetFolderOfResponse](#getfolderofresponse)

Given entity ids, return the folder breadcrumb(s) each entity lives in —
ordered root first, leaf (immediate parent) last. An entity may appear in
more than one hierarchy; the response carries every folder along its
containing chain. Compose with `ListMembers` on an entity's immediate parent
to list its siblings.

#### ListMembers

ListMembers ([ListMembersRequest](#listmembersrequest)) [ListMembersResponse](#listmembersresponse)

List the entity ids contained in a folder, paginated. Direct members only by
default; set `deep = true` to include members of all nested sub-folders.
Narrow with `types` and/or `filter`.

Pagination is a stable client-side window over the folder's fully-resolved
member set: each page recomputes and re-orders that set, then returns the
requested slice. Results are consistent, but paging deep through a very
large folder repeats work — prefer a larger `page_size` over many small
pages.

### SchemaMismatchesService

(synq.entities.schemas.v1.SchemaMismatchesService)

SchemaMismatchesService provides access to schema drift information between
data platform tables and their definitions (e.g., dbt models).

#### BatchSchemaMismatches

BatchSchemaMismatches ([BatchSchemaMismatchesRequest](#batchschemamismatchesrequest)) [BatchSchemaMismatchesResponse](#batchschemamismatchesresponse)

Get schema mismatches for a batch of entities by their identifiers.

### SchemasService

(synq.entities.schemas.v1.SchemasService)

EntitiesService is a service for retriving any entity.

#### GetSchema

GetSchema ([GetSchemaRequest](#getschemarequest)) [GetSchemaResponse](#getschemaresponse)

Get schema of the entity its identifier.

### IdentifierResolveService

(synq.entities.resolve.v1.IdentifierResolveService)

IdentifierResolveService resolves identifiers to their Coalesce Quality paths and identities.

#### BatchResolveIdentifiers

BatchResolveIdentifiers ([BatchResolveIdentifiersRequest](#batchresolveidentifiersrequest)) [BatchResolveIdentifiersResponse](#batchresolveidentifiersresponse)

Resolve multiple identifiers, returning their Coalesce Quality paths and identity groups.

### ChangesService

(synq.entities.changes.v1.ChangesService)

ChangesService provides functionality to track and retrieve all types of changes to data entities.

This unified service returns ALL change types for an entity:

* Git commits: Changes to code files (dbt models, SQL files) tracked in version control
* Schema changes: Database schema modifications (columns added/removed/changed)
* SQL definition changes: View/materialized view definition updates detected by Coalesce Quality

Changes are returned with structured metadata including:

* For git commits: structured statistics (directories, file types, top changes)
* For schema changes: detailed column-level diffs
* For SQL changes: before/after SQL definitions

Use cases:

* "What changed in the last week for table X?" → Returns git commits, schema changes, SQL changes
* "Show me all commits affecting this dbt model" → Returns git commits with lineage context
* "What schema changes happened to this table?" → Returns schema changes detected by Coalesce Quality

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

Retrieves the complete change history for specified entities.
Returns all change types (git commits, schema changes, SQL changes) in chronological order (newest first).
Changes include lineage context showing upstream\_distance when changes affect dependencies.

#### BatchChange

BatchChange ([BatchChangeRequest](#batchchangerequest)) [BatchChangeResponse](#batchchangeresponse)

BatchChange retrieves multiple entity changes by their IDs in a single request.
This is an optimized endpoint for fetching specific changes when you already know their IDs,
rather than listing changes for an entity.

### ImpactService

(synq.entities.impact.v1.ImpactService)

#### GetImpact

GetImpact ([GetImpactRequest](#getimpactrequest)) [GetImpactResponse](#getimpactresponse)

### DatabaseCoordinatesService

(synq.entities.coordinates.v1.DatabaseCoordinatesService)

DatabaseCoordinatesService is a service for getting database coordinates of Entities.

#### BatchDatabaseCoordinates

BatchDatabaseCoordinates ([BatchDatabaseCoordinatesRequest](#batchdatabasecoordinatesrequest)) [BatchDatabaseCoordinatesResponse](#batchdatabasecoordinatesresponse)

Get multiple DatabaseCoordinates for identifiers.

#### BatchIdsByCoordinates

BatchIdsByCoordinates ([BatchIdsByCoordinatesRequest](#batchidsbycoordinatesrequest)) [BatchIdsByCoordinatesResponse](#batchidsbycoordinatesresponse)

Given database FQN return possible entity ids.

### CodeService

(synq.entities.code.v1.CodeService)

CodeService is a service for retrieving code associated with entities in the system.
It provides functionality to access and manage code artifacts such as SQL queries,
Python scripts, dbt models, and other code configurations that are part of Coalesce Quality entities.

#### ListCode

ListCode ([ListCodeRequest](#listcoderequest)) [ListCodeResponse](#listcoderesponse)

ListCode retrieves all code artifacts associated with a specific entity.
This includes SQL queries, Python scripts, dbt models, and other code configurations
that define or are part of the entity's functionality.

### AlertsService

(synq.alerts.services.v1.AlertsService)

AlertsService provides operations for managing alert configurations.

#### Create

Create ([CreateRequest](#createrequest)) [CreateResponse](#createresponse)

Create a new alert configuration.

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

Retrieves a list of alert configurations based on filters.

#### BatchGet

BatchGet ([BatchGetRequest](#batchgetrequest)) [BatchGetResponse](#batchgetresponse)

Get multiple alert configurations by their identifiers.

#### Update

Update ([UpdateRequest](#updaterequest)) [UpdateResponse](#updateresponse)

Update an existing alert configuration.
The config can be identified by either ID or FQN.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete an existing alert configuration.
The config can be identified by either ID or FQN.

#### ToggleEnabled

ToggleEnabled ([ToggleEnabledRequest](#toggleenabledrequest)) [ToggleEnabledResponse](#toggleenabledresponse)

Enables or disables an existing alert configuration.
The config can be identified by either ID or FQN.

### IamService

(synq.auth.iam.v1.IamService)

#### Iam

Iam ([IamRequest](#iamrequest)) [IamResponse](#iamresponse)

Iam returns information about caller authentication

### TestSuggestionsService

(synq.datachecks.testsuggestions.v1.TestSuggestionsService)

#### BatchCreateTestSuggestions

BatchCreateTestSuggestions ([BatchCreateTestSuggestionsRequest](#batchcreatetestsuggestionsrequest)) [BatchCreateTestSuggestionsResponse](#batchcreatetestsuggestionsresponse)

#### BatchGetTestSuggestionsForEntities

BatchGetTestSuggestionsForEntities ([BatchGetTestSuggestionsForEntitiesRequest](#batchgettestsuggestionsforentitiesrequest)) [BatchGetTestSuggestionsForEntitiesResponse](#batchgettestsuggestionsforentitiesresponse)

#### BatchAcceptTestSuggestions

BatchAcceptTestSuggestions ([BatchAcceptTestSuggestionsRequest](#batchaccepttestsuggestionsrequest)) [BatchAcceptTestSuggestionsResponse](#batchaccepttestsuggestionsresponse)

#### BatchRejectTestSuggestions

BatchRejectTestSuggestions ([BatchRejectTestSuggestionsRequest](#batchrejecttestsuggestionsrequest)) [BatchRejectTestSuggestionsResponse](#batchrejecttestsuggestionsresponse)

### TriggerService

(synq.datachecks.v1.TriggerService)

TriggerService provides synchronous execution of datachecks on entities.

#### TriggerDatachecks

TriggerDatachecks ([TriggerDatachecksRequest](#triggerdatachecksrequest)) [TriggerDatachecksResponse](#triggerdatachecksresponse)

TriggerDatachecks executes datachecks for the specified entities.

### SqlTestsService

(synq.datachecks.sqltests.v1.SqlTestsService)

SqlTestsService is a service for managing SqlTests.

#### BatchUpsertSqlTests

BatchUpsertSqlTests ([BatchUpsertSqlTestsRequest](#batchupsertsqltestsrequest)) [BatchUpsertSqlTestsResponse](#batchupsertsqltestsresponse)

Upsert SqlTests based on a unique ID.

#### ListSqlTests

ListSqlTests ([ListSqlTestsRequest](#listsqltestsrequest)) [ListSqlTestsResponse](#listsqltestsresponse)

List SqlTests for given annotations.

#### BatchGetSqlTests

BatchGetSqlTests ([BatchGetSqlTestsRequest](#batchgetsqltestsrequest)) [BatchGetSqlTestsResponse](#batchgetsqltestsresponse)

Get SqlTests by their IDs.

#### BatchDeleteSqlTests

BatchDeleteSqlTests ([BatchDeleteSqlTestsRequest](#batchdeletesqltestsrequest)) [BatchDeleteSqlTestsResponse](#batchdeletesqltestsresponse)

Delete SqlTests by their IDs.

#### GetSqlTestAudit

GetSqlTestAudit ([GetSqlTestAuditRequest](#getsqltestauditrequest)) [GetSqlTestAuditResponse](#getsqltestauditresponse)

Get SqlTest audit from a given execution ID in jwt token.

### SqlTestsDeploymentRulesService

(synq.datachecks.sqltests.v1.SqlTestsDeploymentRulesService)

SqlTestsDeploymentRulesService manages SqlTestDeploymentRules — rules that
dynamically deploy SQL test templates onto every table or view a query
matches, resyncing over time as the match set changes.

#### GetSqlTestDeployOverview

GetSqlTestDeployOverview ([GetSqlTestDeployOverviewRequest](#getsqltestdeployoverviewrequest)) [GetSqlTestDeployOverviewResponse](#getsqltestdeployoverviewresponse)

Preview the effect of deploying a rule (which have not yet been saved), without
deploying it.

#### GetSqlTestDeployDeleteOverview

GetSqlTestDeployDeleteOverview ([GetSqlTestDeployDeleteOverviewRequest](#getsqltestdeploydeleteoverviewrequest)) [GetSqlTestDeployDeleteOverviewResponse](#getsqltestdeploydeleteoverviewresponse)

Preview the effect of deleting a rule, without deleting it.

#### ListSqlTestDeploymentRules

ListSqlTestDeploymentRules ([ListSqlTestDeploymentRulesRequest](#listsqltestdeploymentrulesrequest)) [ListSqlTestDeploymentRulesResponse](#listsqltestdeploymentrulesresponse)

#### BatchGetSqlTestDeploymentRules

BatchGetSqlTestDeploymentRules ([BatchGetSqlTestDeploymentRulesRequest](#batchgetsqltestdeploymentrulesrequest)) [BatchGetSqlTestDeploymentRulesResponse](#batchgetsqltestdeploymentrulesresponse)

#### DeploySqlTestDeploymentRule

DeploySqlTestDeploymentRule ([DeploySqlTestDeploymentRuleRequest](#deploysqltestdeploymentrulerequest)) [DeploySqlTestDeploymentRuleResponse](#deploysqltestdeploymentruleresponse)

Deploy (create or update) a SqlTestDeploymentRule and immediately sync tests
onto its current match set.

#### BatchDeploySqlTestDeploymentRules

BatchDeploySqlTestDeploymentRules ([BatchDeploySqlTestDeploymentRulesRequest](#batchdeploysqltestdeploymentrulesrequest)) [BatchDeploySqlTestDeploymentRulesResponse](#batchdeploysqltestdeploymentrulesresponse)

#### DeleteSqlTestDeploymentRule

DeleteSqlTestDeploymentRule ([DeleteSqlTestDeploymentRuleRequest](#deletesqltestdeploymentrulerequest)) [DeleteSqlTestDeploymentRuleResponse](#deletesqltestdeploymentruleresponse)

#### BatchDeleteSqlTestDeploymentRules

BatchDeleteSqlTestDeploymentRules ([BatchDeleteSqlTestDeploymentRulesRequest](#batchdeletesqltestdeploymentrulesrequest)) [BatchDeleteSqlTestDeploymentRulesResponse](#batchdeletesqltestdeploymentrulesresponse)

### AtlanIntegrationService

(synq.extensions.atlan.integrations.v1.AtlanIntegrationService)

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Upserts an integration and validates it by checking if the provided API URL and token are valid.

#### Ping

Ping ([PingRequest](#pingrequest)) [PingResponse](#pingresponse)

Pings Atlan with the given connection credentials.

#### Get

Get ([GetRequest](#getrequest)) [GetResponse](#getresponse)

#### Remove

Remove ([RemoveRequest](#removerequest)) [RemoveResponse](#removeresponse)

#### Activate

Activate ([ActivateRequest](#activaterequest)) [ActivateResponse](#activateresponse)

Activate or deactivate the integration.

### AtlanWorkflowService

(synq.extensions.atlan.workflows.v1.AtlanWorkflowService)

#### SetConnectionMappings

SetConnectionMappings ([SetConnectionMappingsRequest](#setconnectionmappingsrequest)) [SetConnectionMappingsResponse](#setconnectionmappingsresponse)

#### RemoveConnectionMappings

RemoveConnectionMappings ([RemoveConnectionMappingsRequest](#removeconnectionmappingsrequest)) [RemoveConnectionMappingsResponse](#removeconnectionmappingsresponse)

#### GetConnectionMappings

GetConnectionMappings ([GetConnectionMappingsRequest](#getconnectionmappingsrequest)) [GetConnectionMappingsResponse](#getconnectionmappingsresponse)

#### GetProductMappings

GetProductMappings ([GetProductMappingsRequest](#getproductmappingsrequest)) [GetProductMappingsResponse](#getproductmappingsresponse)

#### GetDomainMappings

GetDomainMappings ([GetDomainMappingsRequest](#getdomainmappingsrequest)) [GetDomainMappingsResponse](#getdomainmappingsresponse)

#### Synchronize

Synchronize ([SynchronizeRequest](#synchronizerequest)) [SynchronizeResponse](#synchronizeresponse)

Run a synchronization job for the integration.

#### FetchRuns

FetchRuns ([FetchRunsRequest](#fetchrunsrequest)) [FetchRunsResponse](#fetchrunsresponse)

#### SetMappingToggles

SetMappingToggles ([SetMappingTogglesRequest](#setmappingtogglesrequest)) [SetMappingTogglesResponse](#setmappingtogglesresponse)

#### GetMappingToggles

GetMappingToggles ([GetMappingTogglesRequest](#getmappingtogglesrequest)) [GetMappingTogglesResponse](#getmappingtogglesresponse)

### AtlanProviderService

(synq.extensions.atlan.provider.v1.AtlanProviderService)

#### GetAtlanConnections

GetAtlanConnections ([GetAtlanConnectionsRequest](#getatlanconnectionsrequest)) [GetAtlanConnectionsResponse](#getatlanconnectionsresponse)

#### GetAtlanDataProducts

GetAtlanDataProducts ([GetAtlanDataProductsRequest](#getatlandataproductsrequest)) [GetAtlanDataProductsResponse](#getatlandataproductsresponse)

#### GetAtlanDomains

GetAtlanDomains ([GetAtlanDomainsRequest](#getatlandomainsrequest)) [GetAtlanDomainsResponse](#getatlandomainsresponse)

### ScheduleService

(synq.schedule.v1.ScheduleService)

ScheduleService provides schedule evaluation utilities.

#### PreviewSchedules

PreviewSchedules ([PreviewSchedulesRequest](#previewschedulesrequest)) [PreviewSchedulesResponse](#previewschedulesresponse)

PreviewSchedules returns the next occurrences for one or more schedule expressions.
Never fails at the RPC level; per-schedule errors are returned in the response items.
Response items match request items by index.

### CommitsService

(synq.git.commits.v1.CommitsService)

#### GetDiffByChangeId

GetDiffByChangeId ([GetDiffByChangeIdRequest](#getdiffbychangeidrequest)) [GetDiffByChangeIdResponse](#getdiffbychangeidresponse)

#### GetDiffByCommit

GetDiffByCommit ([GetDiffByCommitRequest](#getdiffbycommitrequest)) [GetDiffByCommitResponse](#getdiffbycommitresponse)

### DataproductsService

(synq.dataproducts.v2.DataproductsService)

DataproductsService manages data products — named, owned groupings of data
assets with a membership definition, a priority and an optional folder.

Ids are opaque UUIDs supplied by the caller, which makes writes idempotent
(a retried create converges instead of duplicating). Mutable fields are
optional on Upsert: a field that is set is written, a field that is omitted is
left unchanged. Pass the `etag` you last read to guard against overwriting a
concurrent edit.

A data product is a leaf in the reference graph — its definition may not
reference another data product or domain — so membership resolution always
terminates.

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Create or update a data product. The id is supplied by the caller (a UUID);
repeating the same request converges to the same product. Mutable fields are
optional: a set field is written, an omitted field is left unchanged. Pass
`etag` to guard against overwriting a concurrent edit.

#### BatchGet

BatchGet ([BatchGetRequest](#batchgetrequest)) [BatchGetResponse](#batchgetresponse)

Fetch multiple data products by id. Ids that do not exist (or, unless
`include_deleted` is set, are deleted) are omitted from the response rather
than causing an error.

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

List the data products in the workspace, paginated. Narrow with `folder`
and `priorities`.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete a data product. Idempotent — deleting an already-deleted or unknown
product succeeds. Soft-deletes by default; set `purge` to hard-delete and
release the id. Pass `etag` to guard against deleting a concurrently-edited
product.

#### SetDefinition

SetDefinition ([SetDefinitionRequest](#setdefinitionrequest)) [SetDefinitionResponse](#setdefinitionresponse)

Replace the entire membership definition of a data product.

#### UpsertDefinitionPart

UpsertDefinitionPart ([UpsertDefinitionPartRequest](#upsertdefinitionpartrequest)) [UpsertDefinitionPartResponse](#upsertdefinitionpartresponse)

Add or replace a single definition part (matched by its part id).

#### RemoveDefinitionPart

RemoveDefinitionPart ([RemoveDefinitionPartRequest](#removedefinitionpartrequest)) [RemoveDefinitionPartResponse](#removedefinitionpartresponse)

Remove a single definition part by its part id. Idempotent.

#### ListMembers

ListMembers ([ListMembersRequest](#listmembersrequest)) [ListMembersResponse](#listmembersresponse)

List the assets that currently belong to a data product, resolved from its
definition and returned as opaque entity ids. Paginated.

### DataproductsService

(synq.dataproducts.v1.DataproductsService)

DataproductsService can be used to manage data products.

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Create or update a dataproduct.

#### Get

Get ([GetRequest](#getrequest)) [GetResponse](#getresponse)

Get multiple dataproducts by their identifiers.

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

List all the dataproducts in the current scope.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete a dataproduct by its identifier.
Soft deletes by default. Optionally purge the dataproduct to release the identifier.

#### SetDefinition

SetDefinition ([SetDefinitionRequest](#setdefinitionrequest)) [SetDefinitionResponse](#setdefinitionresponse)

Set the definition for an existing dataproduct.

#### UpsertDefinitionPart

UpsertDefinitionPart ([UpsertDefinitionPartRequest](#upsertdefinitionpartrequest)) [UpsertDefinitionPartResponse](#upsertdefinitionpartresponse)

Upsert definition part to the definition of an existing dataproduct.

#### RemoveDefinitionPart

RemoveDefinitionPart ([RemoveDefinitionPartRequest](#removedefinitionpartrequest)) [RemoveDefinitionPartResponse](#removedefinitionpartresponse)

Remove definition part from the definition of an existing dataproduct.

### SreAgentService

(synq.agent.sre.v1.SreAgentService)

#### Connect

Connect ([ConnectRequest](#connectrequest)) [ConnectResponse](#connectresponse)

buf:lint:ignore RPC\_NO\_CLIENT\_STREAMING

#### GetConfig

GetConfig ([GetConfigRequest](#getconfigrequest)) [GetConfigResponse](#getconfigresponse)

GetConfig returns the Scout configuration (system prompts + DWH connection
summary) for the caller's workspace. Authorized for the agent itself
(SCOPE\_SRE\_AGENT), for any caller with workspace integration-read access
(SCOPE\_INTEGRATION\_READ) so admins / owners can inspect the live prompts
via synqctl / fe-app without an agent token, and for MCP read tokens
(SCOPE\_MCP\_READ) — matches the sibling DWH ConnectionsService scope shape.

#### ListPromptSuggestions

ListPromptSuggestions ([ListPromptSuggestionsRequest](#listpromptsuggestionsrequest)) [ListPromptSuggestionsResponse](#listpromptsuggestionsresponse)

ListPromptSuggestions returns prompt-improvement suggestions recorded for the
caller's workspace. Default scope is pending suggestions only; set statuses to
include accepted / dismissed / superseded rows. Sorted newest first.

#### AcceptPromptSuggestion

AcceptPromptSuggestion ([AcceptPromptSuggestionRequest](#acceptpromptsuggestionrequest)) [AcceptPromptSuggestionResponse](#acceptpromptsuggestionresponse)

AcceptPromptSuggestion applies a pending suggestion to the matching SRE agent
prompt field. The applied value is `suggested_value` unless `edited_value` is set.
Returns FAILED\_PRECONDITION when the live prompt has drifted from the suggestion's
`baseline_value` since it was produced — the client should re-fetch and re-render.

#### DismissPromptSuggestion

DismissPromptSuggestion ([DismissPromptSuggestionRequest](#dismisspromptsuggestionrequest)) [DismissPromptSuggestionResponse](#dismisspromptsuggestionresponse)

DismissPromptSuggestion marks a pending suggestion as dismissed with an optional
free-text reason. The SRE agent configuration is left untouched.

#### RecordPromptSuggestion

RecordPromptSuggestion ([RecordPromptSuggestionRequest](#recordpromptsuggestionrequest)) [RecordPromptSuggestionResponse](#recordpromptsuggestionresponse)

RecordPromptSuggestion is the producer-side endpoint used by the offline
analyser to register a new suggestion for a workspace. The server snapshots
the current value of the targeted prompt field as `baseline_value`. Any
pending suggestion for the same `(workspace, field)` pair is marked as
superseded before the new row is inserted. Returns the recorded suggestion,
or an empty response when the baseline already matches `suggested_value`
(no-op).

Authorized for the agent / offline analyser (SCOPE\_SRE\_AGENT) and for
admins / owners with workspace integration-edit access
(SCOPE\_INTEGRATION\_EDIT), so an admin running synqctl can publish a
suggestion against a customer workspace via x-synq-workspace-override
without minting an agent token.

### TriageService

(synq.agent.sre.v1.TriageService)

Service for managing issue triage operations, allowing LLM agents to conclude investigations
and record evidence during the triage process.

#### Conclude

Conclude ([ConcludeRequest](#concluderequest)) [ConcludeResponse](#concluderesponse)

Concludes the triage investigation for one or more issues by providing a structured conclusion
and supporting evidence. This method is used by the LLM agent to finalize its investigation.

#### RecordEvidence

RecordEvidence ([RecordEvidenceRequest](#recordevidencerequest)) [RecordEvidenceResponse](#recordevidenceresponse)

Records evidence collected during the triage investigation. This method allows the LLM agent
to incrementally add evidence as it discovers information during the investigation process.

#### BatchLatestConclusions

BatchLatestConclusions ([BatchLatestConclusionsRequest](#batchlatestconclusionsrequest)) [BatchLatestConclusionsResponse](#batchlatestconclusionsresponse)

Retrieves the latest triage state for one or more issues. This method is used by the LLM agent
to retrieve the current state of the issues it is working on.

#### BatchTriageState

BatchTriageState ([BatchTriageStateRequest](#batchtriagestaterequest)) [BatchTriageStateResponse](#batchtriagestateresponse)

Retrieves the triage state for one or more issues. This method is used by the LLM agent
to retrieve the current state of the issues it is working on.

#### ListTriageState

ListTriageState ([ListTriageStateRequest](#listtriagestaterequest)) [ListTriageStateResponse](#listtriagestateresponse)

Retrieves the triage state for one or more issues. This method is used by the LLM agent
to retrieve the current state of the issues it is working on.

#### MarkAsInProgress

MarkAsInProgress ([MarkAsInProgressRequest](#markasinprogressrequest)) [MarkAsInProgressResponse](#markasinprogressresponse)

Marks an issue as in progress.  This method is used by the LLM agent to indicate that it has started working on an issue.

#### MarkFailed

MarkFailed ([MarkFailedRequest](#markfailedrequest)) [MarkFailedResponse](#markfailedresponse)

Marks an issue as failed triaging.  This method is used by the LLM agent to indicate that it was unable to triage.

### LlmService

(synq.agent.sre.v1.LlmService)

Service for evaluating LLM requests and producing structured output.

#### Evaluate

Evaluate ([EvaluateRequest](#evaluaterequest)) [EvaluateResponse](#evaluateresponse)

Evaluates an LLM request with a structured output schema and message history.
The main prompt should be constant as it will be cached for efficiency.

### TestsSuggestionStateService

(synq.agent.sre.v1.TestsSuggestionStateService)

#### SuggestFor

SuggestFor ([SuggestForRequest](#suggestforrequest)) [SuggestForResponse](#suggestforresponse)

#### GetActiveSuggestionStatesFor

GetActiveSuggestionStatesFor ([GetActiveSuggestionStatesForRequest](#getactivesuggestionstatesforrequest)) [GetActiveSuggestionStatesForResponse](#getactivesuggestionstatesforresponse)

#### BatchSuggestionStates

BatchSuggestionStates ([BatchSuggestionStatesRequest](#batchsuggestionstatesrequest)) [BatchSuggestionStatesResponse](#batchsuggestionstatesresponse)

#### ListSuggestionStates

ListSuggestionStates ([ListSuggestionStatesRequest](#listsuggestionstatesrequest)) [ListSuggestionStatesResponse](#listsuggestionstatesresponse)

#### MarkAsRunning

MarkAsRunning ([MarkAsRunningRequest](#markasrunningrequest)) [MarkAsRunningResponse](#markasrunningresponse)

#### MarkAsCompleted

MarkAsCompleted ([MarkAsCompletedRequest](#markascompletedrequest)) [MarkAsCompletedResponse](#markascompletedresponse)

#### MarkAsFailed

MarkAsFailed ([MarkAsFailedRequest](#markasfailedrequest)) [MarkAsFailedResponse](#markasfailedresponse)

#### MarkAsCancelled

MarkAsCancelled ([MarkAsCancelledRequest](#markascancelledrequest)) [MarkAsCancelledResponse](#markascancelledresponse)

### FeatureRequestService

(synq.agent.sre.v1.FeatureRequestService)

FeatureRequestService allows MCP clients to submit feature requests when users encounter
missing capabilities. This is a last-resort service — it should only be used when no
existing tool can fulfill the user's request.

#### SubmitFeatureRequest

SubmitFeatureRequest ([SubmitFeatureRequestRequest](#submitfeaturerequestrequest)) [SubmitFeatureRequestResponse](#submitfeaturerequestresponse)

SubmitFeatureRequest submits a feature request to the Coalesce Quality product team.
This method should only be called as a last resort when the user's request cannot be
fulfilled by any existing tool. It logs the request for product team review.

### SuiteDeploymentService

(synq.agent.recon.v1.SuiteDeploymentService)

SuiteDeploymentService is the platform plane of reconciliation.

SuiteConfigService is the developer/authoring sandbox (edit, version, run
ad-hoc with your own credentials — preview-only, no Entity, no Run, no
Issue). A deployment is what SYNQ actually runs on the workspace's behalf:
a frozen snapshot of a suite config, mapped to workspace-level SYNQ
integrations, optionally scheduled or triggerable by API.

Identity: every deployment has a stable deployment\_id (UUIDv7) assigned on
first promote. It survives re-promotes, schedule/mapping changes, and
pause/resume. Downstream AssetCommand / RunCommand publication keys off
deployment\_id so Entity identity does not fragment on promote churn.

#### PromoteSuite

PromoteSuite ([PromoteSuiteRequest](#promotesuiterequest)) [PromoteSuiteResponse](#promotesuiteresponse)

Promote a suite config into production. Freezes a snapshot of the config
and stores the connection → integration mapping. Creates a new deployment
on first call; re-promotes the same suite\_id (reusing its deployment\_id)
on subsequent calls.

#### UnpromoteSuite

UnpromoteSuite ([UnpromoteSuiteRequest](#unpromotesuiterequest)) [UnpromoteSuiteResponse](#unpromotesuiteresponse)

Unpromote a deployment. Marks it inactive; scheduler and API triggers
stop. Deployment history is preserved; re-promoting the same suite\_id
reuses the original deployment\_id.

#### UpdateDeploymentSchedule

UpdateDeploymentSchedule ([UpdateDeploymentScheduleRequest](#updatedeploymentschedulerequest)) [UpdateDeploymentScheduleResponse](#updatedeploymentscheduleresponse)

Change schedule and/or triggerable\_by\_api on an existing deployment
without re-promoting the config snapshot or touching mappings.

#### UpdateDeploymentMappings

UpdateDeploymentMappings ([UpdateDeploymentMappingsRequest](#updatedeploymentmappingsrequest)) [UpdateDeploymentMappingsResponse](#updatedeploymentmappingsresponse)

Rewire connection → integration mappings on an existing deployment
without re-promoting the config snapshot.

#### UpdateDeploymentAnnotations

UpdateDeploymentAnnotations ([UpdateDeploymentAnnotationsRequest](#updatedeploymentannotationsrequest)) [UpdateDeploymentAnnotationsResponse](#updatedeploymentannotationsresponse)

Replace the deployment-level annotation overlay on an existing
deployment. Annotations are merged with suite-level and case-level
annotations from the frozen suite snapshot at promote/update time, then
surfaced on PromotedReconSuiteMetadata / PromotedReconCaseMetadata for
every asset under the deployment.

#### UpdateDeploymentCategories

UpdateDeploymentCategories ([UpdateDeploymentCategoriesRequest](#updatedeploymentcategoriesrequest)) [UpdateDeploymentCategoriesResponse](#updatedeploymentcategoriesresponse)

Change the categories declared for a deployment's reconciliation checks
without re-promoting the suite snapshot. Each field is patched independently:
omitting one leaves it as it was, sending an empty string clears it, and
sending a value sets or replaces it — so changing the governance category can
never disturb the technical one.

The new categories reach the published checks immediately; a re-promote is not
needed for them to take effect.

#### UpdateDeploymentCaseImpacts

UpdateDeploymentCaseImpacts ([UpdateDeploymentCaseImpactsRequest](#updatedeploymentcaseimpactsrequest)) [UpdateDeploymentCaseImpactsResponse](#updatedeploymentcaseimpactsresponse)

Patch the per-case ReconciliationFailureImpact map on an existing deployment
without re-promoting the suite snapshot. Useful for "apply to all"
FE actions and one-off toggles between RAISE\_ISSUE\_ON\_TABLES and
SHOW\_ON\_TABLES. Re-renders PromotedReconCaseMetadata so the
error\_tables / shown\_tables split reflects the new policy
immediately.

Merge semantics: keys present in the request overwrite the stored
value for that case. Keys absent from the request are left
untouched (no implicit reset). Sending RECONCILIATION\_FAILURE\_IMPACT\_UNSPECIFIED
clears the override for that case (falls back to the default
RAISE\_ISSUE\_ON\_TABLES). Unknown case names are rejected with
INVALID\_ARGUMENT so the FE catches typos before the deployment is
mutated.

#### PauseDeployment

PauseDeployment ([PauseDeploymentRequest](#pausedeploymentrequest)) [PauseDeploymentResponse](#pausedeploymentresponse)

Pause a deployment. Scheduled and API-triggered runs are suppressed until
`until` is reached, or indefinitely when `until` is absent.

#### ResumeDeployment

ResumeDeployment ([ResumeDeploymentRequest](#resumedeploymentrequest)) [ResumeDeploymentResponse](#resumedeploymentresponse)

Resume a paused deployment.

#### GetSuiteDeployment

GetSuiteDeployment ([GetSuiteDeploymentRequest](#getsuitedeploymentrequest)) [GetSuiteDeploymentResponse](#getsuitedeploymentresponse)

Fetch a deployment by suite\_id or deployment\_id.

#### ListSuiteDeployments

ListSuiteDeployments ([ListSuiteDeploymentsRequest](#listsuitedeploymentsrequest)) [ListSuiteDeploymentsResponse](#listsuitedeploymentsresponse)

List deployments for the caller's workspace. Filters support answering
"what is SYNQ running on behalf of this workspace?" and "which
deployments use this SYNQ integration?".

#### ListSuiteDeploymentHistory

ListSuiteDeploymentHistory ([ListSuiteDeploymentHistoryRequest](#listsuitedeploymenthistoryrequest)) [ListSuiteDeploymentHistoryResponse](#listsuitedeploymenthistoryresponse)

List the append-only history of a deployment (every promote,
re-promote, schedule/mapping change, pause/resume, unpromote).

#### TriggerDeployment

TriggerDeployment ([TriggerDeploymentRequest](#triggerdeploymentrequest)) [TriggerDeploymentResponse](#triggerdeploymentresponse)

Trigger an on-demand execution of a promoted deployment. Enqueues a run
using the frozen suite snapshot and connection mappings stored on the
deployment row — execution uses platform integration credentials, not the
caller's. Returns the freshly-allocated `run_id` so callers can poll
RunStateService for status.

Preconditions:

* Deployment must exist and be `active`.
* Deployment must have `triggerable_by_api = true` (FAILED\_PRECONDITION
  otherwise).
* Deployment must not be paused (FAILED\_PRECONDITION when
  `paused_until` is set and in the future).

### AuditLogService

(synq.agent.recon.v1.AuditLogService)

AuditLogService provides methods to ingest and query reconciliation audit logs.

#### IngestAuditLog

IngestAuditLog ([IngestAuditLogRequest](#ingestauditlogrequest)) [IngestAuditLogResponse](#ingestauditlogresponse)

IngestAuditLog stores a reconciliation run audit log.

Reporting a locally executed run is part of running one, so the scope that
authorises editing and running suites also authorises reporting their
results — a pipeline needs one credential, not two.

#### ListAuditLogs

ListAuditLogs ([ListAuditLogsRequest](#listauditlogsrequest)) [ListAuditLogsResponse](#listauditlogsresponse)

ListAuditLogs returns audit logs ordered from newest to oldest, optionally filtered by suite and time range.

#### GetAuditLog

GetAuditLog ([GetAuditLogRequest](#getauditlogrequest)) [GetAuditLogResponse](#getauditlogresponse)

GetAuditLog returns a single audit log by invocation ID.

### RunStateService

(synq.agent.recon.v1.RunStateService)

RunStateService exposes lifecycle status of reconciliation runs.
Polling-based read API — clients fetch the current state for one or more
suites and display progress. No notifications are emitted; clients re-poll
to observe transitions.

#### BatchReconciliationRunState

BatchReconciliationRunState ([BatchReconciliationRunStateRequest](#batchreconciliationrunstaterequest)) [BatchReconciliationRunStateResponse](#batchreconciliationrunstateresponse)

BatchReconciliationRunState returns the latest concluded run and any ongoing
(SCHEDULED or IN\_PROGRESS) run for each suite\_id. Returned map is keyed by suite\_id.
Suites with no recorded runs are omitted from the response map.

#### ListReconciliationRunState

ListReconciliationRunState ([ListReconciliationRunStateRequest](#listreconciliationrunstaterequest)) [ListReconciliationRunStateResponse](#listreconciliationrunstateresponse)

ListReconciliationRunState returns runs filtered by status and/or suite\_id.
Sorted newest-first by scheduled\_at.

#### CancelReconciliationRun

CancelReconciliationRun ([CancelReconciliationRunRequest](#cancelreconciliationrunrequest)) [CancelReconciliationRunResponse](#cancelreconciliationrunresponse)

CancelReconciliationRun marks a SCHEDULED or IN\_PROGRESS run as
CANCELLED so the suite is no longer "occupied" by a stuck occurrence
— used to recover from local-dev / executor outages where a run was
queued but never executed. Already-terminal runs are returned
unchanged. Idempotent: calling on an already-cancelled run is a
no-op.

Note: this only updates the run-state row. The corresponding
execution-job row is independent — when an executor eventually
wakes up to that job it will see the run is CANCELLED and skip.

### YamlService

(synq.agent.recon.v1.YamlService)

YamlService provides stateless conversion between YAML config format and proto.
This is useful for UI editors that need to display/edit suite configs as YAML.

#### ParseYaml

ParseYaml ([ParseYamlRequest](#parseyamlrequest)) [ParseYamlResponse](#parseyamlresponse)

ParseYaml parses a YAML config string into a ReconciliationSuite proto.
Only the suite configuration fields are extracted (connections are ignored).

#### RenderYaml

RenderYaml ([RenderYamlRequest](#renderyamlrequest)) [RenderYamlResponse](#renderyamlresponse)

RenderYaml renders a ReconciliationSuite proto as a YAML config string.

### SuiteConfigService

(synq.agent.recon.v1.SuiteConfigService)

SuiteConfigService manages reconciliation suite configurations.
Managed suites are long-lived, optionally scheduled configs identified by suite\_name.
Ad-hoc suites are one-off configs that get a generated UUID as suite\_id.

#### UpsertSuiteConfig

UpsertSuiteConfig ([UpsertSuiteConfigRequest](#upsertsuiteconfigrequest)) [UpsertSuiteConfigResponse](#upsertsuiteconfigresponse)

Upsert a managed suite config. Creates if new, updates with new version if exists.
The suite\_id equals the suite name (from ReconciliationSuite.name).
Validates the ReconciliationSuite proto. Does NOT validate connections exist.

#### SubmitAdhocSuite

SubmitAdhocSuite ([SubmitAdhocSuiteRequest](#submitadhocsuiterequest)) [SubmitAdhocSuiteResponse](#submitadhocsuiteresponse)

Submit an ad-hoc suite for one-off execution.
Provide either an inline suite or a suite\_id referencing an existing managed suite.
Optionally apply environment overrides before execution.
The client-provided invocation\_id ensures idempotency.

#### GetSuiteConfig

GetSuiteConfig ([GetSuiteConfigRequest](#getsuiteconfigrequest)) [GetSuiteConfigResponse](#getsuiteconfigresponse)

Get the latest version of a suite config by suite\_id.
Works for both managed (suite\_id = suite\_name) and ad-hoc (suite\_id = UUID) configs.

#### ListSuiteConfigs

ListSuiteConfigs ([ListSuiteConfigsRequest](#listsuiteconfigsrequest)) [ListSuiteConfigsResponse](#listsuiteconfigsresponse)

List latest suite configs with filtering and pagination.
By default returns only managed suites. Set include\_adhoc to also include ad-hoc configs.

#### DeleteSuiteConfig

DeleteSuiteConfig ([DeleteSuiteConfigRequest](#deletesuiteconfigrequest)) [DeleteSuiteConfigResponse](#deletesuiteconfigresponse)

Delete a managed suite config (soft delete — inserts a deleted version).

#### ListSuiteConfigVersions

ListSuiteConfigVersions ([ListSuiteConfigVersionsRequest](#listsuiteconfigversionsrequest)) [ListSuiteConfigVersionsResponse](#listsuiteconfigversionsresponse)

Get version history for a suite config.

#### GetSuiteConfigVersion

GetSuiteConfigVersion ([GetSuiteConfigVersionRequest](#getsuiteconfigversionrequest)) [GetSuiteConfigVersionResponse](#getsuiteconfigversionresponse)

Get a specific historical version of a suite config.

### ConnectionsService

(synq.agent.dwh.v1.ConnectionsService)

ConnectionsService provides methods for managing data warehouse connections.
These connections represent data warehouse integrations configured in Coalesce Quality that can be used by:

* DWH Agent: For metadata extraction and data quality monitoring
* Coalesce Quality Scout: On-premise AI agent for data exploration and analysis
  Both agents share the same or very similar configuration file format.

#### ListConnections

ListConnections ([ListConnectionsRequest](#listconnectionsrequest)) [ListConnectionsResponse](#listconnectionsresponse)

ListConnections retrieves data warehouse connections for a workspace.
Converts Coalesce Quality integration configurations to a standardized connection format.
Requires workspace context in the request metadata.

#### GenerateConnectionsYaml

GenerateConnectionsYaml ([GenerateConnectionsYamlRequest](#generateconnectionsyamlrequest)) [GenerateConnectionsYamlResponse](#generateconnectionsyamlresponse)

GenerateConnectionsYaml converts data warehouse connections to YAML configuration format.
The generated YAML can be used directly as a config file for DWH Agent or Coalesce Quality Scout.
Secret fields are replaced with environment variable placeholders (e.g., `${CONNECTION_ID_PASSWORD}`).
Documentation: [https://docs.synq.io/dw-integrations/agent#config-file-schema](https://docs.synq.io/dw-integrations/agent#config-file-schema)

### DwhAgentService

(synq.agent.dwh.v1.DwhAgentService)

#### Connect

Connect ([ConnectRequest](#connectrequest)) [ConnectResponse](#connectresponse)

buf:lint:ignore RPC\_NO\_CLIENT\_STREAMING

### CloudwatchService

(synq.ingest.cloudwatch.v1.CloudwatchService)

#### IngestCloudwatchLogsData

IngestCloudwatchLogsData ([IngestCloudwatchLogsDataRequest](#ingestcloudwatchlogsdatarequest)) [IngestCloudwatchLogsDataResponse](#ingestcloudwatchlogsdataresponse)

### AirflowLogsService

(synq.ingest.airflow\.v1.AirflowLogsService)

#### IngestLog

IngestLog ([IngestLogRequest](#ingestlogrequest)) [IngestLogResponse](#ingestlogresponse)

#### IngestDatahubAspects

IngestDatahubAspects ([IngestDatahubAspectsRequest](#ingestdatahubaspectsrequest)) [IngestDatahubAspectsResponse](#ingestdatahubaspectsresponse)

### OpenlineageService

(synq.ingest.openlineage.v1.OpenlineageService)

#### Ingest

Ingest ([IngestRequest](#ingestrequest)) [IngestResponse](#ingestresponse)

### DbtService

(synq.ingest.dbt.v1.DbtService)

#### IngestInvocation

IngestInvocation ([IngestInvocationRequest](#ingestinvocationrequest)) [IngestInvocationResponse](#ingestinvocationresponse)

### SqlMeshService

(synq.ingest.sqlmesh.v1.SqlMeshService)

#### IngestMetadata

IngestMetadata ([IngestMetadataRequest](#ingestmetadatarequest)) [IngestMetadataResponse](#ingestmetadataresponse)

#### IngestExecution

IngestExecution ([IngestExecutionRequest](#ingestexecutionrequest)) [IngestExecutionResponse](#ingestexecutionresponse)

### DwhService

(synq.ingest.dwh.v1.DwhService)

#### IngestObjectInformation

IngestObjectInformation ([IngestObjectInformationRequest](#ingestobjectinformationrequest)) [IngestObjectInformationResponse](#ingestobjectinformationresponse)

#### IngestSqlDefinitions

IngestSqlDefinitions ([IngestSqlDefinitionsRequest](#ingestsqldefinitionsrequest)) [IngestSqlDefinitionsResponse](#ingestsqldefinitionsresponse)

#### IngestSchemas

IngestSchemas ([IngestSchemasRequest](#ingestschemasrequest)) [IngestSchemasResponse](#ingestschemasresponse)

#### IngestObjectMetrics

IngestObjectMetrics ([IngestObjectMetricsRequest](#ingestobjectmetricsrequest)) [IngestObjectMetricsResponse](#ingestobjectmetricsresponse)

#### IngestTaskResults

IngestTaskResults ([IngestTaskResultsRequest](#ingesttaskresultsrequest)) [IngestTaskResultsResponse](#ingesttaskresultsresponse)

#### IngestQueryLogs

IngestQueryLogs ([IngestQueryLogsRequest](#ingestquerylogsrequest)) [IngestQueryLogsResponse](#ingestquerylogsresponse)

#### IngestTableConstraints

IngestTableConstraints ([IngestTableConstraintsRequest](#ingesttableconstraintsrequest)) [IngestTableConstraintsResponse](#ingesttableconstraintsresponse)

#### IngestLineage

IngestLineage ([IngestLineageRequest](#ingestlineagerequest)) [IngestLineageResponse](#ingestlineageresponse)

IngestLineage pushes data-flow lineage between warehouse objects (and,
optionally, between their columns) into the platform. Send the lineage you
extract from the warehouse — for example from Snowflake's GET\_LINEAGE — as a
batch of directed edges. Use `replace_mode` to choose between an
incremental update (MERGE) and an authoritative refresh of a region of the
warehouse (REPLACE\_SCOPE); REPLACE\_SCOPE is what lets the platform expire
edges that no longer exist. Safe to retry: re-sending the same batch
converges to the same state.

### OwnersService

(synq.owners.v1.OwnersService)

OwnersService manages owners and their ownerships — the "alert routing as
code" surface. An owner is a named responsible party with notification
channels (contacts); an ownership assigns a set of assets to an owner and
configures the alerts routed to it. Owner is the resource, ownership its
sub-resource: an ownership is meaningless without its owner, and deleting an
owner deletes its ownerships.

Ids are opaque UUIDs supplied by the caller, which makes writes idempotent (a
retried create converges instead of duplicating). Mutable fields are optional
on the Upsert calls: a set field is written, an omitted field is left
unchanged. Pass the `etag` you last read to guard against overwriting a
concurrent edit.

Related: `synq.dataproducts.v2.DataproductsService` (an ownership can own a
whole data product), `synq.alerts.v1.AlertsService` (how the configured alerts
are reported), and `synq.users.v1.UsersService` (resolve the users behind
`UserContact` and Slack/Teams mentions).

#### UpsertOwner

UpsertOwner ([UpsertOwnerRequest](#upsertownerrequest)) [UpsertOwnerResponse](#upsertownerresponse)

Create or update an owner. The id is supplied by the caller (a UUID);
repeating the same request converges to the same owner. Mutable fields are
optional: a set field is written, an omitted field is left unchanged. Pass
`etag` to guard against overwriting a concurrent edit.

#### BatchGetOwners

BatchGetOwners ([BatchGetOwnersRequest](#batchgetownersrequest)) [BatchGetOwnersResponse](#batchgetownersresponse)

Fetch multiple owners by id. Ids that do not exist (or, unless
`include_deleted` is set, are deleted) are omitted from the response rather
than causing an error.

#### ListOwners

ListOwners ([ListOwnersRequest](#listownersrequest)) [ListOwnersResponse](#listownersresponse)

List the owners in the workspace, paginated.

#### DeleteOwner

DeleteOwner ([DeleteOwnerRequest](#deleteownerrequest)) [DeleteOwnerResponse](#deleteownerresponse)

Delete an owner and all of its ownerships. Idempotent — deleting an
already-deleted or unknown owner succeeds. Soft-deletes by default; set
`purge` to hard-delete and release the id. Pass `etag` to guard against
deleting a concurrently-edited owner.

#### UpsertOwnership

UpsertOwnership ([UpsertOwnershipRequest](#upsertownershiprequest)) [UpsertOwnershipResponse](#upsertownershipresponse)

Create or update an ownership under an owner. The ownership id is supplied
by the caller (a UUID). Assigning a data product that is already owned by a
different ownership moves it (the previous ownership of that product is
removed), matching the app.

#### ListOwnerships

ListOwnerships ([ListOwnershipsRequest](#listownershipsrequest)) [ListOwnershipsResponse](#listownershipsresponse)

List the ownerships of an owner, paginated.

#### BatchGetOwnerships

BatchGetOwnerships ([BatchGetOwnershipsRequest](#batchgetownershipsrequest)) [BatchGetOwnershipsResponse](#batchgetownershipsresponse)

Fetch multiple ownerships by id (across owners). Ids that do not exist (or,
unless `include_deleted` is set, are deleted) are omitted.

#### DeleteOwnership

DeleteOwnership ([DeleteOwnershipRequest](#deleteownershiprequest)) [DeleteOwnershipResponse](#deleteownershipresponse)

Delete an ownership by id. Idempotent — deleting an already-deleted or
unknown ownership succeeds. Pass `etag` to guard against deleting a
concurrently-edited ownership.

### DomainsService

(synq.domains.v2.DomainsService)

DomainsService manages data domains — named areas of ownership that group the
assets, data products and sub-domains belonging to one part of the business.

Ids are opaque UUIDs supplied by the caller, which makes writes idempotent
(a retried create converges instead of duplicating). Mutable fields are
optional on Upsert: a field that is set is written, a field that is omitted is
left unchanged. Pass the `etag` you last read to guard against overwriting a
concurrent edit.

A domain may contain other domains and data products, so membership resolution
is recursive. Every write that adds such a reference — including a change of
`parent_id` — is rejected if it would close a loop, so a definition can always
be resolved in finite time.

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Create or update a domain. The id is supplied by the caller (a UUID);
repeating the same request converges to the same domain. Mutable fields are
optional: a set field is written, an omitted field is left unchanged. Pass
`etag` to guard against overwriting a concurrent edit.

#### BatchGet

BatchGet ([BatchGetRequest](#batchgetrequest)) [BatchGetResponse](#batchgetresponse)

Fetch multiple domains by id. Ids that do not exist (or, unless
`include_deleted` is set, are deleted) are omitted from the response rather
than causing an error.

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

List the domains in the workspace, paginated. Narrow to one level of the
hierarchy with `parent_id`.

#### FetchDomainWithSubDomains

FetchDomainWithSubDomains ([FetchDomainWithSubDomainsRequest](#fetchdomainwithsubdomainsrequest)) [FetchDomainWithSubDomainsResponse](#fetchdomainwithsubdomainsresponse)

Fetch a domain together with its direct sub-domains, keyed by id.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete a domain. Idempotent — deleting an already-deleted or unknown domain
succeeds. Soft-deletes by default; set `purge` to hard-delete and release the
id, which is refused while the domain still has sub-domains. Pass `etag` to
guard against deleting a concurrently-edited domain.

#### SetDefinition

SetDefinition ([SetDefinitionRequest](#setdefinitionrequest)) [SetDefinitionResponse](#setdefinitionresponse)

Replace the entire membership definition of a domain.

#### UpsertDefinitionPart

UpsertDefinitionPart ([UpsertDefinitionPartRequest](#upsertdefinitionpartrequest)) [UpsertDefinitionPartResponse](#upsertdefinitionpartresponse)

Add or replace a single definition part (matched by its part id).

#### RemoveDefinitionPart

RemoveDefinitionPart ([RemoveDefinitionPartRequest](#removedefinitionpartrequest)) [RemoveDefinitionPartResponse](#removedefinitionpartresponse)

Remove a single definition part by its part id. Idempotent.

#### ListMembers

ListMembers ([ListMembersRequest](#listmembersrequest)) [ListMembersResponse](#listmembersresponse)

List the assets that currently belong to a domain, resolved from its
definition — including everything contributed by the data products and
domains it references, and by its own sub-domains — and returned as opaque
entity ids. Paginated.

#### GetUsage

GetUsage ([GetUsageRequest](#getusagerequest)) [GetUsageResponse](#getusageresponse)

Report how many domains the workspace uses, split into top-level and sub-domains.

### DomainMembersService

(synq.domains.members.v1.DomainMembersService)

DomainMembersService can be used to manage domain memberships.

#### AddDomainMembers

AddDomainMembers ([AddDomainMembersRequest](#adddomainmembersrequest)) [AddDomainMembersResponse](#adddomainmembersresponse)

Add domain members.

#### RemoveDomainMembers

RemoveDomainMembers ([RemoveDomainMembersRequest](#removedomainmembersrequest)) [RemoveDomainMembersResponse](#removedomainmembersresponse)

Remove domain members.

#### ListDomainMembers

ListDomainMembers ([ListDomainMembersRequest](#listdomainmembersrequest)) [ListDomainMembersResponse](#listdomainmembersresponse)

List domain members.

#### ListUserDomains

ListUserDomains ([ListUserDomainsRequest](#listuserdomainsrequest)) [ListUserDomainsResponse](#listuserdomainsresponse)

List domains for the given user.

#### SetDefaultUserDomain

SetDefaultUserDomain ([SetDefaultUserDomainRequest](#setdefaultuserdomainrequest)) [SetDefaultUserDomainResponse](#setdefaultuserdomainresponse)

Set default domain for user.

### DomainsService

(synq.domains.v1.DomainsService)

DomainsService can be used to manage domains.

#### Upsert

Upsert ([UpsertRequest](#upsertrequest)) [UpsertResponse](#upsertresponse)

Create or update a domain.

#### BatchGet

BatchGet ([BatchGetRequest](#batchgetrequest)) [BatchGetResponse](#batchgetresponse)

Get multiple domains by their identifiers.

#### FetchDomainWithSubDomains

FetchDomainWithSubDomains ([FetchDomainWithSubDomainsRequest](#fetchdomainwithsubdomainsrequest)) [FetchDomainWithSubDomainsResponse](#fetchdomainwithsubdomainsresponse)

Get a domain with its sub-domains

#### List

List ([ListRequest](#listrequest)) [ListResponse](#listresponse)

List all the domains in the current workspace.

#### Delete

Delete ([DeleteRequest](#deleterequest)) [DeleteResponse](#deleteresponse)

Delete a domain by its identifier.

#### SetDefinition

SetDefinition ([SetDefinitionRequest](#setdefinitionrequest)) [SetDefinitionResponse](#setdefinitionresponse)

Set the definition for an existing domain.

#### UpsertDefinitionPart

UpsertDefinitionPart ([UpsertDefinitionPartRequest](#upsertdefinitionpartrequest)) [UpsertDefinitionPartResponse](#upsertdefinitionpartresponse)

Upsert definition part to the definition of an existing domain.

#### RemoveDefinitionPart

RemoveDefinitionPart ([RemoveDefinitionPartRequest](#removedefinitionpartrequest)) [RemoveDefinitionPartResponse](#removedefinitionpartresponse)

Remove definition part from the definition of an existing domain.

#### GetUsage

GetUsage ([GetUsageRequest](#getusagerequest)) [GetUsageResponse](#getusageresponse)

Report how many domains the workspace uses, split into top-level and sub-domains.

### PlatformsService

(synq.platforms.v1.PlatformsService)

PlatformsService is a service for managing Platforms and Integrations.

#### SetPlatformAuthentication

SetPlatformAuthentication ([SetPlatformAuthenticationRequest](#setplatformauthenticationrequest)) [SetPlatformAuthenticationResponse](#setplatformauthenticationresponse)

### IncidentsService

(synq.incidents.v1.IncidentsService)

IncidentsService is a service for managing Incidents.

#### CreateIncident

CreateIncident ([CreateIncidentRequest](#createincidentrequest)) [CreateIncidentResponse](#createincidentresponse)

#### RenameIncident

RenameIncident ([RenameIncidentRequest](#renameincidentrequest)) [RenameIncidentResponse](#renameincidentresponse)

#### UpdateIncidentState

UpdateIncidentState ([UpdateIncidentStateRequest](#updateincidentstaterequest)) [UpdateIncidentStateResponse](#updateincidentstateresponse)

#### CancelIncident

CancelIncident ([CancelIncidentRequest](#cancelincidentrequest)) [CancelIncidentResponse](#cancelincidentresponse)

Cancel an incident

#### CloseIncident

CloseIncident ([CloseIncidentRequest](#closeincidentrequest)) [CloseIncidentResponse](#closeincidentresponse)

Close an incident

#### MergeIncidents

MergeIncidents ([MergeIncidentsRequest](#mergeincidentsrequest)) [MergeIncidentsResponse](#mergeincidentsresponse)

#### SplitIncident

SplitIncident ([SplitIncidentRequest](#splitincidentrequest)) [SplitIncidentResponse](#splitincidentresponse)

#### AddIssuesToIncident

AddIssuesToIncident ([AddIssuesToIncidentRequest](#addissuestoincidentrequest)) [AddIssuesToIncidentResponse](#addissuestoincidentresponse)

#### RemoveIssuesFromIncident

RemoveIssuesFromIncident ([RemoveIssuesFromIncidentRequest](#removeissuesfromincidentrequest)) [RemoveIssuesFromIncidentResponse](#removeissuesfromincidentresponse)

#### ListIncidents

ListIncidents ([ListIncidentsRequest](#listincidentsrequest)) [ListIncidentsResponse](#listincidentsresponse)

#### BatchGetIncidents

BatchGetIncidents ([BatchGetIncidentsRequest](#batchgetincidentsrequest)) [BatchGetIncidentsResponse](#batchgetincidentsresponse)

#### AssignIncidentOwner

AssignIncidentOwner ([AssignIncidentOwnerRequest](#assignincidentownerrequest)) [AssignIncidentOwnerResponse](#assignincidentownerresponse)

#### PostComment

PostComment ([PostCommentRequest](#postcommentrequest)) [PostCommentResponse](#postcommentresponse)

Post a comment on an incident.

## Messages

### Delivery

(synq.deliveries.v1.Delivery)

Delivery is one event as it was addressed to one integration: what it was
about, whether it went, and what happened when it did.

One event reaches every integration subscribed to it, so an event that fans
out to three integrations produces three deliveries. They share `event_id`
and each has its own `id`.

| Field                   | Type                                               | Description                                                                                                                                                                                                                                                                                                                                                                |
| ----------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                      | [ string](#string)                                 | Opaque identifier of this delivery, composed by the service. Pass it back to `BatchGetDeliveries`, `ListAttempts` and `Redeliver`; do not parse it or build one yourself, as its composition can change.                                                                                                                                                                   |
| event\_id               | [ string](#string)                                 | Identifier of the event this delivery carries, shared by every integration the same event reached. Filter `ListDeliveries` on it to answer "which of my integrations did this event reach, and what did each of them do with it". It is also the `event_id` in the webhook payload a receiver got, so a customer holding a received webhook can find its delivery from it. |
| integration\_id         | [ string](#string)                                 | The integration this delivery was addressed to.                                                                                                                                                                                                                                                                                                                            |
| event\_type             | [ string](#string)                                 | Name of the `synq.webhooks.v1.Event.EventType` the delivery carries — for example `EVENT_TYPE_ISSUE_CREATED`. Empty when the event has no representation for this kind of integration.                                                                                                                                                                                     |
| subject                 | [ DeliverySubject](#deliverysubject)               | What the event is about, so a delivery can be found from the issue or incident a question is asked about.                                                                                                                                                                                                                                                                  |
| created\_at             | [ Timestamp](#timestamp)                           | When the event happened. This is the event time, not the time it was sent — `last_attempt_at` is that. Deliveries are listed newest event first.                                                                                                                                                                                                                           |
| outcome                 | [ Outcome](#outcome)                               | What became of the delivery.                                                                                                                                                                                                                                                                                                                                               |
| skip\_reason            | [ SkipReason](#skipreason)                         | Why nothing was sent. Set exactly when `outcome` is `OUTCOME_SKIPPED` or `OUTCOME_NOT_ROUTED`.                                                                                                                                                                                                                                                                             |
| attempt\_count          | [ int32](#int32)                                   | How many attempts have been made so far, across every request this delivery produced. Zero for a delivery that sent nothing, and for one still queued.                                                                                                                                                                                                                     |
| last\_attempt\_at       | [ Timestamp](#timestamp)                           | When the most recent attempt started. Unset until the first attempt.                                                                                                                                                                                                                                                                                                       |
| next\_attempt\_at       | [ Timestamp](#timestamp)                           | When the next attempt is due. Set only while `outcome` is `OUTCOME_PENDING`; an attempt can still start slightly later than this under load.                                                                                                                                                                                                                               |
| duration                | [ Duration](#duration)                             | How long the attempts took in total. Useful as "how long did this take to land" rather than as a measure of one request.                                                                                                                                                                                                                                                   |
| status\_code            | [ int32](#int32)                                   | HTTP status of the most recent attempt. Zero when no response was received — either nothing has been sent yet, or the request failed before one arrived, in which case the attempt carries the transport error.                                                                                                                                                            |
| redelivery\_of          | [ string](#string)                                 | The delivery this one replays, set when it was produced by `Redeliver`. Empty for a first delivery.                                                                                                                                                                                                                                                                        |
| matched\_alert\_configs | [repeated MatchedAlertConfig](#matchedalertconfig) | Which alert configurations selected this integration for this event — the answer to "why did I get this". More than one when several configurations match the same event, because their alerts are merged into a single delivery per integration. Empty for deliveries not produced by alerting, such as a test delivery.                                                  |

Always populated by `BatchGetDeliveries`; populated by `ListDeliveries` only when the request sets `include_routing`. |
\| correlation\_key | [ string](#string) | The key the destination deduplicates on — a PagerDuty `dedup_key`, an Opsgenie `alias` — so an incident in your own tool can be traced back to the delivery that opened it. Empty for destinations that create no such object.

Populated on the same terms as `matched_alert_configs`. |

### DeliverySubject

(synq.deliveries.v1.DeliverySubject)

DeliverySubject is the object an event is about.

| Field | Type                         | Description                                                                                                                                        |
| ----- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| type  | [ SubjectType](#subjecttype) | Which kind of object `id` refers to.                                                                                                               |
| id    | [ string](#string)           | Identifier of the issue or incident, as the rest of the API uses it. For a test delivery this is the event id, since a test is about nothing else. |
| title | [ string](#string)           | Title at the time the delivery was decided, kept so a delivery stays readable after the issue is renamed or closed.                                |
| url   | [ string](#string)           | Link to the object in the app. Empty when the subject has no page.                                                                                 |

### MatchedAlertConfig

(synq.deliveries.v1.MatchedAlertConfig)

MatchedAlertConfig names one alert configuration that selected an integration
for an event.

| Field             | Type               | Description                                                                                                                                 |
| ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| alert\_config\_id | [ string](#string) | Identifier of the alert configuration.                                                                                                      |
| name              | [ string](#string) | Its name when the delivery was decided, so the delivery stays attributable after the configuration is renamed or deleted.                   |
| fqn               | [ string](#string) | Fully-qualified name, set only for configurations managed as code.                                                                          |
| ownership\_id     | [ string](#string) | The ownership the configuration belongs to. Empty for workspace-level configurations.                                                       |
| owner\_path       | [ string](#string) | The owner the integration was reached through. Empty when the configuration names the integration directly rather than routing to an owner. |

### Attempt

(synq.deliveries.v1.Attempt)

Attempt is one try at handing a delivery to its destination, recorded as it
happened: what was sent, what came back, and how long it took.

A delivery can produce more than one outgoing request — an integration that
creates an object and then annotates it makes two — and each request is
retried on its own. Attempts of the same request share `request_id` and count
up in `attempt`.

| Field                                                                                        | Type                         | Description                                                                                                                                                  |
| -------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| delivery\_id                                                                                 | [ string](#string)           | The delivery this attempt belongs to.                                                                                                                        |
| attempt                                                                                      | [ int32](#int32)             | Which try this was for `request_id`, starting at 1.                                                                                                          |
| request\_id                                                                                  | [ string](#string)           | Opaque identifier of the outgoing request. Group attempts by it to follow one request's retries; compare it to tell two requests of the same delivery apart. |
| attempted\_at                                                                                | [ Timestamp](#timestamp)     | When the attempt started.                                                                                                                                    |
| duration                                                                                     | [ Duration](#duration)       | How long it took, whether it succeeded or failed.                                                                                                            |
| error                                                                                        | [ string](#string)           | Why the attempt never produced a response — a connection failure, a TLS error, a timeout. Empty when a response was received, however it read.               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) transport.http | [ HttpAttempt](#httpattempt) | none                                                                                                                                                         |

### Header

(synq.deliveries.v1.Header)

Header is one HTTP header of an attempt.

A header whose value carries a credential is never returned, on either the
request or the response side. That covers headers you configured as secret,
credentials held for the destination, and the standard credential-bearing
names (`Authorization`, `Proxy-Authorization`, `Cookie`, `Set-Cookie`,
`X-Api-Key`, `X-Auth-Token`) whatever their contents — a destination echoing
its own authorization header back is withheld too.

Signature headers are returned in full: `X-Coalesce-Signature` is a digest of
the body and `X-Coalesce-Timestamp` is a timestamp, neither of which is the
signing secret, and the exact bytes are what you need to reproduce a
verification that failed.

| Field           | Type               | Description                                                                                                                                                                                           |
| --------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name            | [ string](#string) | Header name, as sent.                                                                                                                                                                                 |
| value           | [ string](#string) | Header value. Empty when `withheld` is set.                                                                                                                                                           |
| withheld        | [ bool](#bool)     | Whether the value was withheld. The header itself is still reported, so the record shows which headers were present.                                                                                  |
| fingerprint     | [ string](#string) | Short digest of a withheld value, stable for the same value. Enough to answer "is this the same token as the one that worked yesterday" by comparing two deliveries, without disclosing either value. |
| secret\_version | [ string](#string) | Which version of the stored secret the withheld value was read from, so a delivery can be attributed to a specific secret across a rotation. Empty for values that come from no stored secret.        |

### HttpAttempt

(synq.deliveries.v1.HttpAttempt)

HttpAttempt is one HTTP request and the response it got.

Credential-bearing headers are never returned, whichever side they appear on —
see `Header`.

| Field               | Type                       | Description                                                                                                                                                                                                                |
| ------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| method              | [ string](#string)         | Method used, upper-case.                                                                                                                                                                                                   |
| url                 | [ string](#string)         | Full URL the request was sent to, query string included.                                                                                                                                                                   |
| request\_headers    | [repeated Header](#header) | Headers as sent.                                                                                                                                                                                                           |
| request\_body       | [ string](#string)         | Body as sent. A value the destination requires to be secret — a routing key, for instance — is replaced by a marker naming the field it stood in, so the record shows that a value was sent rather than implying none was. |
| request\_bytes      | [ int32](#int32)           | Size of the body actually sent, in bytes, before any such substitution.                                                                                                                                                    |
| status\_code        | [ int32](#int32)           | HTTP status returned. Zero when no response arrived; `error` on the attempt then says why.                                                                                                                                 |
| response\_headers   | [repeated Header](#header) | Headers the destination returned.                                                                                                                                                                                          |
| response\_body      | [ string](#string)         | Body the destination returned, cut short past a fixed size — see `response_truncated`.                                                                                                                                     |
| response\_bytes     | [ int32](#int32)           | Size of the response body as the destination sent it, before truncation.                                                                                                                                                   |
| response\_truncated | [ bool](#bool)             | Whether `response_body` was cut short. When set, `response_bytes` is the full size and `response_body` holds the leading bytes.                                                                                            |

### BatchGetDeliveriesRequest

(synq.deliveries.v1.BatchGetDeliveriesRequest)

| Field | Type                       | Description                                                                                                |
| ----- | -------------------------- | ---------------------------------------------------------------------------------------------------------- |
| ids   | [repeated string](#string) | Delivery ids to fetch (1–200, unique), as returned by `ListDeliveries`, `Redeliver` or `SendTestDelivery`. |

### BatchGetDeliveriesResponse

(synq.deliveries.v1.BatchGetDeliveriesResponse)

| Field      | Type                                    | Description                                                          |
| ---------- | --------------------------------------- | -------------------------------------------------------------------- |
| deliveries | [map DeliveriesEntry](#deliveriesentry) | The deliveries found, keyed by id. Ids that do not exist are absent. |

### BatchGetDeliveriesResponse.DeliveriesEntry

(synq.deliveries.v1.BatchGetDeliveriesResponse.DeliveriesEntry)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| key   | [ string](#string)     | none        |
| value | [ Delivery](#delivery) | none        |

### GetDeliveryRequest

(synq.deliveries.v1.GetDeliveryRequest)

| Field | Type               | Description  |
| ----- | ------------------ | ------------ |
| id    | [ string](#string) | Delivery id. |

### GetDeliveryResponse

(synq.deliveries.v1.GetDeliveryResponse)

| Field                                                                                             | Type                           | Description                                           |
| ------------------------------------------------------------------------------------------------- | ------------------------------ | ----------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_delivery.delivery | [optional Delivery](#delivery) | The delivery. Absent when there is none with that id. |

### ListAttemptsRequest

(synq.deliveries.v1.ListAttemptsRequest)

| Field        | Type               | Description                      |
| ------------ | ------------------ | -------------------------------- |
| delivery\_id | [ string](#string) | Delivery whose attempts to list. |

### ListAttemptsResponse

(synq.deliveries.v1.ListAttemptsResponse)

| Field    | Type                         | Description                                                                                                               |
| -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| attempts | [repeated Attempt](#attempt) | Every attempt made, oldest first. Empty for a delivery that sent nothing, and for one still waiting on its first attempt. |

### ListDeliveriesRequest

(synq.deliveries.v1.ListDeliveriesRequest)

| Field                                                                                                           | Type                             | Description                                                                                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id | [optional string](#string)       | Restrict to one integration. Omit for the whole workspace's feed.                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_event\_id.event\_id             | [optional string](#string)       | Restrict to one event — every integration it reached, and what each did with it. This is the `event_id` from a received webhook payload.                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_subject\_id.subject\_id         | [optional string](#string)       | Restrict to the issue or incident the delivery was about. Takes the same identifier the rest of the API uses for that object.                                                                          |
| event\_types                                                                                                    | [repeated string](#string)       | Restrict to these event types, by `synq.webhooks.v1.Event.EventType` name. Empty matches every type.                                                                                                   |
| outcomes                                                                                                        | [repeated Outcome](#outcome)     | Restrict to these outcomes. Empty matches every outcome.                                                                                                                                               |
| status\_codes                                                                                                   | [repeated int32](#int32)         | Restrict to deliveries whose most recent attempt returned one of these HTTP statuses. Empty matches every status.                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_since.since                     | [optional Timestamp](#timestamp) | Only deliveries for events at or after this time. Defaults to the start of the retention window.                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_until.until                     | [optional Timestamp](#timestamp) | Only deliveries for events strictly before this time. Defaults to now.                                                                                                                                 |
| pagination                                                                                                      | [ Pagination](#pagination)       | Pagination. Deliveries are returned newest event first; pass the `last_id` of the previous page as the cursor.                                                                                         |
| include\_routing                                                                                                | [ bool](#bool)                   | Also return `matched_alert_configs` and `correlation_key` on each delivery. Off by default: it costs a second read per delivery, and a feed rarely needs it. `BatchGetDeliveries` always returns them. |

### ListDeliveriesResponse

(synq.deliveries.v1.ListDeliveriesResponse)

| Field      | Type                           | Description                                  |
| ---------- | ------------------------------ | -------------------------------------------- |
| deliveries | [repeated Delivery](#delivery) | The matching deliveries, newest event first. |
| page\_info | [ PageInfo](#pageinfo)         | Cursor for the next page.                    |

### OutcomeCount

(synq.deliveries.v1.OutcomeCount)

| Field   | Type                 | Description |
| ------- | -------------------- | ----------- |
| outcome | [ Outcome](#outcome) | none        |
| count   | [ int32](#int32)     | none        |

### RedeliverRequest

(synq.deliveries.v1.RedeliverRequest)

| Field        | Type               | Description             |
| ------------ | ------------------ | ----------------------- |
| delivery\_id | [ string](#string) | Delivery to send again. |

### RedeliverResponse

(synq.deliveries.v1.RedeliverResponse)

| Field        | Type               | Description                                                                                        |
| ------------ | ------------------ | -------------------------------------------------------------------------------------------------- |
| delivery\_id | [ string](#string) | Id of the delivery created by the replay. Poll `BatchGetDeliveries` with it to follow the outcome. |

### SendTestDeliveryRequest

(synq.deliveries.v1.SendTestDeliveryRequest)

| Field                                                                                           | Type                       | Description                                                                                                        |
| ----------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| integration\_id                                                                                 | [ string](#string)         | Integration to send the test to.                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_message.message | [optional string](#string) | Message to carry in the test payload, so a test can be recognised on the receiving end. Defaults to a generic one. |

### SendTestDeliveryResponse

(synq.deliveries.v1.SendTestDeliveryResponse)

| Field        | Type               | Description                                                                          |
| ------------ | ------------------ | ------------------------------------------------------------------------------------ |
| delivery\_id | [ string](#string) | Id of the delivery created. Poll `BatchGetDeliveries` with it to follow the outcome. |

### SkipReasonCount

(synq.deliveries.v1.SkipReasonCount)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| skip\_reason | [ SkipReason](#skipreason) | none        |
| count        | [ int32](#int32)           | none        |

### StatusClassCount

(synq.deliveries.v1.StatusClassCount)

| Field         | Type                         | Description |
| ------------- | ---------------------------- | ----------- |
| status\_class | [ StatusClass](#statusclass) | none        |
| count         | [ int32](#int32)             | none        |

### SummariseDeliveriesRequest

(synq.deliveries.v1.SummariseDeliveriesRequest)

| Field                                                                                                           | Type                             | Description                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id | [optional string](#string)       | Restrict to one integration. Omit to summarise the whole workspace.                                                                    |
| since                                                                                                           | [ Timestamp](#timestamp)         | Start of the window, on event time. Required — a summary of everything kept is rarely the question, and always the most expensive one. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_until.until                     | [optional Timestamp](#timestamp) | End of the window, on event time. Defaults to now.                                                                                     |

### SummariseDeliveriesResponse

(synq.deliveries.v1.SummariseDeliveriesResponse)

| Field             | Type                                           | Description                                                                                                                               |
| ----------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| since             | [ Timestamp](#timestamp)                       | The window actually summarised, after defaults were applied.                                                                              |
| until             | [ Timestamp](#timestamp)                       | none                                                                                                                                      |
| total             | [ int32](#int32)                               | Deliveries in the window, whatever became of them.                                                                                        |
| by\_outcome       | [repeated OutcomeCount](#outcomecount)         | Counts per outcome. Outcomes with no deliveries are omitted.                                                                              |
| by\_status\_class | [repeated StatusClassCount](#statusclasscount) | Counts per HTTP status class of the most recent attempt. Deliveries that were never attempted are omitted rather than counted as a class. |
| by\_skip\_reason  | [repeated SkipReasonCount](#skipreasoncount)   | Counts per reason for sending nothing. Only over the deliveries counted as `OUTCOME_SKIPPED` or `OUTCOME_NOT_ROUTED`.                     |

### Grant

(synq.savedviews.v1.Grant)

A single access grant on a saved view.

| Field             | Type                     | Description                                                                                                                                                                                                  |
| ----------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| grantee\_identity | [ string](#string)       | Identity of the grantee. Currently a user email (`user@example.com`); the view becomes visible to that user once they exist in the workspace, so a view can be shared with someone before their first login. |
| role              | [ GrantRole](#grantrole) | What the grantee may do. Defaults to VIEW.                                                                                                                                                                   |

### GrantList

(synq.savedviews.v1.GrantList)

A wrapper giving the grant set explicit presence on write, so a partial
update can distinguish "replace the grants" (present, possibly empty) from
"leave grants unchanged" (absent).

| Field  | Type                     | Description |
| ------ | ------------------------ | ----------- |
| grants | [repeated Grant](#grant) | none        |

### SavedView

(synq.savedviews.v1.SavedView)

A saved view: a named, reusable selection over entities (or another context)
with display configuration, sharing and per-user pinning.

| Field        | Type                                             | Description                                                                                                                                     |
| ------------ | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| id           | [ string](#string)                               | Client-supplied UUID identifying the view.                                                                                                      |
| context      | [ SavedViewContext](#savedviewcontext)           | The surface this view applies to.                                                                                                               |
| title        | [ string](#string)                               | Human-readable title.                                                                                                                           |
| description  | [ string](#string)                               | Optional longer description.                                                                                                                    |
| selection    | [ SavedViewSelection](#savedviewselection)       | The selection captured by the view.                                                                                                             |
| config       | [ SavedViewConfig](#savedviewconfig)             | Display configuration.                                                                                                                          |
| visibility   | [ SavedViewVisibility](#savedviewvisibility)     | Sharing state.                                                                                                                                  |
| grants       | [repeated Grant](#grant)                         | Access grants (populated for GRANTED views).                                                                                                    |
| owner        | [ Actor](#actor)                                 | Who created the view. Output-only.                                                                                                              |
| updated\_by  | [ Actor](#actor)                                 | Who last edited the view. Output-only.                                                                                                          |
| relationship | [ SavedViewRelationship](#savedviewrelationship) | How this view relates to the calling user. Output-only.                                                                                         |
| permissions  | [ SavedViewPermissions](#savedviewpermissions)   | What the calling user may do with this view. Output-only.                                                                                       |
| pinned       | [ bool](#bool)                                   | Whether the calling user has pinned this view to their main screen. Output-only; change with SetPin.                                            |
| etag         | [ string](#string)                               | Entity tag for optimistic concurrency: pass back on Upsert/Delete to guard against overwriting a concurrent change. Form: `W/"<id>-<version>"`. |
| created\_at  | [ Timestamp](#timestamp)                         | When the view was created. Output-only.                                                                                                         |
| updated\_at  | [ Timestamp](#timestamp)                         | When the view was last updated. Output-only.                                                                                                    |

### SavedViewConfig

(synq.savedviews.v1.SavedViewConfig)

How a saved view is displayed once opened. This message is intentionally
permissive and forward-compatible: new presentation options are added as new
fields, never as a breaking change, so older clients keep working.

| Field        | Type                       | Description                                                                                                                                           |
| ------------ | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| layout       | [ Layout](#layout)         | How results are laid out (list, cards, table). Unspecified lets the client pick its default for the context.                                          |
| card\_fields | [repeated string](#string) | Which fields to surface on each result (e.g. "last\_run", "owner", "status", "platform"). Interpreted by the client; unknown field names are ignored. |

### SavedViewPermissions

(synq.savedviews.v1.SavedViewPermissions)

What the calling user is allowed to do with a saved view. Output-only:
computed per request from ownership, the caller's grant (if any) and their
workspace permissions. Viewing and pinning are always allowed for any view
the caller can see, so they are not represented here.

| Field               | Type           | Description                                                                 |
| ------------------- | -------------- | --------------------------------------------------------------------------- |
| can\_edit           | [ bool](#bool) | The caller can update the view's definition, title, description and config. |
| can\_delete         | [ bool](#bool) | The caller can delete the view.                                             |
| can\_manage\_grants | [ bool](#bool) | The caller can change the view's sharing/visibility and grants.             |

### SavedViewQuery

(synq.savedviews.v1.SavedViewQuery)

The query behind a saved view, expressed for the public API.

On write, provide the query in ONE of two forms:

* `public_query` — a structured query (the same shape used elsewhere for
  asset selection), convenient to build from a filter UI; or
* `resolver_ql` — the SYNQ resolver query language, a compact text form
  that additionally expresses severity/status and time-window filters
  (e.g. `with_severity(statuses=["error"], since="24h")`).
  When both are set, `resolver_ql` wins. The server compiles the query and
  stores it canonically; the raw text is not preserved verbatim.

On read, the server returns `rendered_resolver_ql` (the stored query rendered
back to canonical resolver query language) and, best-effort, `public_query`
(the structured representation; parts with no structured equivalent are marked
unsupported). `resolver_ql` is not echoed back — read `rendered_resolver_ql`.

| Field                  | Type               | Description                                                                                                                                                                                                                                                                                      |
| ---------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| resolver\_ql           | [ string](#string) | WRITE (option A). The query in resolver query language. Superset form — the only way to express severity/status and time-window filters.                                                                                                                                                         |
| rendered\_resolver\_ql | [ string](#string) | READ, output-only. The stored query rendered back to canonical resolver query language. Deterministically derived; does not preserve original hand-typed formatting or comments.                                                                                                                 |
| public\_query          | [ Query](#query)   | WRITE (option B) and READ. On write, the structured query to store (used when `resolver_ql` is empty). On read, a structured representation of the stored query — lossy: parts with no structured equivalent are represented as unsupported, so prefer `rendered_resolver_ql` for full fidelity. |

### SavedViewSelection

(synq.savedviews.v1.SavedViewSelection)

The selection that a saved view captures. Modelled as a oneof so future
contexts (e.g. an issues filter) can add their own selection shape without
reshaping the view.

| Field                                                                                                 | Type                               | Description                                                   |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) selection.entity\_query | [ SavedViewQuery](#savedviewquery) | Entity-backed selection (catalog/assets and checks contexts). |

### BatchGetRequest

(synq.savedviews.v1.BatchGetRequest)

| Field | Type                       | Description                   |
| ----- | -------------------------- | ----------------------------- |
| ids   | [repeated string](#string) | Ids to fetch (1–200, unique). |

### BatchGetResponse

(synq.savedviews.v1.BatchGetResponse)

| Field | Type                          | Description                                                                   |
| ----- | ----------------------------- | ----------------------------------------------------------------------------- |
| views | [map ViewsEntry](#viewsentry) | Views keyed by id. Ids the caller cannot see or that do not exist are absent. |

### BatchGetResponse.ViewsEntry

(synq.savedviews.v1.BatchGetResponse.ViewsEntry)

| Field | Type                     | Description |
| ----- | ------------------------ | ----------- |
| key   | [ string](#string)       | none        |
| value | [ SavedView](#savedview) | none        |

### DeleteRequest

(synq.savedviews.v1.DeleteRequest)

| Field                                                                                     | Type                       | Description                            |
| ----------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------- |
| id                                                                                        | [ string](#string)         | Id of the view to delete.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard. |

### DeleteResponse

(synq.savedviews.v1.DeleteResponse)

### ListRequest

(synq.savedviews.v1.ListRequest)

| Field                                                                                                     | Type                                                     | Description                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| scopes                                                                                                    | [repeated SavedViewRelationship](#savedviewrelationship) | Relationship buckets to include. Empty returns every view the caller can see. For example \[SAVED\_VIEW\_RELATIONSHIP\_MINE] returns only the caller's own views. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_context.context           | [optional SavedViewContext](#savedviewcontext)           | Restrict to a single surface. Omit to return views for all contexts.                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_only\_pinned.only\_pinned | [optional bool](#bool)                                   | Restrict to views the caller has pinned.                                                                                                                          |
| pagination                                                                                                | [ Pagination](#pagination)                               | Pagination.                                                                                                                                                       |

### ListResponse

(synq.savedviews.v1.ListResponse)

| Field      | Type                             | Description                          |
| ---------- | -------------------------------- | ------------------------------------ |
| views      | [repeated SavedView](#savedview) | The matching views.                  |
| page\_info | [ PageInfo](#pageinfo)           | Pagination cursor for the next page. |

### SetPinRequest

(synq.savedviews.v1.SetPinRequest)

| Field  | Type               | Description                                       |
| ------ | ------------------ | ------------------------------------------------- |
| id     | [ string](#string) | Id of the view to pin/unpin for the calling user. |
| pinned | [ bool](#bool)     | Desired pin state: true to pin, false to unpin.   |

### SetPinResponse

(synq.savedviews.v1.SetPinResponse)

### UpsertRequest

(synq.savedviews.v1.UpsertRequest)

| Field                                                                                                   | Type                                                 | Description                                                                                                                                                                                          |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                                   | Client-supplied UUID identifying the view. The same id updates the same view; a new id creates a new view.                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title             | [optional string](#string)                           | Title. Required when creating; omit to keep the existing title on update.                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                           | Description. Omit to keep the existing description.                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_context.context         | [optional SavedViewContext](#savedviewcontext)       | Surface the view applies to. Omit to keep the existing context.                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_selection.selection     | [optional SavedViewSelection](#savedviewselection)   | The selection. Required when creating; omit to keep the existing selection.                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config.config           | [optional SavedViewConfig](#savedviewconfig)         | Display configuration. Omit to keep the existing config.                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_visibility.visibility   | [optional SavedViewVisibility](#savedviewvisibility) | Sharing state. Omit to keep the existing visibility.                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_grants.grants           | [optional GrantList](#grantlist)                     | Access grants. When present, replaces the entire grant set (an empty list clears all grants); when omitted, grants are left unchanged. Changing grants requires manage/admin permission on the view. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag               | [optional string](#string)                           | Optional optimistic-concurrency guard. When set, the update fails with a conflict if the view was modified since this etag was read.                                                                 |

### UpsertResponse

(synq.savedviews.v1.UpsertResponse)

| Field | Type                     | Description                       |
| ----- | ------------------------ | --------------------------------- |
| view  | [ SavedView](#savedview) | The stored view after the upsert. |

### Issue

(synq.issues.issues.v1.Issue)

| Field                                                                                                  | Type                                             | Description                                      |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
| id                                                                                                     | [ string](#string)                               | ID of the issue.                                 |
| name                                                                                                   | [ string](#string)                               | Name of the issue.                               |
| message                                                                                                | [ string](#string)                               | Original message of the issue.                   |
| current\_message                                                                                       | [ string](#string)                               | Current message on the issue.                    |
| last\_error\_message                                                                                   | [ string](#string)                               | Last error message on the issue.                 |
| severity                                                                                               | [ Severity](#severity)                           | Severity of the issue.                           |
| trigger\_entity                                                                                        | [ Identifier](#identifier)                       | Entity that triggered this issue.                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) trigger\_details.monitor | [ MonitorTriggerDetails](#monitortriggerdetails) | none                                             |
| affected\_entities                                                                                     | [repeated Identifier](#identifier)               | Entities affected by this issue.                 |
| state                                                                                                  | [ State](#state)                                 | State of the issue.                              |
| started\_at                                                                                            | [ Timestamp](#timestamp)                         | Started at timestamp.                            |
| updated\_at                                                                                            | [ Timestamp](#timestamp)                         | Updated at timestamp.                            |
| ended\_at                                                                                              | [ Timestamp](#timestamp)                         | Ended at timestamp.                              |
| latest\_status                                                                                         | [ Status](#status)                               | Latest status of the issue.                      |
| latest\_status\_actor                                                                                  | [ Actor](#actor)                                 | Actor that last updated the status of the issue. |
| comments                                                                                               | [repeated IssueComment](#issuecomment)           | List of comments posted on the issue.            |
| lifecycle\_state                                                                                       | [ LifecycleState](#lifecyclestate)               | Lifecycle state of the issue.                    |

### IssueComment

(synq.issues.issues.v1.IssueComment)

| Field       | Type                     | Description |
| ----------- | ------------------------ | ----------- |
| id          | [ string](#string)       | none        |
| message     | [ string](#string)       | none        |
| created\_at | [ Timestamp](#timestamp) | none        |
| actor       | [ Actor](#actor)         | none        |

### MonitorTriggerDetails

(synq.issues.issues.v1.MonitorTriggerDetails)

| Field                                                                                                         | Type                                     | Description |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ----------- |
| monitor                                                                                                       | [ MonitorIdentifier](#monitoridentifier) | none        |
| metric\_id                                                                                                    | [ string](#string)                       | none        |
| metric\_version                                                                                               | [ int32](#int32)                         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segment\_value.segment\_value | [optional string](#string)               | none        |

### BatchGetIssuesRequest

(synq.issues.issues.v1.BatchGetIssuesRequest)

| Field      | Type                       | Description               |
| ---------- | -------------------------- | ------------------------- |
| issue\_ids | [repeated string](#string) | IDs of the issues to get. |

### BatchGetIssuesResponse

(synq.issues.issues.v1.BatchGetIssuesResponse)

| Field  | Type                            | Description |
| ------ | ------------------------------- | ----------- |
| issues | [map IssuesEntry](#issuesentry) | Issues.     |

### BatchGetIssuesResponse.IssuesEntry

(synq.issues.issues.v1.BatchGetIssuesResponse.IssuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Issue](#issue)   | none        |

### Limit

(synq.issues.issues.v1.Limit)

| Field     | Type               | Description |
| --------- | ------------------ | ----------- |
| max       | [ int32](#int32)   | none        |
| after\_id | [ string](#string) | none        |

### ListIssuesRequest

(synq.issues.issues.v1.ListIssuesRequest)

| Field    | Type                               | Description           |
| -------- | ---------------------------------- | --------------------- |
| from     | [ Timestamp](#timestamp)           | Filter by time range. |
| to       | [ Timestamp](#timestamp)           | Filter by time range. |
| limit    | [ Limit](#limit)                   | none                  |
| entities | [repeated Identifier](#identifier) | Filter by entities.   |

### ListIssuesResponse

(synq.issues.issues.v1.ListIssuesResponse)

| Field  | Type                     | Description |
| ------ | ------------------------ | ----------- |
| issues | [repeated Issue](#issue) | Issues.     |

### MarkExpectedRequest

(synq.issues.issues.v1.MarkExpectedRequest)

| Field                         | Type                     | Description                                                                   |
| ----------------------------- | ------------------------ | ----------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as expected.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as expected.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as expected. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                       |

### MarkExpectedResponse

(synq.issues.issues.v1.MarkExpectedResponse)

### MarkFixedRequest

(synq.issues.issues.v1.MarkFixedRequest)

| Field                         | Type                     | Description                                                                |
| ----------------------------- | ------------------------ | -------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as fixed.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as fixed.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as fixed. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                    |

### MarkFixedResponse

(synq.issues.issues.v1.MarkFixedResponse)

### MarkInvestigatingRequest

(synq.issues.issues.v1.MarkInvestigatingRequest)

| Field                         | Type                     | Description                                                                        |
| ----------------------------- | ------------------------ | ---------------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as investigating.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as investigating.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as investigating. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                            |

### MarkInvestigatingResponse

(synq.issues.issues.v1.MarkInvestigatingResponse)

### MarkNoActionNeededRequest

(synq.issues.issues.v1.MarkNoActionNeededRequest)

| Field                         | Type                     | Description                                                                           |
| ----------------------------- | ------------------------ | ------------------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as no action needed.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as no action needed.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as no action needed. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                               |

### MarkNoActionNeededResponse

(synq.issues.issues.v1.MarkNoActionNeededResponse)

### PostCommentRequest

(synq.issues.issues.v1.PostCommentRequest)

| Field     | Type                     | Description                                                         |
| --------- | ------------------------ | ------------------------------------------------------------------- |
| issue\_id | [ string](#string)       | ID of the issue to post a comment on.                               |
| actor     | [ Actor](#actor)         | Actor posting the comment.                                          |
| comment   | [ string](#string)       | Comment to post.                                                    |
| time      | [ Timestamp](#timestamp) | Time at which the comment was posted. Defaults to the current time. |

### PostCommentResponse

(synq.issues.issues.v1.PostCommentResponse)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| comment\_id | [ string](#string) | none        |

### IssuesCommand

(synq.issues.commands.v1.IssuesCommand)

Not to be used directly. Use the IssuesService instead when calling via API.

| Field                                                                                                         | Type                                                     | Description |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------- |
| workspace                                                                                                     | [ string](#string)                                       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.mark\_investigating      | [ MarkInvestigatingRequest](#markinvestigatingrequest)   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.mark\_fixed              | [ MarkFixedRequest](#markfixedrequest)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.mark\_expected           | [ MarkExpectedRequest](#markexpectedrequest)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.mark\_no\_action\_needed | [ MarkNoActionNeededRequest](#marknoactionneededrequest) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.post\_comment            | [ PostCommentRequest](#postcommentrequest)               | none        |

### BatchGetIssuesRequest

(synq.issues.v2.BatchGetIssuesRequest)

| Field      | Type                       | Description               |
| ---------- | -------------------------- | ------------------------- |
| issue\_ids | [repeated string](#string) | IDs of the issues to get. |

### BatchGetIssuesResponse

(synq.issues.v2.BatchGetIssuesResponse)

| Field  | Type                            | Description |
| ------ | ------------------------------- | ----------- |
| issues | [map IssuesEntry](#issuesentry) | Issues.     |

### BatchGetIssuesResponse.IssuesEntry

(synq.issues.v2.BatchGetIssuesResponse.IssuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Issue](#issue)   | none        |

### ClearStatusRequest

(synq.issues.v2.ClearStatusRequest)

| Field                                                                                     | Type                             | Description                                                                           |
| ----------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------- |
| issue\_id                                                                                 | [ string](#string)               | ID of the issue whose status should be cleared.                                       |
| actor                                                                                     | [ Actor](#actor)                 | Actor clearing the status.                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_time.time | [optional Timestamp](#timestamp) | Time at which the status was cleared. Defaults to the current time when not provided. |

### ClearStatusResponse

(synq.issues.v2.ClearStatusResponse)

### InteractionFilter

(synq.issues.v2.InteractionFilter)

Filter for matching issues where an actor interacted with them.
If none of status\_changes/comments/activities is set, all interaction types are matched.

| Field           | Type                       | Description                                                                                                                                                                                                                                                                                                                                         |
| --------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| identities      | [repeated string](#string) | Identity strings to match against the actor that performed the interaction. The caller is responsible for resolving a user to all their known identities (e.g. via GetUserIdentities or GetUserAliases + actoridentities.FromUserAliases()) before calling this API. Format: "synq:\<user\_id>", "email:\<email>", "slack:\<slack\_user\_id>", etc. |
| status\_changes | [ bool](#bool)             | Match issues where the user set a status (investigating, fixed, expected, etc.).                                                                                                                                                                                                                                                                    |
| comments        | [ bool](#bool)             | Match issues where the user posted a comment.                                                                                                                                                                                                                                                                                                       |
| activities      | [ bool](#bool)             | Match issues where the user has an activity record.                                                                                                                                                                                                                                                                                                 |

### ListIssuesRequest

(synq.issues.v2.ListIssuesRequest)

| Field                                                                                                             | Type                                             | Description                                                                            |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entities\_query.entities\_query   | [optional Query](#query)                         | Filter by entities.                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_time.time                         | [optional Time](#time)                           | Time range filter                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sort.sort                         | [optional Sort](#sort)                           | Sort options                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination             | [optional Pagination](#pagination)               | Pagination                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_lifecycle\_state.lifecycle\_state | [optional LifecycleState](#lifecyclestate)       | Filter by issue lifecycle state                                                        |
| lifecycle\_states                                                                                                 | [repeated LifecycleState](#lifecyclestate)       | Filter by issue lifecycle states                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_interacted\_by.interacted\_by     | [optional InteractionFilter](#interactionfilter) | Filter issues by users who interacted with them (status change, comment, or activity). |
| severities                                                                                                        | [repeated Severity](#severity)                   | Filter by issue severity. If empty, issues of any severity are returned.               |

### ListIssuesRequest.Sort

(synq.issues.v2.ListIssuesRequest.Sort)

| Field    | Type             | Description |
| -------- | ---------------- | ----------- |
| sort\_by | [ Field](#field) | none        |
| order    | [ Order](#order) | none        |

### ListIssuesRequest.Time

(synq.issues.v2.ListIssuesRequest.Time)

| Field | Type                     | Description |
| ----- | ------------------------ | ----------- |
| field | [ Field](#field)         | none        |
| from  | [ Timestamp](#timestamp) | none        |
| to    | [ Timestamp](#timestamp) | none        |

### ListIssuesResponse

(synq.issues.v2.ListIssuesResponse)

| Field      | Type                       | Description         |
| ---------- | -------------------------- | ------------------- |
| page\_info | [ PageInfo](#pageinfo)     | Paging information. |
| issue\_ids | [repeated string](#string) | none                |

### MarkExpectedRequest

(synq.issues.v2.MarkExpectedRequest)

| Field                         | Type                     | Description                                                                   |
| ----------------------------- | ------------------------ | ----------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as expected.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as expected.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as expected. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                       |

### MarkExpectedResponse

(synq.issues.v2.MarkExpectedResponse)

### MarkFixedRequest

(synq.issues.v2.MarkFixedRequest)

| Field                         | Type                     | Description                                                                |
| ----------------------------- | ------------------------ | -------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as fixed.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as fixed.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as fixed. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                    |

### MarkFixedResponse

(synq.issues.v2.MarkFixedResponse)

### MarkInvestigatingRequest

(synq.issues.v2.MarkInvestigatingRequest)

| Field                         | Type                     | Description                                                                        |
| ----------------------------- | ------------------------ | ---------------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as investigating.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as investigating.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as investigating. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                            |

### MarkInvestigatingResponse

(synq.issues.v2.MarkInvestigatingResponse)

### MarkNoActionNeededRequest

(synq.issues.v2.MarkNoActionNeededRequest)

| Field                         | Type                     | Description                                                                           |
| ----------------------------- | ------------------------ | ------------------------------------------------------------------------------------- |
| issue\_id                     | [ string](#string)       | ID of the issue to mark as no action needed.                                          |
| actor                         | [ Actor](#actor)         | Actor marking the issue as no action needed.                                          |
| time                          | [ Timestamp](#timestamp) | Time at which the issue was marked as no action needed. Defaults to the current time. |
| require\_no\_existing\_status | [ bool](#bool)           | Ignore status change if the issue already has a status.                               |

### MarkNoActionNeededResponse

(synq.issues.v2.MarkNoActionNeededResponse)

### PostCommentRequest

(synq.issues.v2.PostCommentRequest)

| Field     | Type                     | Description                                                         |
| --------- | ------------------------ | ------------------------------------------------------------------- |
| issue\_id | [ string](#string)       | ID of the issue to post a comment on.                               |
| actor     | [ Actor](#actor)         | Actor posting the comment.                                          |
| comment   | [ string](#string)       | Comment to post.                                                    |
| time      | [ Timestamp](#timestamp) | Time at which the comment was posted. Defaults to the current time. |

### PostCommentResponse

(synq.issues.v2.PostCommentResponse)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| comment\_id | [ string](#string) | none        |

### Actor

(synq.issues.actor.v1.Actor)

Actor identifies who performed a write — set by the calling client and
carried end-to-end through the public API into stored audit trails (issue
status changes, comments, incident assignments) and rendered downstream
(e.g. Slack/MSTeams/email alerts).

Producers should populate:

1. `name` — human-readable display label, derived from
   `synq.auth.iam.v1.IamResponse.user_name` when available, falling back
   to `user_email`. Avoid generic placeholders ("MCP", "API"); readers
   treat those as "no identity resolved" and fall back to impersonal copy.
2. `user` — the strongest identifier the caller can prove. For human
   callers, set `email` from `IamResponse.user_email` so the server can
   resolve the caller back to a workspace user.
3. `via` — entry-point label for the channel through which the request
   arrived (e.g. VIA\_MCP for the MCP server), regardless of who the
   caller is.

| Field                                                                                        | Type                             | Description |
| -------------------------------------------------------------------------------------------- | -------------------------------- | ----------- |
| name                                                                                         | [ string](#string)               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) user.slack     | [ SlackUser](#slackuser)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) user.email     | [ EmailUser](#emailuser)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) user.pagerduty | [ PagerdutyUser](#pagerdutyuser) | none        |
| via                                                                                          | [ Via](#via)                     | none        |

### EmailUser

(synq.issues.actor.v1.EmailUser)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| user\_email | [ string](#string) | none        |

### PagerdutyUser

(synq.issues.actor.v1.PagerdutyUser)

| Field    | Type               | Description |
| -------- | ------------------ | ----------- |
| user\_id | [ string](#string) | none        |

### SlackUser

(synq.issues.actor.v1.SlackUser)

| Field    | Type               | Description |
| -------- | ------------------ | ----------- |
| user\_id | [ string](#string) | none        |

### DuckDBCloudConf

(synq.integrations.v1.DuckDBCloudConf)

DuckDB (via MotherDuck) cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                   | Type                       | Description                                            |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_motherduck\_account.motherduck\_account | [optional string](#string) | MotherDuck account name or identifier.                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_access\_token.access\_token             | [optional string](#string) | MotherDuck access token. Write-only — masked on reads. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn     | [optional string](#string) | Fully-qualified table for storing SQL test audit logs. |

### AthenaAccessKeyAuth

(synq.integrations.v1.AthenaAccessKeyAuth)

Amazon Athena access-key authentication (long-lived IAM user credentials).

| Field                                                                                                                   | Type                       | Description                                          |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_access\_key\_id.access\_key\_id         | [optional string](#string) | AWS access key id (e.g. "AKIA...").                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_secret\_access\_key.secret\_access\_key | [optional string](#string) | AWS secret access key. Write-only — masked on reads. |

### AthenaCloudConf

(synq.integrations.v1.AthenaCloudConf)

Amazon Athena cloud-managed connection. Athena is serverless — there is no
host/port; the endpoint is implied by the AWS region.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                                   | Type                                         | Description                                                                                                                                                 |
| --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_region.region                                           | [optional string](#string)                   | AWS region hosting Athena and the Glue Data Catalog (e.g. "eu-central-1").                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_workgroup.workgroup                                     | [optional string](#string)                   | Workgroup to run queries under. Defaults to "primary" when empty; must have a query result location configured.                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.access\_key                                | [ AthenaAccessKeyAuth](#athenaaccesskeyauth) | Long-lived IAM user access key.                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_show\_create\_table.use\_show\_create\_table       | [optional bool](#bool)                       | Use SHOW CREATE TABLE per object to retrieve full table DDL.                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_show\_create\_view\.use\_show\_create\_view        | [optional bool](#bool)                       | Use SHOW CREATE VIEW per view to retrieve full view DDL.                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs                   | [optional bool](#bool)                       | Fetch Athena query history (management API calls; no per-scan billing).                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_iceberg\_metrics\_scan.use\_iceberg\_metrics\_scan | [optional bool](#bool)                       | For Iceberg tables, scan metadata tables for row counts and file sizes (one Athena query per table).                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scope.scope                                             | [optional ScopeFilter](#scopefilter)         | Include/exclude scope filter. ScopeRule.database = Glue catalog (usually "AwsDataCatalog"), ScopeRule.schema = Glue database, ScopeRule.table = table/view. |

### AthenaOutputs

(synq.integrations.v1.AthenaOutputs)

Athena generated outputs.

| Field          | Type               | Description                                                                                                       |
| -------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------- |
| account\_id    | [ string](#string) | AWS account id resolved from the supplied credentials.                                                            |
| principal\_arn | [ string](#string) | ARN of the IAM principal Coalesce Quality authenticates as. Reference it in your Athena / Glue resource policies. |

### BigQueryOutputs

(synq.integrations.v1.BigQueryOutputs)

BigQuery generated outputs.

| Field                   | Type               | Description                                                                                                                                        |
| ----------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| service\_account\_email | [ string](#string) | Email of the service account derived from the supplied credentials. Grant this principal access to the datasets you want Coalesce Quality to read. |

### Capabilities

(synq.integrations.v1.Capabilities)

Capabilities advertise which actions are valid for an integration in its
current state, so a client can decide what to offer before calling.

Capabilities are a hint computed from the integration's type and current
state; the server still enforces every action. A `false` flag means the
action would be rejected right now (unsupported for this type, or not
applicable in the current state — for example `can_enable` is false for an
already-enabled integration).

| Field                  | Type           | Description                                                                                                                                                                                                                                                                                                                    |
| ---------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| can\_patch             | [ bool](#bool) | The configuration can be changed via `UpdateIntegration`. False for read-only / externally-owned integrations.                                                                                                                                                                                                                 |
| can\_refresh           | [ bool](#bool) | An ad-hoc refresh can be triggered via `RefreshIntegration`.                                                                                                                                                                                                                                                                   |
| can\_disable           | [ bool](#bool) | The integration can be disabled via `DisableIntegration` (true only when currently enabled).                                                                                                                                                                                                                                   |
| can\_enable            | [ bool](#bool) | The integration can be enabled via `EnableIntegration` (true only when currently disabled).                                                                                                                                                                                                                                    |
| can\_delete            | [ bool](#bool) | The integration can be deleted via `DeleteIntegration`.                                                                                                                                                                                                                                                                        |
| is\_dwh                | [ bool](#bool) | Whether this is a data warehouse or database connection (rather than a transformation tool, catalog, etc.). Querying features — data preview, SQL tests, and reconciliation — are only available for these.                                                                                                                    |
| can\_reconcile\_deploy | [ bool](#bool) | Whether scheduled and API-triggered reconciliations can run against this integration. True only when it is an enabled data warehouse and your workspace has enabled reconciliation for it. These runs use the integration's workspace-level credentials, so this does not depend on any individual user's personal connection. |

### Integration

(synq.integrations.v1.Integration)

Integration is a connection from Coalesce Quality to one of your data
systems (a warehouse, database, or transformation tool).

| Field        | Type                                       | Description                                                                                                                                                                                                                                                                                         |
| ------------ | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id           | [ string](#string)                         | Server-assigned unique identifier (UUID). Use it to address the integration in `GetIntegration`, `UpdateIntegration`, `DeleteIntegration`, and the enable / disable / refresh / health RPCs.                                                                                                        |
| title        | [ string](#string)                         | Human-friendly name shown in the Coalesce Quality UI. Set by you on create and editable via update.                                                                                                                                                                                                 |
| disabled     | [ bool](#bool)                             | Whether the integration is currently disabled. A disabled integration keeps its configuration but is not scheduled or refreshed. Toggle with `EnableIntegration` / `DisableIntegration`.                                                                                                            |
| created\_at  | [ Timestamp](#timestamp)                   | When the integration was created.                                                                                                                                                                                                                                                                   |
| updated\_at  | [ Timestamp](#timestamp)                   | When the integration was last modified (configuration, title, or enabled / disabled state).                                                                                                                                                                                                         |
| etag         | [ string](#string)                         | Opaque entity tag for optimistic concurrency. Pass it back as `UpdateIntegrationRequest.etag` / `DeleteIntegrationRequest.etag` to ensure you are modifying the version you last read; a mismatch is rejected with a 409 / ABORTED. The value is weak (prefixed `W/`) and opaque — do not parse it. |
| platform     | [ DataPlatformType](#dataplatformtype)     | The data platform this integration connects to (for example POSTGRES, CLICKHOUSE, SNOWFLAKE). UNSPECIFIED for integrations that are not data warehouses or databases.                                                                                                                               |
| dialect      | [ SqlDialect](#sqldialect)                 | The SQL dialect this integration understands — useful when writing SQL against it, such as custom monitors or reconciliation queries. Determined by the platform. UNSPECIFIED for integrations that are not data warehouses or databases.                                                           |
| config       | [ IntegrationConfig](#integrationconfig)   | Connection configuration. Secret fields are masked (empty) on reads.                                                                                                                                                                                                                                |
| outputs      | [ IntegrationOutputs](#integrationoutputs) | Server-generated outputs (read-only). Empty for types that produce none.                                                                                                                                                                                                                            |
| capabilities | [ Capabilities](#capabilities)             | Actions valid for this integration in its current state (read-only hint).                                                                                                                                                                                                                           |

### IntegrationConfig

(synq.integrations.v1.IntegrationConfig)

IntegrationConfig is the connection configuration for an integration.

Exactly one variant of the `config` oneof is set; the populated variant
determines the integration's type. The config holds the connection details
(host, credentials, scope) for the connected system.

Secret fields (passwords, tokens, keys) follow write-only semantics: they are
masked (returned empty) on reads. See each `*Conf` message and
`IntegrationsService.UpdateIntegration` for preserve / rotate / clear rules.

| Field                                                                                           | Type                                         | Description                                  |
| ----------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.bigquery   | [ BigQueryCloudConf](#bigquerycloudconf)     | Google BigQuery connection.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.snowflake  | [ SnowflakeCloudConf](#snowflakecloudconf)   | Snowflake connection.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.redshift   | [ RedshiftCloudConf](#redshiftcloudconf)     | Amazon Redshift connection.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.postgres   | [ PostgresCloudConf](#postgrescloudconf)     | PostgreSQL connection.                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.mysql      | [ MySQLCloudConf](#mysqlcloudconf)           | MySQL connection.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.clickhouse | [ ClickhouseCloudConf](#clickhousecloudconf) | ClickHouse connection.                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.databricks | [ DatabricksCloudConf](#databrickscloudconf) | Databricks connection.                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.trino      | [ TrinoCloudConf](#trinocloudconf)           | Trino / Presto connection.                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.mssql      | [ MSSQLCloudConf](#mssqlcloudconf)           | Microsoft SQL Server / Azure SQL connection. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.oracle     | [ OracleCloudConf](#oraclecloudconf)         | Oracle Database connection.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.duckdb     | [ DuckDBCloudConf](#duckdbcloudconf)         | DuckDB / MotherDuck connection.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.athena     | [ AthenaCloudConf](#athenacloudconf)         | Amazon Athena connection.                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.dbt\_cloud | [ DbtCloudConf](#dbtcloudconf)               | dbt Cloud connection.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.fabric     | [ FabricCloudConf](#fabriccloudconf)         | Microsoft Fabric connection.                 |

### IntegrationOutputs

(synq.integrations.v1.IntegrationOutputs)

Generated, non-secret values produced by the server when an integration is
created (for example a service-account email to grant access to, or a public
key to install). Outputs are read-only and are never accepted on writes.

At most one variant is set, matching the integration's type. Types that
produce no outputs leave this message empty.

| Field                                                                                           | Type                                   | Description                                                        |
| ----------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) outputs.bigquery  | [ BigQueryOutputs](#bigqueryoutputs)   | BigQuery: the service-account identity to grant dataset access to. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) outputs.snowflake | [ SnowflakeOutputs](#snowflakeoutputs) | Snowflake: the public key to register when using key-pair auth.    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) outputs.athena    | [ AthenaOutputs](#athenaoutputs)       | Athena: the resolved AWS caller identity.                          |

### SnowflakeOutputs

(synq.integrations.v1.SnowflakeOutputs)

Snowflake generated outputs.

| Field       | Type               | Description                                                                                                                                                  |
| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| public\_key | [ string](#string) | Public key (PEM) to register on the Snowflake user when authenticating with a Coalesce Quality–managed key pair. Empty when you supply your own credentials. |

### PostgresCloudConf

(synq.integrations.v1.PostgresCloudConf)

PostgreSQL cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                               | Type                       | Description                                            |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user                           | [optional string](#string) | Username.                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                   | [optional string](#string) | Password. Write-only — masked on reads.                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                           | [optional string](#string) | Host address or IP.                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                           | [optional int32](#int32)   | Port (typically 5432).                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database                   | [optional string](#string) | Database to connect to and ingest metadata from.       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn | [optional string](#string) | Fully-qualified table for storing SQL test audit logs. |

### ClickhouseCloudConf

(synq.integrations.v1.ClickhouseCloudConf)

ClickHouse cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                 | Type                                                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                             | [optional string](#string)                                  | Host address or IP.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                             | [optional string](#string)                                  | Port (e.g. "8123" for HTTP, "9440" for HTTPS).                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_username.username                     | [optional string](#string)                                  | Username.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                     | [optional string](#string)                                  | Password. Write-only — masked on reads.                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_default\_dataset.default\_dataset     | [optional string](#string)                                  | Database the connection opens with, so unqualified table names in a query resolve against it. It is not a scrape filter: metadata is read from system tables and covers every database the credentials can see, whatever this says.                                                                                                                                                                                                                                                                    |
| additional\_parameters                                                                                                | [map AdditionalParametersEntry](#additionalparametersentry) | Additional connection parameters as key/value pairs (e.g. "max\_execution\_time": "30").                                                                                                                                                                                                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ssl.ssl                               | [optional bool](#bool)                                      | Enable SSL/TLS.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database\_name.database\_name         | [optional string](#string)                                  | Name this ClickHouse is published under, and the top element of every path and breadcrumb its tables appear in — `prod`, `staging`, `eu-analytics`. ClickHouse has no container above a database, so something has to name the service; left empty that is the connection host, which is correct but unreadable for a ClickHouse Cloud endpoint. It is not a database and does not restrict what is scraped. Changing it republishes every table under new paths, so pick one per service and keep it. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs | [optional bool](#bool)                                      | Ingest query logs from system.query\_log.                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn   | [optional string](#string)                                  | Fully-qualified table for storing SQL test audit logs.                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cluster.cluster                       | [optional ClickhouseClusterConf](#clickhouseclusterconf)    | How ClickHouse system tables are read. Omit to keep reading across a cluster named "default", which every ClickHouse Cloud service provides.                                                                                                                                                                                                                                                                                                                                                           |

### ClickhouseCloudConf.AdditionalParametersEntry

(synq.integrations.v1.ClickhouseCloudConf.AdditionalParametersEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### ClickhouseClusterConf

(synq.integrations.v1.ClickhouseClusterConf)

How metadata reads address ClickHouse system tables.

System tables are per-node, so on a service with more than one replica a plain
read reflects whichever replica answered rather than the whole warehouse.

| Field | Type                                             | Description                                                                                                                                                                                                          |
| ----- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| mode  | [ ClickhouseClusterMode](#clickhouseclustermode) | none                                                                                                                                                                                                                 |
| name  | [ string](#string)                               | Cluster to read through, as named under remote\_servers in the ClickHouse configuration. `SELECT DISTINCT cluster FROM system.clusters` lists what a server has. Empty means "default". Ignored in single-node mode. |

### BigQueryCloudConf

(synq.integrations.v1.BigQueryCloudConf)

Google BigQuery cloud-managed connection.

All fields are optional so an update can carry only what changes: omit a field
to leave it unchanged, or send a new value to set it. Secret fields are
write-only (masked, returned empty, on reads); omit to keep the stored value
or send a new value to rotate it.

| Field                                                                                                                       | Type                       | Description                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_project\_id.project\_id                     | [optional string](#string) | Google Cloud project id containing the datasets to monitor.                                                                                                                                                       |
| blacklisted\_datasets                                                                                                       | [repeated string](#string) | Dataset name patterns to exclude from ingestion. Mutually exclusive with `datasets` — when `datasets` is set, this is ignored.                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_service\_account\_key.service\_account\_key | [optional string](#string) | Service-account key JSON. Write-only — masked on reads.                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_region.region                               | [optional string](#string) | Google Cloud region for the project (e.g. "us-central1", "EU").                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs       | [optional bool](#bool)     | Ingest BigQuery query logs from INFORMATION\_SCHEMA.                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn         | [optional string](#string) | Fully-qualified table for storing SQL test audit logs (e.g. "project.dataset.table").                                                                                                                             |
| datasets                                                                                                                    | [repeated string](#string) | Explicit list of datasets to scrape. When set, only these are queried (no project-level dataset listing needed). When empty, all visible datasets are discovered. Mutually exclusive with `blacklisted_datasets`. |

### BatchGetIntegrationsRequest

(synq.integrations.v1.BatchGetIntegrationsRequest)

Request to fetch multiple integrations by id.

| Field            | Type                       | Description                                                         |
| ---------------- | -------------------------- | ------------------------------------------------------------------- |
| integration\_ids | [repeated string](#string) | Integration ids (UUIDs). Unknown ids are omitted from the response. |

### BatchGetIntegrationsResponse

(synq.integrations.v1.BatchGetIntegrationsResponse)

Response with the requested integrations.

| Field        | Type                                        | Description                                                                                                         |
| ------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| integrations | [map IntegrationsEntry](#integrationsentry) | The integrations that were found, keyed by integration id. Requested ids that do not exist are absent from the map. |

### BatchGetIntegrationsResponse.IntegrationsEntry

(synq.integrations.v1.BatchGetIntegrationsResponse.IntegrationsEntry)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| key   | [ string](#string)           | none        |
| value | [ Integration](#integration) | none        |

### CreateIntegrationRequest

(synq.integrations.v1.CreateIntegrationRequest)

Request to create an integration.

| Field  | Type                                     | Description                                                                                          |
| ------ | ---------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| title  | [ string](#string)                       | Human-friendly name for the integration.                                                             |
| config | [ IntegrationConfig](#integrationconfig) | Connection configuration. Exactly one `config` variant must be set; it fixes the integration's type. |

### CreateIntegrationResponse

(synq.integrations.v1.CreateIntegrationResponse)

Response from creating an integration.

| Field       | Type                         | Description                                                                          |
| ----------- | ---------------------------- | ------------------------------------------------------------------------------------ |
| integration | [ Integration](#integration) | The created integration, including its assigned id, etag, and any generated outputs. |

### DeleteIntegrationRequest

(synq.integrations.v1.DeleteIntegrationRequest)

Request to delete an integration.

| Field                                                                                     | Type                       | Description                                                                  |
| ----------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------- |
| integration\_id                                                                           | [ string](#string)         | Id of the integration to delete (UUID).                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard (see `UpdateIntegrationRequest.etag`). |

### DeleteIntegrationResponse

(synq.integrations.v1.DeleteIntegrationResponse)

Response from deleting an integration.

### DisableIntegrationRequest

(synq.integrations.v1.DisableIntegrationRequest)

Request to disable an integration.

| Field           | Type               | Description                              |
| --------------- | ------------------ | ---------------------------------------- |
| integration\_id | [ string](#string) | Id of the integration to disable (UUID). |

### DisableIntegrationResponse

(synq.integrations.v1.DisableIntegrationResponse)

Response from disabling an integration.

| Field       | Type                         | Description                      |
| ----------- | ---------------------------- | -------------------------------- |
| integration | [ Integration](#integration) | The integration after disabling. |

### EnableIntegrationRequest

(synq.integrations.v1.EnableIntegrationRequest)

Request to enable an integration.

| Field           | Type               | Description                             |
| --------------- | ------------------ | --------------------------------------- |
| integration\_id | [ string](#string) | Id of the integration to enable (UUID). |

### EnableIntegrationResponse

(synq.integrations.v1.EnableIntegrationResponse)

Response from enabling an integration.

| Field       | Type                         | Description                     |
| ----------- | ---------------------------- | ------------------------------- |
| integration | [ Integration](#integration) | The integration after enabling. |

### GetIntegrationHealthRequest

(synq.integrations.v1.GetIntegrationHealthRequest)

Request for an integration's health and run history.

| Field                                                                                                 | Type                               | Description                                                                                                             |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| integration\_id                                                                                       | [ string](#string)                 | Id of the integration (UUID).                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | Cursor-based pagination over the run history. Omit for a bounded recent window (most recent runs from the last 7 days). |

### GetIntegrationHealthResponse

(synq.integrations.v1.GetIntegrationHealthResponse)

Response with current health plus a page of recent runs.

| Field      | Type                                       | Description                                                       |
| ---------- | ------------------------------------------ | ----------------------------------------------------------------- |
| health     | [ IntegrationHealth](#integrationhealth)   | Current health summary.                                           |
| runs       | [repeated IntegrationRun](#integrationrun) | Recent runs, most recent first.                                   |
| page\_info | [ PageInfo](#pageinfo)                     | Pagination metadata; pass `page_info.last_id` as the next cursor. |

### GetIntegrationRequest

(synq.integrations.v1.GetIntegrationRequest)

Request to fetch a single integration.

| Field           | Type               | Description            |
| --------------- | ------------------ | ---------------------- |
| integration\_id | [ string](#string) | Integration id (UUID). |

### GetIntegrationResponse

(synq.integrations.v1.GetIntegrationResponse)

Response with a single integration.

| Field       | Type                         | Description                |
| ----------- | ---------------------------- | -------------------------- |
| integration | [ Integration](#integration) | The requested integration. |

### IntegrationHealth

(synq.integrations.v1.IntegrationHealth)

Current health summary for an integration.

| Field                                                                                                               | Type                             | Description                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| status                                                                                                              | [ HealthStatus](#healthstatus)   | Status derived from the most recent run.                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_run\_at.last\_run\_at         | [optional Timestamp](#timestamp) | When the most recent run occurred. Unset when no runs are observed.                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_success\_at.last\_success\_at | [optional Timestamp](#timestamp) | When the most recent successful run occurred. Unset when none is observed.                                                    |
| message                                                                                                             | [ string](#string)               | Human-readable message from the most recent run (for example an error summary). Empty when there is nothing to report.        |
| healthy                                                                                                             | [ bool](#bool)                   | Convenience flag: true when `status` is OK and the last run is recent relative to the integration's expected refresh cadence. |

### IntegrationRun

(synq.integrations.v1.IntegrationRun)

A single observed run (refresh / sync) of an integration.

| Field                                                                                                     | Type                             | Description                                                                                                |
| --------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| run\_id                                                                                                   | [ string](#string)               | Run identifier.                                                                                            |
| status                                                                                                    | [ HealthStatus](#healthstatus)   | Outcome of this run.                                                                                       |
| started\_at                                                                                               | [ Timestamp](#timestamp)         | When the run started.                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_finished\_at.finished\_at | [optional Timestamp](#timestamp) | When the run finished. Unset while still running.                                                          |
| message                                                                                                   | [ string](#string)               | Human-readable message for this run (for example an error summary). Empty when there is nothing to report. |

### ListIntegrationsRequest

(synq.integrations.v1.ListIntegrationsRequest)

Request to list integrations.

| Field                                                                                             | Type                   | Description                                                                                                    |
| ------------------------------------------------------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_disabled.disabled | [optional bool](#bool) | Optional filter: when set, return only enabled (false) or only disabled (true) integrations. Unset means both. |

### ListIntegrationsResponse

(synq.integrations.v1.ListIntegrationsResponse)

Response with the workspace's integrations.

| Field        | Type                                 | Description                            |
| ------------ | ------------------------------------ | -------------------------------------- |
| integrations | [repeated Integration](#integration) | All integrations matching the request. |

### RefreshIntegrationRequest

(synq.integrations.v1.RefreshIntegrationRequest)

Request to trigger an ad-hoc refresh.

| Field           | Type               | Description                              |
| --------------- | ------------------ | ---------------------------------------- |
| integration\_id | [ string](#string) | Id of the integration to refresh (UUID). |

### RefreshIntegrationResponse

(synq.integrations.v1.RefreshIntegrationResponse)

Response from triggering a refresh.

### UpdateIntegrationRequest

(synq.integrations.v1.UpdateIntegrationRequest)

Request to update an integration. The `config` is replaced wholesale; `title`
is patch-style (omit to leave unchanged).

| Field                                                                                       | Type                                     | Description                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| integration\_id                                                                             | [ string](#string)                       | Id of the integration to update (UUID).                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title | [optional string](#string)               | New human-friendly name. Omit to leave the title unchanged.                                                                                                                       |
| config                                                                                      | [ IntegrationConfig](#integrationconfig) | New connection configuration. The populated `config` variant must match the existing integration's type.                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag   | [optional string](#string)               | Optional optimistic-concurrency guard. When set, the update is applied only if it matches the integration's current etag; otherwise ABORTED (HTTP 409). Omit for last-write-wins. |

### UpdateIntegrationResponse

(synq.integrations.v1.UpdateIntegrationResponse)

Response from updating an integration.

| Field       | Type                         | Description                              |
| ----------- | ---------------------------- | ---------------------------------------- |
| integration | [ Integration](#integration) | The updated integration with a new etag. |

### FabricCloudConf

(synq.integrations.v1.FabricCloudConf)

Microsoft Fabric cloud-managed connection.

Fabric is workspace-scoped with cross-database queries (like Snowflake or
Databricks, not a single database): the workspace SQL analytics endpoint
exposes every warehouse / lakehouse in the workspace as a database, queryable
via three-part \[database].\[schema].\[table] T-SQL names.

Authentication is Microsoft Entra ID only — Fabric rejects SQL logins, so the
headless identity is an Entra service principal (application id + secret), or
a pre-acquired Entra access token.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                 | Type                                                       | Description                                                                                                                                                                                                                                                                                                                          |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                             | [optional string](#string)                                 | Workspace SQL analytics endpoint host, e.g. "\<workspace-id>.datawarehouse.fabric.microsoft.com".                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database                     | [optional string](#string)                                 | Default execution database — the context in which unqualified ad-hoc / monitor SQL resolves. Defaults to "master" (the always-present workspace entry point) when empty. Metadata reads and generated metrics SQL are fully database-qualified, so this only affects unqualified queries.                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.service\_principal       | [ FabricServicePrincipalAuth](#fabricserviceprincipalauth) | Entra service principal (application id + secret).                                                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_access\_token.access\_token           | [optional string](#string)                                 | Pre-acquired Entra OAuth access token for the SQL scope ([https://database.windows.net/.default](https://database.windows.net/.default)). When set, takes precedence over the service principal — for callers that mint their own token out of band (managed identity / workload-identity federation). Write-only — masked on reads. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs | [optional bool](#bool)                                     | Fetch Fabric query history for cost attribution and SQL / column-level lineage. Management-plane reads only, no per-query billing.                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scope.scope                           | [optional ScopeFilter](#scopefilter)                       | Include/exclude scope filter. ScopeRule.database = Fabric database / warehouse, ScopeRule.schema = schema, ScopeRule.table = table / view.                                                                                                                                                                                           |

### FabricServicePrincipalAuth

(synq.integrations.v1.FabricServicePrincipalAuth)

Microsoft Fabric Entra service-principal credentials.

| Field                                                                                                         | Type                       | Description                                                                                                                                                |
| ------------------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_client\_id.client\_id         | [optional string](#string) | Entra application (client) ID of the service principal.                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_client\_secret.client\_secret | [optional string](#string) | Service principal client secret. Write-only — masked on reads.                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_tenant\_id.tenant\_id         | [optional string](#string) | Entra tenant (directory) ID. Optional: inferred from the Fabric endpoint when empty; set it when the authority is not the service principal's home tenant. |

### RedshiftCloudConf

(synq.integrations.v1.RedshiftCloudConf)

Amazon Redshift cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                                     | Type                       | Description                                                    |
| ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user                                                 | [optional string](#string) | Username.                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                                         | [optional string](#string) | Password. Write-only — masked on reads.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                                                 | [optional string](#string) | Cluster endpoint hostname.                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                                                 | [optional int32](#int32)   | Port (typically 5439).                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database                                         | [optional string](#string) | Database to connect to and ingest metadata from.               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs                     | [optional bool](#bool)     | Ingest query logs from system views.                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_freshness\_from\_query\_logs.freshness\_from\_query\_logs | [optional bool](#bool)     | Estimate table freshness from query logs (SYS\_QUERY\_DETAIL). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn                       | [optional string](#string) | Fully-qualified table for storing SQL test audit logs.         |

### OracleCloudConf

(synq.integrations.v1.OracleCloudConf)

Oracle Database cloud-managed connection. Oracle connections are scoped to a
Pluggable Database (PDB) via the service name.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                         | Type                       | Description                                                                                                                         |
| ----------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                                     | [optional string](#string) | Host address or IP (OCI Autonomous DB e.g. "adb.eu-frankfurt-1.oraclecloud.com").                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                                     | [optional int32](#int32)   | Listener port (typically 1521; OCI Autonomous DB with mTLS uses 1522).                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_service\_name.service\_name                   | [optional string](#string) | Service name / PDB name (OCI Autonomous DB e.g. "mydb\_high").                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_username.username                             | [optional string](#string) | Username.                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                             | [optional string](#string) | Password. Write-only — masked on reads.                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ssl.ssl                                       | [optional bool](#bool)     | Enable TLS/SSL (TCPS). Required for OCI Autonomous Database.                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ssl\_verify.ssl\_verify                       | [optional bool](#bool)     | Verify the server certificate when SSL is enabled.                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs         | [optional bool](#bool)     | Ingest query logs (V\$SQL by default, DBA\_HIST with the Diagnostics Pack).                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_diagnostics\_pack.use\_diagnostics\_pack | [optional bool](#bool)     | Use the Oracle Diagnostics Pack (AWR) for persistent query-log history (requires a license; included with OCI Autonomous Database). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn           | [optional string](#string) | Fully-qualified table for storing SQL test audit logs.                                                                              |

### DatabricksCloudConf

(synq.integrations.v1.DatabricksCloudConf)

Databricks cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                                         | Type                                       | Description                                                                                                                                                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_workspace\_url.workspace\_url                                 | [optional string](#string)                 | Workspace URL (e.g. "[https://your-workspace.cloud.databricks.com](https://your-workspace.cloud.databricks.com)").                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.token                                            | [ string](#string)                         | Personal access token. Write-only — masked on reads.                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.oauth\_m2m                                       | [ DatabricksOAuthM2M](#databricksoauthm2m) | OAuth 2.0 machine-to-machine (service principal) auth.                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_warehouse\_id.warehouse\_id                                   | [optional string](#string)                 | SQL warehouse id (or cluster id) used to execute queries.                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs                         | [optional bool](#bool)                     | Ingest query logs from system tables.                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_table\_metrics.fetch\_table\_metrics                   | [optional bool](#bool)                     | Run ANALYZE TABLE to refresh and collect statistics.                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_table\_metrics\_scan.fetch\_table\_metrics\_scan       | [optional bool](#bool)                     | Run ANALYZE TABLE ... SCAN for detailed metrics incl. row counts (more resource-intensive).                                                                                                                                                                               |
| catalog\_blocklist                                                                                                                            | [repeated string](#string)                 | Catalog name patterns to exclude from ingestion.                                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_table\_tags.fetch\_table\_tags                         | [optional bool](#bool)                     | Retrieve Unity Catalog table tags.                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_show\_create\_table.use\_show\_create\_table             | [optional bool](#bool)                     | Use SHOW CREATE TABLE for table DDL (otherwise extracted from query logs).                                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn                           | [optional string](#string)                 | Fully-qualified table for storing SQL test audit logs.                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_disable\_unity\_table\_lineage.disable\_unity\_table\_lineage | [optional bool](#bool)                     | Disable retrieval of Unity Catalog table-to-table lineage. Coalesce Quality already computes lineage from query logs, so the Unity Catalog edges can be redundant noise. When unset/false, Unity Catalog table-to-table lineage is retrieved and published (the default). |

### DatabricksOAuthM2M

(synq.integrations.v1.DatabricksOAuthM2M)

Databricks OAuth 2.0 machine-to-machine (service principal) credentials.

| Field                                                                                                         | Type                       | Description                                        |
| ------------------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_client\_id.client\_id         | [optional string](#string) | OAuth client id of the service principal.          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_client\_secret.client\_secret | [optional string](#string) | OAuth client secret. Write-only — masked on reads. |

### MySQLCloudConf

(synq.integrations.v1.MySQLCloudConf)

MySQL cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                               | Type                       | Description                                            |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user                           | [optional string](#string) | Username.                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                   | [optional string](#string) | Password. Write-only — masked on reads.                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                           | [optional string](#string) | Host address or IP.                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                           | [optional int32](#int32)   | Port (typically 3306).                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn | [optional string](#string) | Fully-qualified table for storing SQL test audit logs. |

### TrinoBasicAuth

(synq.integrations.v1.TrinoBasicAuth)

Trino basic (username / password) authentication.

| Field                                                                                             | Type                       | Description                                   |
| ------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user         | [optional string](#string) | Trino username.                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password | [optional string](#string) | Trino password. Write-only — masked on reads. |

### TrinoCloudConf

(synq.integrations.v1.TrinoCloudConf)

Trino / Presto cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                           | Type                               | Description                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                                       | [optional string](#string)         | Coordinator hostname or IP.                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                                       | [optional int32](#int32)           | Port (leave unset for the driver default — typically 443 for HTTPS, 8080 for HTTP).                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.basic                              | [ TrinoBasicAuth](#trinobasicauth) | Basic username/password auth.                                                                                                 |
| catalogs                                                                                                                        | [repeated string](#string)         | Catalogs to ingest metadata from (e.g. \["hive", "postgresql"]).                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs           | [optional bool](#bool)             | Ingest query logs from system tables.                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_no\_show\_create\_view\.no\_show\_create\_view  | [optional bool](#bool)             | Disable SHOW CREATE VIEW for view DDL.                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_no\_show\_create\_table.no\_show\_create\_table | [optional bool](#bool)             | Disable SHOW CREATE TABLE for table DDL.                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_no\_materialized\_views.no\_materialized\_views | [optional bool](#bool)             | Disable fetching materialized views from system.metadata.materialized\_views.                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_table\_comments.fetch\_table\_comments   | [optional bool](#bool)             | Fetch table comments from system.metadata.table\_comments.                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_plaintext.use\_plaintext                   | [optional bool](#bool)             | Use plaintext HTTP instead of HTTPS. Only enable when SSL is unsupported or the connection is otherwise secured (e.g. a VPN). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn             | [optional string](#string)         | Fully-qualified table for storing SQL test audit logs.                                                                        |

### MSSQLCloudConf

(synq.integrations.v1.MSSQLCloudConf)

Microsoft SQL Server / Azure SQL Database cloud-managed connection. SQL Server
connections are scoped to a single database; create one integration per
database.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                 | Type                                 | Description                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_host.host                             | [optional string](#string)           | Hostname or IP (Azure SQL e.g. "yourserver.database.windows.net").                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                             | [optional int32](#int32)             | Port (typically 1433).                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database                     | [optional string](#string)           | Database to connect to and ingest metadata from.                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_username.username                     | [optional string](#string)           | Login username.                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_password.password                     | [optional string](#string)           | Login password. Write-only — masked on reads.                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_trust\_cert.trust\_cert               | [optional bool](#bool)               | Skip TLS server certificate verification (not recommended for Azure SQL).                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_encrypt.encrypt                       | [optional string](#string)           | Encryption mode: "true" (default, required for Azure SQL), "false", "disable".                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs | [optional bool](#bool)               | Ingest query logs from Query Store (must be enabled on the database; Azure SQL has it on by default).                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scope.scope                           | [optional ScopeFilter](#scopefilter) | Include/exclude scope filter (by schema and table; database-level filtering does not apply since the connection targets one database). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn   | [optional string](#string)           | Fully-qualified table for storing SQL test audit logs.                                                                                 |

### SnowflakeCloudConf

(synq.integrations.v1.SnowflakeCloudConf)

Snowflake cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                                                                         | Type                                           | Description                                                                     |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user                                                                                     | [optional string](#string)                     | Snowflake username.                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.password                                                                         | [ string](#string)                             | Password. Write-only — masked on reads.                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.key\_pair                                                                        | [ SnowflakeKeyPairAuth](#snowflakekeypairauth) | Key-pair authentication.                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_account.account                                                                               | [optional string](#string)                     | Account identifier (e.g. "xy12345.us-east-1") without scheme or trailing slash. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_warehouse.warehouse                                                                           | [optional string](#string)                     | Warehouse to run queries on.                                                    |
| databases                                                                                                                                                                     | [repeated string](#string)                     | Databases to monitor and ingest metadata from.                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_role.role                                                                                     | [optional string](#string)                     | Role to use for metadata access and queries.                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_query\_logs.fetch\_query\_logs                                                         | [optional bool](#bool)                         | Ingest query logs from the ACCOUNT\_USAGE schema.                               |
| fetch\_query\_logs\_databases                                                                                                                                                 | [repeated string](#string)                     | Databases to fetch query logs from (defaults to all configured databases).      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_audit\_table\_fqn.audit\_table\_fqn                                                           | [optional string](#string)                     | Fully-qualified table for storing SQL test audit logs.                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_no\_get\_ddl.no\_get\_ddl                                                                     | [optional bool](#bool)                         | Skip GET\_DDL for table definitions (use query logs instead).                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_tasks.fetch\_tasks                                                                     | [optional bool](#bool)                         | Ingest Snowflake Tasks metadata.                                                |
| fetch\_tasks\_databases                                                                                                                                                       | [repeated string](#string)                     | Databases to retrieve tasks from (defaults to all configured databases).        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_tasks\_executions\_from\_account\_usage.fetch\_tasks\_executions\_from\_account\_usage | [optional bool](#bool)                         | Use ACCOUNT\_USAGE.TASK\_HISTORY for task execution history.                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_tasks\_executions\_duration.fetch\_tasks\_executions\_duration                         | [optional Duration](#duration)                 | Time range for fetching task execution history (minimum 5 minutes).             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fetch\_table\_lineage.fetch\_table\_lineage                                                   | [optional bool](#bool)                         | Produce table-level lineage via GET\_LINEAGE (Enterprise edition or higher).    |
| fetch\_table\_lineage\_databases                                                                                                                                              | [repeated string](#string)                     | Databases to fetch upstream lineage from (defaults to `databases`).             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_account\_usage\_db.account\_usage\_db                                                         | [optional string](#string)                     | Database where the ACCOUNT\_USAGE schema lives (defaults to "SNOWFLAKE").       |

### SnowflakeKeyPairAuth

(synq.integrations.v1.SnowflakeKeyPairAuth)

Snowflake key-pair authentication.

| Field                                                                                                                             | Type                       | Description                                                                                                                                                                                      |
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_private\_key\_secret.private\_key\_secret         | [optional string](#string) | PEM-encoded private key (PKCS#8). Write-only — masked on reads. Required when using key-pair auth.                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_public\_key.public\_key                           | [optional string](#string) | Public key corresponding to the private key. For a Coalesce Quality–managed key pair this is returned so you can register it on the Snowflake user; when you supply your own key it is optional. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_private\_key\_passphrase.private\_key\_passphrase | [optional string](#string) | Optional passphrase for an encrypted private key. Write-only — masked on reads.                                                                                                                  |

### DbtCloudConf

(synq.integrations.v1.DbtCloudConf)

dbt Cloud transformation orchestration cloud-managed connection.

Fields are optional so an update can carry only what changes (omit = leave
unchanged). Secret fields are write-only (masked on reads); omit to keep or
send a new value to rotate.

| Field                                                                                                                                   | Type                       | Description                                                                                                                                                             |
| --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_account\_id.account\_id                                 | [optional string](#string) | dbt Cloud account id (the numeric id from your dbt Cloud URL).                                                                                                          |
| job\_ids                                                                                                                                | [repeated string](#string) | dbt Cloud jobs to track, by job id. Provide the full set on every update (the list is replaced, not merged). When empty, all jobs visible to the API token are tracked. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_token.token                                             | [optional string](#string) | dbt Cloud API token (service token recommended). Write-only — masked on reads; omit to keep the stored token, send a new value to rotate it.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_project\_id.project\_id                                 | [optional string](#string) | Project id used to generate asset identifiers. Use the same id for multiple projects that should be merged.                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_api\_endpoint.api\_endpoint                             | [optional string](#string) | dbt Cloud API hostname without scheme (e.g. "cloud.getdbt.com", "emea.dbt.com"). Empty uses the multi-tenant default.                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_default\_database\_instance.default\_database\_instance | [optional string](#string) | Database instance identifier, required where database names are not globally unique (e.g. a Snowflake account).                                                         |

### EmailUser

(synq.users.v1.EmailUser)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| user\_email | [ string](#string) | none        |

### MsTeamsUser

(synq.users.v1.MsTeamsUser)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| member\_id | [ string](#string) | none        |

### SlackUser

(synq.users.v1.SlackUser)

| Field                                                                                                   | Type                       | Description                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user\_id                                                                                                | [ string](#string)         | none                                                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_verified.verified       | [optional bool](#bool)     | True when the mapping was established by the user proving ownership of the Slack account through "Sign in with Slack" (OIDC), rather than being self-asserted. Server-set only — never trusted from client input. Empty (unset/false) means the mapping is self-asserted. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_team\_id.team\_id       | [optional string](#string) | Slack workspace/team the user\_id belongs to. Set when the mapping was established via sign-in (a Slack user\_id is only unique within a team). Empty for self-asserted mappings.                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_linked\_via.linked\_via | [optional string](#string) | How the mapping was established: "manual" (self-asserted selection) or "slack\_oauth" (verified sign-in). Empty is treated as "manual".                                                                                                                                   |

### User

(synq.users.v1.User)

| Field       | Type                       | Description                                                                                                                                                                                                               |
| ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id          | [ string](#string)         | none                                                                                                                                                                                                                      |
| first\_name | [ string](#string)         | none                                                                                                                                                                                                                      |
| last\_name  | [ string](#string)         | none                                                                                                                                                                                                                      |
| email       | [ string](#string)         | none                                                                                                                                                                                                                      |
| identities  | [repeated string](#string) | Canonical identity strings for this user. Includes "synq:\<user\_id>" and all linked aliases (email, slack, msteams). Can be passed to ListIssues(interacted\_by\_identities) to filter issues this user interacted with. |

### UserAlias

(synq.users.v1.UserAlias)

| Field                                                                                        | Type                         | Description |
| -------------------------------------------------------------------------------------------- | ---------------------------- | ----------- |
| user\_id                                                                                     | [ string](#string)           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.slack     | [ SlackUser](#slackuser)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.email     | [ EmailUser](#emailuser)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.ms\_teams | [ MsTeamsUser](#msteamsuser) | none        |

### BatchGetUsersRequest

(synq.users.v1.BatchGetUsersRequest)

| Field     | Type                       | Description |
| --------- | -------------------------- | ----------- |
| user\_ids | [repeated string](#string) | none        |

### BatchGetUsersResponse

(synq.users.v1.BatchGetUsersResponse)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| users | [repeated User](#user) | none        |

### DeleteUserAliasesRequest

(synq.users.v1.DeleteUserAliasesRequest)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| aliases | [repeated UserAlias](#useralias) | none        |

### DeleteUserAliasesResponse

(synq.users.v1.DeleteUserAliasesResponse)

### GetByAliasRequest

(synq.users.v1.GetByAliasRequest)

| Field | Type                     | Description |
| ----- | ------------------------ | ----------- |
| alias | [ UserAlias](#useralias) | none        |

### GetByAliasResponse

(synq.users.v1.GetByAliasResponse)

| Field | Type           | Description |
| ----- | -------------- | ----------- |
| user  | [ User](#user) | none        |

### GetByEmailRequest

(synq.users.v1.GetByEmailRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| email | [ string](#string) | none        |

### GetByEmailResponse

(synq.users.v1.GetByEmailResponse)

| Field | Type           | Description |
| ----- | -------------- | ----------- |
| user  | [ User](#user) | none        |

### GetUserAliasesRequest

(synq.users.v1.GetUserAliasesRequest)

| Field    | Type               | Description |
| -------- | ------------------ | ----------- |
| user\_id | [ string](#string) | none        |

### GetUserAliasesResponse

(synq.users.v1.GetUserAliasesResponse)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| aliases | [repeated UserAlias](#useralias) | none        |

### GetUserIdentitiesRequest

(synq.users.v1.GetUserIdentitiesRequest)

| Field                                                                                             | Type                       | Description                                                                           |
| ------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user\_id.user\_id | [optional string](#string) | User ID to resolve identities for. If omitted, uses the currently authenticated user. |

### GetUserIdentitiesResponse

(synq.users.v1.GetUserIdentitiesResponse)

| Field      | Type                       | Description                                                                                         |
| ---------- | -------------------------- | --------------------------------------------------------------------------------------------------- |
| identities | [repeated string](#string) | Canonical identity strings for the user. Always includes "synq:\<user\_id>" and all linked aliases. |

### ListUsersRequest

(synq.users.v1.ListUsersRequest)

### ListUsersResponse

(synq.users.v1.ListUsersResponse)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| users | [repeated User](#user) | none        |

### UpsertUserAliasesRequest

(synq.users.v1.UpsertUserAliasesRequest)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| aliases | [repeated UserAlias](#useralias) | none        |

### UpsertUserAliasesResponse

(synq.users.v1.UpsertUserAliasesResponse)

### GenerateQueryRequest

(synq.queries.v1.GenerateQueryRequest)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| description | [ string](#string) | none        |

### GenerateQueryResponse

(synq.queries.v1.GenerateQueryResponse)

| Field                                                                                                                   | Type                       | Description                                                                                                                            |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_query.query                             | [optional Query](#query)   | The public Query proto. Absent when unsupported.                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_resolver\_ql.resolver\_ql               | [optional string](#string) | The generated ResolverQL query string. Empty when unsupported.                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_unsupported\_reason.unsupported\_reason | [optional string](#string) | When the LLM determines the request cannot be expressed as a query, this field contains the reason(s). The other fields will be empty. |

### IdentifierList

(synq.queries.v1.IdentifierList)

Resolves to entities matching any of the given identifiers.

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### InDataPlatform

(synq.queries.v1.InDataPlatform)

Resolves to all entities that belong to the given data platform.

| Field      | Type                                               | Description |
| ---------- | -------------------------------------------------- | ----------- |
| identifier | [ DataPlatformIdentifier](#dataplatformidentifier) | none        |

### InDataproduct

(synq.queries.v1.InDataproduct)

Resolves to all the assets that belong to the given data product.

| Field      | Type                                             | Description |
| ---------- | ------------------------------------------------ | ----------- |
| identifier | [ DataproductIdentifier](#dataproductidentifier) | none        |

### InDomain

(synq.queries.v1.InDomain)

Resolves to all entities in the given data domain.

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |

### Unsupported

(synq.queries.v1.Unsupported)

Collects all the parts of the query that are currently unsupported in translation.
These represent an internal structure that are not yet completely available on the API.

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| query\_json | [ string](#string) | none        |

### WithAnnotation

(synq.queries.v1.WithAnnotation)

Resolves to all entities that contain the annotation with at least one of the provided accepted values.
In case of no given accepted values, all entities that carry the given annotation are returned.

| Field                                                                                                           | Type                       | Description |
| --------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| name                                                                                                            | [ string](#string)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_accepted\_value.accepted\_value | [optional string](#string) | none        |
| accepted\_values                                                                                                | [repeated string](#string) | none        |

### WithDataPlatformType

(synq.queries.v1.WithDataPlatformType)

| Field | Type                                           | Description |
| ----- | ---------------------------------------------- | ----------- |
| types | [repeated DataPlatformType](#dataplatformtype) | none        |

### WithDefaultVisibleTypes

(synq.queries.v1.WithDefaultVisibleTypes)

Resolves to every asset of a type the catalog shows by default — the
"everything" starting set.

Use it as the base of a subtraction, e.g. an EXCEPT query whose first part is
WithDefaultVisibleTypes and whose second part is what to leave out. On its own
it selects the whole catalog, so it is rarely useful as the only part of a
query.

"Default visible" excludes the supporting asset types the catalog hides unless
asked for (columns, tests, and similar), so this is not literally every entity.

### WithNameSearch

(synq.queries.v1.WithNameSearch)

Resolves to all entities matching the given name search.

| Field         | Type               | Description |
| ------------- | ------------------ | ----------- |
| search\_query | [ string](#string) | none        |

### WithType

(synq.queries.v1.WithType)

Resolves to all the entities that have the provided type.

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| type  | [ Type](#type)         | none        |
| types | [repeated Type](#type) | none        |

### WithType.Type

(synq.queries.v1.WithType.Type)

| Field                                                                                              | Type                       | Description                                                          |
| -------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) entity\_type.default | [ EntityType](#entitytype) | Default Coalesce Quality types                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) entity\_type.custom  | [ int32](#int32)           | Custom types as defined through synq.entities.custom.v1.TypesService |

### ResolveQueryRequest

(synq.queries.v1.ResolveQueryRequest)

| Field                                                                                                | Type                       | Description                                                                                                                                                             |
| ---------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) selection.resolver\_ql | [ string](#string)         | ResolverQL expression to compile and evaluate.                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) selection.query        | [ Query](#query)           | Structured query to evaluate.                                                                                                                                           |
| pagination                                                                                           | [ Pagination](#pagination) | Pagination over the matched entity set. `page_size` defaults per API when unset; pass the previous response's `page_info.last_id` as the cursor to fetch the next page. |

### ResolveQueryResponse

(synq.queries.v1.ResolveQueryResponse)

| Field                  | Type                               | Description                                                                                                              |
| ---------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| entity\_ids            | [repeated Identifier](#identifier) | Opaque identifiers of the matched entities, one page worth. Round-trip each id verbatim to the rest of the entities API. |
| page\_info             | [ PageInfo](#pageinfo)             | Pagination cursor for the next page.                                                                                     |
| rendered\_resolver\_ql | [ string](#string)                 | The resolved selection rendered as canonical ResolverQL. Empty when the selection has no ResolverQL representation.      |

### TranslateResolverQlRequest

(synq.queries.v1.TranslateResolverQlRequest)

| Field        | Type               | Description                                                         |
| ------------ | ------------------ | ------------------------------------------------------------------- |
| resolver\_ql | [ string](#string) | ResolverQL expression to compile, for example `with_type("TABLE")`. |

### TranslateResolverQlResponse

(synq.queries.v1.TranslateResolverQlResponse)

| Field                  | Type               | Description                                                                                                                                                                                 |
| ---------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query                  | [ Query](#query)   | The compiled structured query. Pass it verbatim to any public API that accepts a `synq.queries.v1.Query` (for example a folder browse `filter`), or to `ResolveQuery.query` to evaluate it. |
| rendered\_resolver\_ql | [ string](#string) | The compiled query rendered back to canonical ResolverQL. Empty when the query has no ResolverQL representation (legacy / deprecated operands).                                             |

### FolderOf

(synq.queries.v1.FolderOf)

Resolves the folder(s) containing a set of assets, for use as the folder
source of `InFolder` — i.e. "everything in the same folder as these assets".

Name the assets either the simple way (`entity_ids`, opaque asset ids) or with
a full `input_query` when they need to be computed (e.g. by name or type). Set
exactly one.

| Field                   | Type                       | Description                                                                                                                                                                                   |
| ----------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity\_ids             | [repeated string](#string) | Simplified source: the assets named directly by opaque entity id. Use this for the common "same folder as these specific assets" case; equivalent to an input\_query that lists the same ids. |
| input\_query            | [ Query](#query)           | General source: resolve the folder(s) of whatever assets this query matches (e.g. a name or type filter). Use when the assets can't be listed up front.                                       |
| include\_all\_ancestors | [ bool](#bool)             | When false (default): only each asset's immediate parent folder. When true: every ancestor folder up the hierarchy, so `InFolder` then also matches assets in those ancestor folders.         |

### IdentitiesOf

(synq.queries.v1.IdentitiesOf)

Resolves to the identities of whatever the inner query matches.

The same real-world table is often described by several assets — a
transformation model and the warehouse table it materialises into are one
asset with several representations. Those representations form an identity
group. IdentitiesOf takes the assets matched by `input_query` and returns
their identity groups, so a selection made in one platform's terms also
covers the equivalent assets in every other platform.

The typical use is subtraction: "this warehouse database, except whatever my
transformation tool already owns" is an EXCEPT whose removal clause is an
IdentitiesOf over the transformation models. Without it the two selections
overlap on every materialised table.

| Field            | Type                   | Description                                                                                                                                                                                   |
| ---------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| input\_query     | [ Query](#query)       | The assets whose identities to resolve. Required.                                                                                                                                             |
| limit\_to\_types | [repeated Type](#type) | Restrict the result to these types. When empty, only the other members of each identity group are returned. When set, an input asset that already has one of these types is returned as well. |

### InFolder

(synq.queries.v1.InFolder)

Resolves to entities located in one or more folders.

Give the folders exactly one way (they are mutually exclusive; if more than
one is set, `folders` wins, then `folder_of`, then `path`):

* `folders`   — the preferred, human-authorable form: name each folder by
  its root entity plus its ordered folder-name segments. No
  opaque ids required.
* `folder_of` — "the same folder(s) as these assets": resolves the folder(s)
  containing the assets matched by an inner query, then matches
  everything in them. Lets you select siblings without naming a
  folder.
* `path`      — legacy opaque folder identifiers. Kept for back-compat;
  prefer `folders`. Discover a folder's structured address
  with the folders navigation API instead of hand-writing an id.

`deep` controls recursion (see its field comment).

InFolder lives here rather than in query\_parts.proto because FolderOf nests a
full Query, which would make query\_parts.proto import query.proto and form a
proto file import cycle.

| Field                                                                                     | Type                             | Description                                                                                                                                                                                                                                                   |
| ----------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| path                                                                                      | [repeated string](#string)       | Opaque folder identifiers (a folder's own entity id). `folders` is the structured, human-authorable alternative. When `path` is the only source set and `deep` is unset, `deep` defaults to true for back-compat with queries authored before `deep` existed. |
| folders                                                                                   | [repeated FolderRef](#folderref) | Structured, human-authorable folder addresses (root entity + folder-name segments). Take a `FolderRef` verbatim from a folder returned by the folders navigation API, or build one from names you can see in the catalog.                                     |
| folder\_of                                                                                | [ FolderOf](#folderof)           | Resolve the folders to search from a set of assets, rather than naming them. Selects everything in the folder(s) that contain those assets.                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deep.deep | [optional bool](#bool)           | When false or unset, matches only the direct members of the folder(s). When true, matches the entire recursive subtree (members of subfolders too).                                                                                                           |

Exception: when only the legacy `path` source is set and `deep` is unset, it defaults to true (preserves the behaviour of queries authored before this flag existed). With `folders` or `folder_of`, unset means false (shallow). |

### Query

(synq.queries.v1.Query)

Query is a structured query that can be used to find entities in the system.
It consists of multiple parts, each representing a different filter or sub-query.
The parts are combined using the operand to form the final result:

* AND (default): returns only entities matching ALL parts (intersection).
* OR: returns entities matching ANY part (union).
* EXCEPT: requires exactly 2 parts — returns entities from part\[0] that are NOT in part\[1].
* UPSTREAM: returns entities that are upstream (dependencies) of the entities matched by the parts.
* DOWNSTREAM: returns entities that are downstream (dependents) of the entities matched by the parts.

Queries can be nested by using a Query as a QueryPart, enabling complex compositions
like "upstream of all Snowflake tables".

| Field   | Type                             | Description                       |
| ------- | -------------------------------- | --------------------------------- |
| parts   | [repeated QueryPart](#querypart) | none                              |
| operand | [ QueryOperand](#queryoperand)   | Defaults to AND if not specified. |

### Query.QueryPart

(synq.queries.v1.Query.QueryPart)

| Field                                                                                                            | Type                                                 | Description                                                                                                                                                                        |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier\_list              | [ IdentifierList](#identifierlist)                   | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_name\_search            | [ WithNameSearch](#withnamesearch)                   | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_type                    | [ WithType](#withtype)                               | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_annotation              | [ WithAnnotation](#withannotation)                   | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_dataproduct               | [ InDataproduct](#indataproduct)                     | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_data\_platform            | [ InDataPlatform](#indataplatform)                   | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_data\_platform\_type    | [ WithDataPlatformType](#withdataplatformtype)       | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_folder                    | [ InFolder](#infolder)                               | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_domain                    | [ InDomain](#indomain)                               | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identities\_of                | [ IdentitiesOf](#identitiesof)                       | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_default\_visible\_types | [ WithDefaultVisibleTypes](#withdefaultvisibletypes) | none                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query                         | [ Query](#query)                                     | Nested sub-query, enabling recursive composition of filters and operands.                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.unsupported                   | [ Unsupported](#unsupported)                         | Read-only. Represents internal query types that cannot be expressed in the public API. Do not construct these directly — they are returned when translating from internal queries. |

### BatchGetLatestEntityMetricsRequest

(synq.monitors.predictions.v1.BatchGetLatestEntityMetricsRequest)

| Field       | Type                       | Description                                                                          |
| ----------- | -------------------------- | ------------------------------------------------------------------------------------ |
| synq\_paths | [repeated string](#string) | Entity synq\_paths to look up. Duplicates are allowed and de-duplicated server-side. |

### BatchGetLatestEntityMetricsResponse

(synq.monitors.predictions.v1.BatchGetLatestEntityMetricsResponse)

| Field                  | Type                                                | Description                                                                                                                                                              |
| ---------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| latest\_by\_synq\_path | [map LatestBySynqPathEntry](#latestbysynqpathentry) | Latest observed data point keyed by the requested synq\_path. Entities with no recent sample are omitted — callers should treat a missing key as "no metrics available". |

### BatchGetLatestEntityMetricsResponse.LatestBySynqPathEntry

(synq.monitors.predictions.v1.BatchGetLatestEntityMetricsResponse.LatestBySynqPathEntry)

| Field | Type                                             | Description |
| ----- | ------------------------------------------------ | ----------- |
| key   | [ string](#string)                               | none        |
| value | [ EntityMetricDataPoint](#entitymetricdatapoint) | none        |

### GetEntityMetricsRequest

(synq.monitors.predictions.v1.GetEntityMetricsRequest)

| Field                                                                                     | Type                             | Description                                                                  |
| ----------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------- |
| synq\_path                                                                                | [ string](#string)               | Entity synq\_path (table, view, or dbt model).                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_from.from | [optional Timestamp](#timestamp) | Start of time range. Defaults to 30 days before `to`. Max lookback: 30 days. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_to.to     | [optional Timestamp](#timestamp) | End of time range. Defaults to now.                                          |

### GetEntityMetricsResponse

(synq.monitors.predictions.v1.GetEntityMetricsResponse)

| Field        | Type                                                     | Description |
| ------------ | -------------------------------------------------------- | ----------- |
| data\_points | [repeated EntityMetricDataPoint](#entitymetricdatapoint) | none        |

### GetMonitorPredictionsRequest

(synq.monitors.predictions.v1.GetMonitorPredictionsRequest)

| Field                                                                                                             | Type                             | Description                                                                  |
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------- |
| synq\_path                                                                                                        | [ string](#string)               | Monitor synq\_path.                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_metrics\_version.metrics\_version | [optional int32](#int32)         | Metrics version. Defaults to the monitor's current version.                  |
| segments                                                                                                          | [repeated string](#string)       | Segment filters. If empty, all segments are returned.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_from.from                         | [optional Timestamp](#timestamp) | Start of time range. Defaults to 30 days before `to`. Max lookback: 30 days. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_to.to                             | [optional Timestamp](#timestamp) | End of time range. Defaults to now.                                          |

### GetMonitorPredictionsResponse

(synq.monitors.predictions.v1.GetMonitorPredictionsResponse)

| Field       | Type                                             | Description |
| ----------- | ------------------------------------------------ | ----------- |
| predictions | [repeated MonitorPrediction](#monitorprediction) | none        |

### EntityMetricDataPoint

(synq.monitors.predictions.v1.EntityMetricDataPoint)

Single observation of table-level metrics collected from the data warehouse.

| Field                                                                                                             | Type                               | Description                                               |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------- |
| synq\_path                                                                                                        | [ string](#string)                 | Entity synq\_path.                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_num\_rows.num\_rows               | [optional Int64Value](#int64value) | Row count.                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_loaded\_at.last\_loaded\_at | [optional Timestamp](#timestamp)   | Last loaded time as reported by the data warehouse.       |
| scheduled\_at                                                                                                     | [ Timestamp](#timestamp)           | When the metric was scheduled for collection.             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_snapshotted\_at.snapshotted\_at   | [optional Timestamp](#timestamp)   | Data warehouse snapshot time.                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_size\_bytes.size\_bytes           | [optional Int64Value](#int64value) | Physical size in bytes as reported by the data warehouse. |

### MonitorPrediction

(synq.monitors.predictions.v1.MonitorPrediction)

Single prediction data point from the anomaly detection model.

| Field                                                                                                     | Type                                 | Description                                                     |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------ | --------------------------------------------------------------- |
| field                                                                                                     | [ string](#string)                   | Monitored field.                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segment.segment           | [optional string](#string)           | Segment.                                                        |
| metric\_id                                                                                                | [ string](#string)                   | Metric identifier.                                              |
| value                                                                                                     | [ double](#double)                   | Observed value.                                                 |
| expected                                                                                                  | [ double](#double)                   | Model's expected value.                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_stddev.stddev             | [optional double](#double)           | Prediction standard deviation.                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_upper\_bound.upper\_bound | [optional DoubleValue](#doublevalue) | Confidence band upper bound.                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_lower\_bound.lower\_bound | [optional DoubleValue](#doublevalue) | Confidence band lower bound.                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pattern.pattern           | [optional string](#string)           | Anomaly pattern (e.g., "spike", "drop").                        |
| scheduled\_at                                                                                             | [ Timestamp](#timestamp)             | When the prediction was scheduled.                              |
| is\_corrected                                                                                             | [ bool](#bool)                       | Whether a user has marked this prediction as expected behavior. |

### MonitorInfoRequest

(synq.monitors.info.v1.MonitorInfoRequest)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| id    | [ Identifier](#identifier) | none        |

### MonitorInfoResponse

(synq.monitors.info.v1.MonitorInfoResponse)

| Field                                                                                                       | Type                                 | Description |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_monitor\_info.monitor\_info | [optional MonitorInfo](#monitorinfo) | none        |

### ColumnSource

(synq.monitors.info.v1.ColumnSource)

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| column | [ string](#string) | none        |

### Condition

(synq.monitors.info.v1.Condition)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| expression | [ string](#string) | none        |

### CountRows

(synq.monitors.info.v1.CountRows)

### DatabaseFqn

(synq.monitors.info.v1.DatabaseFqn)

| Field                                                                                                         | Type                       | Description                                       |
| ------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_instance.instance             | [optional string](#string) | Usually it is the hostname of the server          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database\_name.database\_name | [optional string](#string) | Database name for databases with multi-db support |
| schema\_name                                                                                                  | [ string](#string)         | One level                                         |
| object\_name                                                                                                  | [ string](#string)         | Name of the table or view                         |

### ExpressionSource

(synq.monitors.info.v1.ExpressionSource)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| expression | [ string](#string) | none        |

### MetadataSource

(synq.monitors.info.v1.MetadataSource)

### Metric

(synq.monitors.info.v1.Metric)

| Field                                                                                                             | Type                                                         | Description                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| metric\_id                                                                                                        | [ string](#string)                                           | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.freshness              | [ MonitorFreshness](#monitorfreshness)                       | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.volume                 | [ MonitorVolume](#monitorvolume)                             | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.value                  | [ MonitorValue](#monitorvalue)                               | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.failed\_rows           | [ MonitorFailedRows](#monitorfailedrows)                     | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.field\_stats           | [ MonitorFieldStats](#monitorfieldstats)                     | A statistical profile of a single column (for example null counts, uniqueness, minimum/maximum, mean/standard deviation or byte size). The specific statistic is identified by metric\_id; this variant carries the column the statistic is computed on. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) metric\_type.category\_distribution | [ MonitorCategoryDistribution](#monitorcategorydistribution) | A shift in the distribution of the distinct values of a categorical column, scored against a learned baseline. This variant carries the column whose value distribution is monitored.                                                                    |

### MonitorCategoryDistribution

(synq.monitors.info.v1.MonitorCategoryDistribution)

| Field  | Type               | Description                                                           |
| ------ | ------------------ | --------------------------------------------------------------------- |
| column | [ string](#string) | Name of the categorical column whose value distribution is monitored. |

### MonitorFailedRows

(synq.monitors.info.v1.MonitorFailedRows)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| sql   | [ string](#string) | none        |

### MonitorFieldStats

(synq.monitors.info.v1.MonitorFieldStats)

| Field  | Type               | Description                                                                                                                                                                                 |
| ------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| column | [ string](#string) | Name of the column whose statistical profile is monitored, as it appears in the monitored object. Empty when the statistic is computed at the table level rather than on a specific column. |

### MonitorFreshness

(synq.monitors.info.v1.MonitorFreshness)

| Field                                                                                                           | Type                               | Description |
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) freshness\_source.expression      | [ string](#string)                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) freshness\_source.table\_metadata | [ MetadataSource](#metadatasource) | none        |

### MonitorInfo

(synq.monitors.info.v1.MonitorInfo)

| Field                                                                                                     | Type                                     | Description                                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                        | [ MonitorIdentifier](#monitoridentifier) | Identifier of the monitor                                                                                                                                                                                                                                |
| monitor\_id                                                                                               | [ Identifier](#identifier)               | Identifier of the monitor                                                                                                                                                                                                                                |
| monitor\_synq\_path                                                                                       | [ string](#string)                       | Coalesce Quality Path to the entity.                                                                                                                                                                                                                     |
| name                                                                                                      | [ string](#string)                       | Name of the monitor                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segmentation.segmentation | [optional Segmentation](#segmentation)   | Information how this monitor segments the data                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_partitioning.partitioning | [optional Partitioning](#partitioning)   | Information how this monitor partitions the data                                                                                                                                                                                                         |
| conditions                                                                                                | [repeated Condition](#condition)         | Optional conditions which are applied to the monitor metrics retrieval                                                                                                                                                                                   |
| metrics                                                                                                   | [repeated Metric](#metric)               | Metrics which this monitor monitors                                                                                                                                                                                                                      |
| monitored                                                                                                 | [repeated Monitored](#monitored)         | Entity which is monitored                                                                                                                                                                                                                                |
| managed\_by\_rule                                                                                         | [ bool](#bool)                           | Whether this monitor is governed by a deployment rule. When true, the monitor's configuration is managed centrally by a rule and manual edits may be overwritten the next time the rule is applied. False for monitors that are configured individually. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description   | [optional string](#string)               | Human-provided description of what this monitor checks. Unset for monitor types that don't carry one.                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sql\_source.sql\_source   | [optional string](#string)               | SQL query used as the data source instead of querying the monitored table or view directly, when the monitor is configured with one.                                                                                                                     |

### MonitorValue

(synq.monitors.info.v1.MonitorValue)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| expression | [ string](#string) | none        |

### MonitorVolume

(synq.monitors.info.v1.MonitorVolume)

| Field                                                                                                        | Type                               | Description |
| ------------------------------------------------------------------------------------------------------------ | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) volume\_source.expression      | [ string](#string)                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) volume\_source.count\_rows     | [ CountRows](#countrows)           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) volume\_source.table\_metadata | [ MetadataSource](#metadatasource) | none        |

### Monitored

(synq.monitors.info.v1.Monitored)

| Field                                                                                                           | Type                                 | Description                                                                 |
| --------------------------------------------------------------------------------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------- |
| id                                                                                                              | [ Identifier](#identifier)           | Identifier of the monitored entity.                                         |
| synq\_path                                                                                                      | [ string](#string)                   | Coalesce Quality Path to the monitored entity.                              |
| name                                                                                                            | [ string](#string)                   | Name of the monitored entity                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description         | [optional string](#string)           | Description of the monitored entity                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id | [optional string](#string)           | Id of the integration which provided information about monitored entity.    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_object\_fqn.object\_fqn         | [optional DatabaseFqn](#databasefqn) | Coordinates to the physical table/view which is monitored (when applicable) |
| sql\_dialect                                                                                                    | [ SqlDialect](#sqldialect)           | SQL dialect used for monitoring                                             |

### Partitioning

(synq.monitors.info.v1.Partitioning)

| Field  | Type                   | Description |
| ------ | ---------------------- | ----------- |
| column | [ string](#string)     | none        |
| period | [ Duration](#duration) | none        |

### Segmentation

(synq.monitors.info.v1.Segmentation)

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| column | [ string](#string) | none        |

### HistoryRequest

(synq.monitors.history.v1.HistoryRequest)

| Field            | Type                       | Description                                    |
| ---------------- | -------------------------- | ---------------------------------------------- |
| monitor\_path    | [ string](#string)         | Experimental: Will be replaced with identifier |
| metrics\_version | [ int32](#int32)           | none                                           |
| segments         | [repeated string](#string) | none                                           |
| from             | [ Timestamp](#timestamp)   | none                                           |
| to               | [ Timestamp](#timestamp)   | none                                           |

### HistoryResponse

(synq.monitors.history.v1.HistoryResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| predictions | [repeated Prediction](#prediction) | none        |

### Prediction

(synq.monitors.history.v1.Prediction)

| Field | Type                         | Description        |
| ----- | ---------------------------- | ------------------ |
| f     | [ string](#string)           | Field              |
| s     | [ string](#string)           | Segment            |
| m     | [ string](#string)           | Metric             |
| v     | [ double](#double)           | Value              |
| vu    | [ DoubleValue](#doublevalue) | Upper bound        |
| vl    | [ DoubleValue](#doublevalue) | Lower bound        |
| p     | [ string](#string)           | Pattern            |
| e     | [ double](#double)           | Expected value     |
| st    | [ double](#double)           | Standard deviation |
| t     | [ Timestamp](#timestamp)     | Timestamp          |

### BatchDeleteDeploymentRulesRequest

(synq.monitors.automated\_monitors.v1.BatchDeleteDeploymentRulesRequest)

| Field | Type                       | Description                           |
| ----- | -------------------------- | ------------------------------------- |
| ids   | [repeated string](#string) | IDs of the DeploymentRules to delete. |

### BatchDeleteDeploymentRulesResponse

(synq.monitors.automated\_monitors.v1.BatchDeleteDeploymentRulesResponse)

### BatchDeployDeploymentRulesRequest

(synq.monitors.automated\_monitors.v1.BatchDeployDeploymentRulesRequest)

| Field             | Type                                                       | Description                        |
| ----------------- | ---------------------------------------------------------- | ---------------------------------- |
| deployment\_rules | [repeated MonitorsDeploymentRule](#monitorsdeploymentrule) | List of DeploymentRules to deploy. |

### BatchDeployDeploymentRulesResponse

(synq.monitors.automated\_monitors.v1.BatchDeployDeploymentRulesResponse)

| Field         | Type                                 | Description                                                                     |
| ------------- | ------------------------------------ | ------------------------------------------------------------------------------- |
| deployed\_ids | [repeated string](#string)           | IDs for which DeploymentRules were deployed without error.                      |
| errors        | [repeated DeployError](#deployerror) | Errors raised while deploying. This list will be empty if there were no errors. |

### BatchDeployDeploymentRulesResponse.DeployError

(synq.monitors.automated\_monitors.v1.BatchDeployDeploymentRulesResponse.DeployError)

Details of errors encountered during the deploy operation.

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| id     | [ string](#string) | none        |
| reason | [ string](#string) | none        |

### BatchGetDeploymentRulesRequest

(synq.monitors.automated\_monitors.v1.BatchGetDeploymentRulesRequest)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### BatchGetDeploymentRulesResponse

(synq.monitors.automated\_monitors.v1.BatchGetDeploymentRulesResponse)

| Field             | Type                                              | Description |
| ----------------- | ------------------------------------------------- | ----------- |
| deployment\_rules | [map DeploymentRulesEntry](#deploymentrulesentry) | none        |

### BatchGetDeploymentRulesResponse.DeploymentRulesEntry

(synq.monitors.automated\_monitors.v1.BatchGetDeploymentRulesResponse.DeploymentRulesEntry)

| Field | Type                                                       | Description |
| ----- | ---------------------------------------------------------- | ----------- |
| key   | [ string](#string)                                         | none        |
| value | [ MonitorsDeploymentRuleView](#monitorsdeploymentruleview) | none        |

### BatchUpdateDeploymentRuleTitleRequest

(synq.monitors.automated\_monitors.v1.BatchUpdateDeploymentRuleTitleRequest)

| Field             | Type                                                                           | Description |
| ----------------- | ------------------------------------------------------------------------------ | ----------- |
| deployment\_rules | [repeated UpdateDeploymentRuleTitleRequest](#updatedeploymentruletitlerequest) | none        |

### BatchUpdateDeploymentRuleTitleResponse

(synq.monitors.automated\_monitors.v1.BatchUpdateDeploymentRuleTitleResponse)

### BatchUpsertDeploymentRulesRequest

(synq.monitors.automated\_monitors.v1.BatchUpsertDeploymentRulesRequest)

| Field             | Type                                                       | Description                        |
| ----------------- | ---------------------------------------------------------- | ---------------------------------- |
| deployment\_rules | [repeated MonitorsDeploymentRule](#monitorsdeploymentrule) | List of DeploymentRules to upsert. |

### BatchUpsertDeploymentRulesResponse

(synq.monitors.automated\_monitors.v1.BatchUpsertDeploymentRulesResponse)

| Field        | Type                                 | Description                                                                  |
| ------------ | ------------------------------------ | ---------------------------------------------------------------------------- |
| created\_ids | [repeated string](#string)           | IDs for which DeploymentRules were created without error.                    |
| updated\_ids | [repeated string](#string)           | IDs for which DeploymentRules were updated without error.                    |
| errors       | [repeated UpsertError](#upserterror) | Errors raised while upsert. This list will be empty if there were no errors. |

### BatchUpsertDeploymentRulesResponse.UpsertError

(synq.monitors.automated\_monitors.v1.BatchUpsertDeploymentRulesResponse.UpsertError)

Details of errors encountered during the upsert operation.

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| id     | [ string](#string) | none        |
| reason | [ string](#string) | none        |

### ConfigsFilter

(synq.monitors.automated\_monitors.v1.ConfigsFilter)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### DeleteDeploymentRuleRequest

(synq.monitors.automated\_monitors.v1.DeleteDeploymentRuleRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| id    | [ string](#string) | none        |

### DeleteDeploymentRuleResponse

(synq.monitors.automated\_monitors.v1.DeleteDeploymentRuleResponse)

### DeployDeploymentRuleRequest

(synq.monitors.automated\_monitors.v1.DeployDeploymentRuleRequest)

| Field            | Type                                               | Description |
| ---------------- | -------------------------------------------------- | ----------- |
| deployment\_rule | [ MonitorsDeploymentRule](#monitorsdeploymentrule) | none        |

### DeployDeploymentRuleResponse

(synq.monitors.automated\_monitors.v1.DeployDeploymentRuleResponse)

### GetDeployDeleteOverviewRequest

(synq.monitors.automated\_monitors.v1.GetDeployDeleteOverviewRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| id    | [ string](#string) | none        |

### GetDeployDeleteOverviewResponse

(synq.monitors.automated\_monitors.v1.GetDeployDeleteOverviewResponse)

| Field    | Type                                                       | Description |
| -------- | ---------------------------------------------------------- | ----------- |
| overview | [ MonitorsDeploymentOverview](#monitorsdeploymentoverview) | none        |

### GetDeployOverviewRequest

(synq.monitors.automated\_monitors.v1.GetDeployOverviewRequest)

| Field            | Type                                               | Description |
| ---------------- | -------------------------------------------------- | ----------- |
| deployment\_rule | [ MonitorsDeploymentRule](#monitorsdeploymentrule) | none        |

### GetDeployOverviewResponse

(synq.monitors.automated\_monitors.v1.GetDeployOverviewResponse)

| Field    | Type                                                       | Description |
| -------- | ---------------------------------------------------------- | ----------- |
| overview | [ MonitorsDeploymentOverview](#monitorsdeploymentoverview) | none        |

### ListDeploymentRulesForAssetRequest

(synq.monitors.automated\_monitors.v1.ListDeploymentRulesForAssetRequest)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| asset\_path | [ string](#string) | none        |

### ListDeploymentRulesForAssetResponse

(synq.monitors.automated\_monitors.v1.ListDeploymentRulesForAssetResponse)

| Field             | Type                                                               | Description |
| ----------------- | ------------------------------------------------------------------ | ----------- |
| deployment\_rules | [repeated MonitorsDeploymentRuleView](#monitorsdeploymentruleview) | none        |

### ListDeploymentRulesRequest

(synq.monitors.automated\_monitors.v1.ListDeploymentRulesRequest)

| Field                                                                                                 | Type                                               | Description                                                                                                                                                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sources                                                                                               | [repeated Source](#source)                         | none                                                                                                                                                                                                                                                                                                                                   |
| config\_ids                                                                                           | [repeated string](#string)                         | none                                                                                                                                                                                                                                                                                                                                   |
| configs\_filter                                                                                       | [ ConfigsFilter](#configsfilter)                   | Filter SqlTests by config IDs. Pass `ConfigsFilter{ids: ["config1", "config2"]}` to filter by specific configs. If nil, no config\_id filtering is applied. If empty, the one with NULL config\_id will be excluded.                                                                                                                   |
| rule\_ids                                                                                             | [repeated string](#string)                         | none                                                                                                                                                                                                                                                                                                                                   |
| rule\_types                                                                                           | [repeated DeploymentRuleType](#deploymentruletype) | Filter by rule type. When empty, rules of every type are returned. When set, only rules whose type is listed are returned (e.g. pass \[DEPLOYMENT\_RULE\_TYPE\_QUERY, DEPLOYMENT\_RULE\_TYPE\_PRODUCT] to exclude single-path rules). The filter is applied server-side before paging, so every page reflects only the selected types. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination)                 | Pagination. An unset/zero page\_size applies the server default; the server never returns all rules in one response. Pass page\_info.last\_id from the previous response as the cursor to fetch the next page.                                                                                                                         |

### ListDeploymentRulesResponse

(synq.monitors.automated\_monitors.v1.ListDeploymentRulesResponse)

| Field             | Type                                                               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ----------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| deployment\_rules | [repeated MonitorsDeploymentRuleView](#monitorsdeploymentruleview) | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| page\_info        | [ PageInfo](#pageinfo)                                             | Paging information for this response. Always populated. This response carries at most one bounded page of rules, never the full set. The cursor is the paging contract: to retrieve every rule, repeat the request passing page\_info.last\_id as pagination.cursor until last\_id comes back empty. page\_info.count is the number of rules in this page. page\_info.total\_count is a best-effort total for the same filter, but it is deprecated — do not drive paging off it; loop on last\_id instead. |

### UpdateDeploymentRuleTitleRequest

(synq.monitors.automated\_monitors.v1.UpdateDeploymentRuleTitleRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| id    | [ string](#string) | none        |
| title | [ string](#string) | none        |

### UpsertDeploymentRuleRequest

(synq.monitors.automated\_monitors.v1.UpsertDeploymentRuleRequest)

| Field            | Type                                               | Description |
| ---------------- | -------------------------------------------------- | ----------- |
| deployment\_rule | [ MonitorsDeploymentRule](#monitorsdeploymentrule) | none        |

### UpsertDeploymentRuleResponse

(synq.monitors.automated\_monitors.v1.UpsertDeploymentRuleResponse)

### AutomatedMonitorSettings

(synq.monitors.automated\_monitors.v1.AutomatedMonitorSettings)

| Field           | Type                                   | Description                       |
| --------------- | -------------------------------------- | --------------------------------- |
| severity        | [ Severity](#severity)                 | none                              |
| sensitivity     | [ Sensitivity](#sensitivity)           | LEGACY - global sensitivity       |
| metric\_ids     | [repeated MetricId](#metricid)         | LEGACY - which metrics to monitor |
| metric\_options | [repeated MetricOption](#metricoption) | NEW - per-metric sensitivity      |

### CustomMonitorSettingsChange

(synq.monitors.automated\_monitors.v1.CustomMonitorSettingsChange)

| Field                                                                                                                                 | Type                                                   | Description |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------- |
| monitored\_asset\_path                                                                                                                | [ string](#string)                                     | none        |
| original\_settings                                                                                                                    | [ AutomatedMonitorSettings](#automatedmonitorsettings) | none        |
| new\_settings                                                                                                                         | [ AutomatedMonitorSettings](#automatedmonitorsettings) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_resolved\_freshness\_field.resolved\_freshness\_field | [optional string](#string)                             | none        |

### EntitySelectionQuery

(synq.monitors.automated\_monitors.v1.EntitySelectionQuery)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| parts   | [repeated QueryPart](#querypart) | none        |
| operand | [ QueryOperand](#queryoperand)   | none        |

### EntitySelectionQuery.QueryPart

(synq.monitors.automated\_monitors.v1.EntitySelectionQuery.QueryPart)

| Field                                                                                                 | Type                                           | Description                                            |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier\_list   | [ IdentifierList](#identifierlist)             | none                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_name\_search | [ WithNameSearch](#withnamesearch)             | none                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_type         | [ WithType](#withtype)                         | none                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_annotation   | [ WithAnnotation](#withannotation)             | none                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_folder         | [ InFolder](#infolder)                         | synq.queries.v1.InDataPlatform in\_data\_platform = 5; |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query              | [ EntitySelectionQuery](#entityselectionquery) | none                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.unsupported        | [ Unsupported](#unsupported)                   | none                                                   |

### ExclusiveQueryConfig

(synq.monitors.automated\_monitors.v1.ExclusiveQueryConfig)

| Field                  | Type                                           | Description                                                                                                                                                                                                                                                                                                                                      |
| ---------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| query                  | [ EntitySelectionQuery](#entityselectionquery) | none                                                                                                                                                                                                                                                                                                                                             |
| resolver\_ql           | [ string](#string)                             | ResolverQL selection string for the exclusion set. Same semantics as QueryConfig.resolver\_ql: when set on write it takes precedence over `query`; on read it is echoed back VERBATIM for ResolverQL-authored rules and is empty for structured-`query` rules (whose ResolverQL form is in `rendered_resolver_ql`). `query` is always populated. |
| rendered\_resolver\_ql | [ string](#string)                             | Canonical ResolverQL rendering of the exclusion selection. Same semantics as QueryConfig.rendered\_resolver\_ql: OUTPUT ONLY, populated for every rule, ignored on write.                                                                                                                                                                        |

### ExclusiveStaticConfig

(synq.monitors.automated\_monitors.v1.ExclusiveStaticConfig)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| path  | [ string](#string) | none        |

### MetricOption

(synq.monitors.automated\_monitors.v1.MetricOption)

| Field       | Type                         | Description |
| ----------- | ---------------------------- | ----------- |
| sensitivity | [ Sensitivity](#sensitivity) | none        |
| metric\_id  | [ MetricId](#metricid)       | none        |

### MonitorSettingsChange

(synq.monitors.automated\_monitors.v1.MonitorSettingsChange)

| Field                  | Type                                                   | Description |
| ---------------------- | ------------------------------------------------------ | ----------- |
| monitored\_asset\_path | [ string](#string)                                     | none        |
| original\_settings     | [ AutomatedMonitorSettings](#automatedmonitorsettings) | none        |
| new\_settings          | [ AutomatedMonitorSettings](#automatedmonitorsettings) | none        |

### MonitorsDeploymentOverview

(synq.monitors.automated\_monitors.v1.MonitorsDeploymentOverview)

| Field                              | Type                                                                 | Description |
| ---------------------------------- | -------------------------------------------------------------------- | ----------- |
| monitors\_to\_create\_for          | [repeated string](#string)                                           | none        |
| monitors\_to\_delete\_for          | [repeated string](#string)                                           | none        |
| active\_monitors\_for              | [repeated string](#string)                                           | none        |
| monitor\_settings\_changes         | [repeated MonitorSettingsChange](#monitorsettingschange)             | none        |
| custom\_monitors\_to\_create\_for  | [repeated string](#string)                                           | none        |
| custom\_monitors\_to\_delete\_for  | [repeated string](#string)                                           | none        |
| active\_custom\_monitors\_for      | [repeated string](#string)                                           | none        |
| custom\_monitor\_settings\_changes | [repeated CustomMonitorSettingsChange](#custommonitorsettingschange) | none        |
| skipped\_assets                    | [repeated SkippedAsset](#skippedasset)                               | none        |

### MonitorsDeploymentRule

(synq.monitors.automated\_monitors.v1.MonitorsDeploymentRule)

| Field                                                                                                          | Type                                             | Description |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------- |
| id                                                                                                             | [ string](#string)                               | none        |
| title                                                                                                          | [ string](#string)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.query\_config             | [ QueryConfig](#queryconfig)                     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_query\_config  | [ ExclusiveQueryConfig](#exclusivequeryconfig)   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.static\_config            | [ StaticConfig](#staticconfig)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_static\_config | [ ExclusiveStaticConfig](#exclusivestaticconfig) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.product\_config           | [ ProductConfig](#productconfig)                 | none        |
| source                                                                                                         | [ Source](#source)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id          | [optional string](#string)                       | none        |

### MonitorsDeploymentRuleView

(synq.monitors.automated\_monitors.v1.MonitorsDeploymentRuleView)

| Field                                                                                                          | Type                                             | Description |
| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------- |
| id                                                                                                             | [ string](#string)                               | none        |
| title                                                                                                          | [ string](#string)                               | none        |
| monitor\_count                                                                                                 | [ int32](#int32)                                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.query\_config             | [ QueryConfig](#queryconfig)                     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_query\_config  | [ ExclusiveQueryConfig](#exclusivequeryconfig)   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.static\_config            | [ StaticConfig](#staticconfig)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_static\_config | [ ExclusiveStaticConfig](#exclusivestaticconfig) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.product\_config           | [ ProductConfig](#productconfig)                 | none        |
| source                                                                                                         | [ Source](#source)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id          | [optional string](#string)                       | none        |

### ProductConfig

(synq.monitors.automated\_monitors.v1.ProductConfig)

| Field                   | Type                                                             | Description                                                                                                                           |
| ----------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| product\_id             | [ string](#string)                                               | none                                                                                                                                  |
| severity                | [ Severity](#severity)                                           | none                                                                                                                                  |
| sensitivity             | [ Sensitivity](#sensitivity)                                     | none                                                                                                                                  |
| metric\_ids             | [repeated MetricId](#metricid)                                   | none                                                                                                                                  |
| upstream                | [ ProductConfigUpstreamStrategy](#productconfigupstreamstrategy) | none                                                                                                                                  |
| self                    | [ ProductConfigSelfStrategy](#productconfigselfstrategy)         | none                                                                                                                                  |
| keep\_deleted\_monitors | [ bool](#bool)                                                   | none                                                                                                                                  |
| metric\_options         | [repeated MetricOption](#metricoption)                           | NEW                                                                                                                                   |
| delay\_model            | [ DelayModel](#delaymodel)                                       | How the delay and volume\_change\_delay metrics model the expected arrival time of new data. Unset leaves the stored value unchanged. |

### ProductConfigSelfStrategy

(synq.monitors.automated\_monitors.v1.ProductConfigSelfStrategy)

| Field                                                                                            | Type                                                                       | Description |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.all       | [ ProductConfigSelfStrategyAll](#productconfigselfstrategyall)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.selection | [ ProductConfigSelfStrategySelection](#productconfigselfstrategyselection) | none        |

### ProductConfigSelfStrategyAll

(synq.monitors.automated\_monitors.v1.ProductConfigSelfStrategyAll)

### ProductConfigSelfStrategySelection

(synq.monitors.automated\_monitors.v1.ProductConfigSelfStrategySelection)

| Field | Type                                           | Description |
| ----- | ---------------------------------------------- | ----------- |
| query | [ EntitySelectionQuery](#entityselectionquery) | none        |

### ProductConfigUpstreamStrategy

(synq.monitors.automated\_monitors.v1.ProductConfigUpstreamStrategy)

| Field                                                                                          | Type                                                                           | Description |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.all     | [ ProductConfigUpstreamStrategyAll](#productconfigupstreamstrategyall)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.sources | [ ProductConfigUpstreamStrategySources](#productconfigupstreamstrategysources) | none        |

### ProductConfigUpstreamStrategyAll

(synq.monitors.automated\_monitors.v1.ProductConfigUpstreamStrategyAll)

### ProductConfigUpstreamStrategySources

(synq.monitors.automated\_monitors.v1.ProductConfigUpstreamStrategySources)

### QueryConfig

(synq.monitors.automated\_monitors.v1.QueryConfig)

| Field                   | Type                                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ----------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query                   | [ EntitySelectionQuery](#entityselectionquery) | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| severity                | [ Severity](#severity)                         | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| sensitivity             | [ Sensitivity](#sensitivity)                   | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| metric\_ids             | [repeated MetricId](#metricid)                 | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| keep\_deleted\_monitors | [ bool](#bool)                                 | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| metric\_options         | [repeated MetricOption](#metricoption)         | NEW - optional per-metric config                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| resolver\_ql            | [ string](#string)                             | ResolverQL selection string — an advanced, more expressive alternative to `query`. ResolverQL is a superset of the structured `query`: use it for selections `query` cannot express (e.g. lineage walks, column predicates). When set (non-empty) on write, `resolver_ql` is the source of truth and the structured `query` is ignored. On read it is echoed back VERBATIM (exactly as written, not normalized) for rules authored via ResolverQL, and is empty for rules authored via the structured `query` — so writing a read response back unchanged preserves the rule's authored form (a structured rule stays structured rather than being silently rewritten to ResolverQL). To read the ResolverQL form of a structured rule, use `rendered_resolver_ql`. `query` is always populated regardless. |
| rendered\_resolver\_ql  | [ string](#string)                             | Canonical ResolverQL rendering of this rule's selection, populated for every query rule regardless of how it was authored. OUTPUT ONLY — it is ignored on write; set `resolver_ql` to author a selection in ResolverQL. Use it to read the ResolverQL form of a rule authored via the structured `query`; for ResolverQL-authored rules it equals `resolver_ql`. Empty only for selections that have no ResolverQL representation.                                                                                                                                                                                                                                                                                                                                                                          |
| delay\_model            | [ DelayModel](#delaymodel)                     | How the delay and volume\_change\_delay metrics model the expected arrival time of new data. Unset leaves the stored value unchanged.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

### SkippedAsset

(synq.monitors.automated\_monitors.v1.SkippedAsset)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| asset\_path | [ string](#string) | none        |
| reason      | [ string](#string) | none        |

### StaticConfig

(synq.monitors.automated\_monitors.v1.StaticConfig)

| Field           | Type                                   | Description                                                                                                                           |
| --------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| path            | [ string](#string)                     | none                                                                                                                                  |
| severity        | [ Severity](#severity)                 | none                                                                                                                                  |
| sensitivity     | [ Sensitivity](#sensitivity)           | none                                                                                                                                  |
| metric\_ids     | [repeated MetricId](#metricid)         | none                                                                                                                                  |
| metric\_options | [repeated MetricOption](#metricoption) | NEW                                                                                                                                   |
| delay\_model    | [ DelayModel](#delaymodel)             | How the delay and volume\_change\_delay metrics model the expected arrival time of new data. Unset leaves the stored value unchanged. |

### BatchCreateMonitorRequest

(synq.monitors.custom\_monitors.v1.BatchCreateMonitorRequest)

| Field    | Type                                             | Description |
| -------- | ------------------------------------------------ | ----------- |
| monitors | [repeated MonitorDefinition](#monitordefinition) | none        |

### BatchCreateMonitorResponse

(synq.monitors.custom\_monitors.v1.BatchCreateMonitorResponse)

| Field                 | Type                       | Description |
| --------------------- | -------------------------- | ----------- |
| created\_monitor\_ids | [repeated string](#string) | none        |

### BatchDeleteMonitorRequest

(synq.monitors.custom\_monitors.v1.BatchDeleteMonitorRequest)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### BatchDeleteMonitorResponse

(synq.monitors.custom\_monitors.v1.BatchDeleteMonitorResponse)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| deleted\_ids | [repeated string](#string) | none        |

### BatchUpdateMonitorModeRequest

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorModeRequest)

| Field                                                                                                | Type                                         | Description |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------- | ----------- |
| ids                                                                                                  | [repeated string](#string)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mode.anomaly\_engine   | [ ModeAnomalyEngine](#modeanomalyengine)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mode.fixed\_thresholds | [ ModeFixedThresholds](#modefixedthresholds) | none        |

### BatchUpdateMonitorModeResponse

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorModeResponse)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| updated\_ids | [repeated string](#string) | none        |

### BatchUpdateMonitorRequest

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorRequest)

| Field                   | Type                                             | Description |
| ----------------------- | ------------------------------------------------ | ----------- |
| monitor\_ids\_to\_reset | [repeated string](#string)                       | none        |
| monitors                | [repeated MonitorDefinition](#monitordefinition) | none        |

### BatchUpdateMonitorResponse

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorResponse)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| updated\_ids | [repeated string](#string) | none        |

### BatchUpdateMonitorSeverityRequest

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorSeverityRequest)

| Field    | Type                       | Description |
| -------- | -------------------------- | ----------- |
| ids      | [repeated string](#string) | none        |
| severity | [ Severity](#severity)     | none        |

### BatchUpdateMonitorSeverityResponse

(synq.monitors.custom\_monitors.v1.BatchUpdateMonitorSeverityResponse)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| updated\_ids | [repeated string](#string) | none        |

### ChangeOverview

(synq.monitors.custom\_monitors.v1.ChangeOverview)

| Field                | Type                                     | Description |
| -------------------- | ---------------------------------------- | ----------- |
| monitor\_id          | [ string](#string)                       | none        |
| origin\_definition   | [ MonitorDefinition](#monitordefinition) | none        |
| new\_definition      | [ MonitorDefinition](#monitordefinition) | none        |
| changes              | [ string](#string)                       | none        |
| changes\_delta\_json | [ string](#string)                       | none        |
| should\_reset        | [ bool](#bool)                           | none        |

### ConfigChangesOverviewRequest

(synq.monitors.custom\_monitors.v1.ConfigChangesOverviewRequest)

| Field       | Type                                             | Description |
| ----------- | ------------------------------------------------ | ----------- |
| config\_ids | [repeated string](#string)                       | none        |
| monitors    | [repeated MonitorDefinition](#monitordefinition) | none        |

### ConfigChangesOverviewResponse

(synq.monitors.custom\_monitors.v1.ConfigChangesOverviewResponse)

| Field                                 | Type                                             | Description |
| ------------------------------------- | ------------------------------------------------ | ----------- |
| monitors\_managed\_by\_app            | [repeated MonitorDefinition](#monitordefinition) | none        |
| monitors\_managed\_by\_other\_configs | [repeated MonitorDefinition](#monitordefinition) | none        |
| monitors\_to\_create                  | [repeated MonitorDefinition](#monitordefinition) | none        |
| monitors\_to\_delete                  | [repeated MonitorDefinition](#monitordefinition) | none        |
| monitors\_unchanged                   | [repeated MonitorDefinition](#monitordefinition) | none        |
| monitors\_changes\_overview           | [repeated ChangeOverview](#changeoverview)       | none        |

### ConfigsFilter

(synq.monitors.custom\_monitors.v1.ConfigsFilter)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### ListConfigsMonitorsRequest

(synq.monitors.custom\_monitors.v1.ListConfigsMonitorsRequest)

| Field       | Type                       | Description |
| ----------- | -------------------------- | ----------- |
| config\_ids | [repeated string](#string) | none        |

### ListConfigsMonitorsResponse

(synq.monitors.custom\_monitors.v1.ListConfigsMonitorsResponse)

| Field    | Type                                             | Description |
| -------- | ------------------------------------------------ | ----------- |
| monitors | [repeated MonitorDefinition](#monitordefinition) | none        |

### ListMonitorsRequest

(synq.monitors.custom\_monitors.v1.ListMonitorsRequest)

| Field                                                                                                 | Type                               | Description                                                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| integration\_ids                                                                                      | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| monitored\_asset\_paths                                                                               | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| monitor\_ids                                                                                          | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| source                                                                                                | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| config\_ids                                                                                           | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| configs\_filter                                                                                       | [ ConfigsFilter](#configsfilter)   | Filter SqlTests by config IDs. Pass `ConfigsFilter{ids: ["config1", "config2"]}` to filter by specific configs. If nil, no config\_id filtering is applied. If empty, the one with NULL config\_id will be excluded. |
| sources                                                                                               | [repeated Source](#source)         | none                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | Pagination                                                                                                                                                                                                           |

### ListMonitorsResponse

(synq.monitors.custom\_monitors.v1.ListMonitorsResponse)

| Field      | Type                                             | Description         |
| ---------- | ------------------------------------------------ | ------------------- |
| monitors   | [repeated MonitorDefinition](#monitordefinition) | none                |
| page\_info | [ PageInfo](#pageinfo)                           | Paging information. |

### ModeAnomalyEngine

(synq.monitors.custom\_monitors.v1.ModeAnomalyEngine)

| Field       | Type                         | Description |
| ----------- | ---------------------------- | ----------- |
| sensitivity | [ Sensitivity](#sensitivity) | none        |

### ModeFixedThresholds

(synq.monitors.custom\_monitors.v1.ModeFixedThresholds)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| min   | [ DoubleValue](#doublevalue) | none        |
| max   | [ DoubleValue](#doublevalue) | none        |

### MonitorCategoryDistribution

(synq.monitors.custom\_monitors.v1.MonitorCategoryDistribution)

| Field         | Type               | Description                                                                     |
| ------------- | ------------------ | ------------------------------------------------------------------------------- |
| field         | [ string](#string) | Categorical column whose value distribution is monitored.                       |
| top\_k\_limit | [ int32](#int32)   | Max categories to track; the rest are aggregated into "other". 0 = use default. |

### MonitorCustomNumeric

(synq.monitors.custom\_monitors.v1.MonitorCustomNumeric)

| Field               | Type               | Description |
| ------------------- | ------------------ | ----------- |
| metric\_aggregation | [ string](#string) | none        |

### MonitorDefinition

(synq.monitors.custom\_monitors.v1.MonitorDefinition)

| Field                                                                                                        | Type                                                         | Description                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                           | [ string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                           |
| monitored\_id                                                                                                | [ Identifier](#identifier)                                   | none                                                                                                                                                                                                                                                                                                                                                           |
| time\_partitioning                                                                                           | [ TimePartitioning](#timepartitioning)                       | How the monitored data is split into time segments. When omitted, the monitor takes one whole-data snapshot per scheduled run instead of segmenting by time (and gets no historical backfill on its first run). Must be omitted for table\_stats monitors.                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segmentation.segmentation    | [optional Segmentation](#segmentation)                       | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_filter.filter                | [optional string](#string)                                   | none                                                                                                                                                                                                                                                                                                                                                           |
| severity                                                                                                     | [ Severity](#severity)                                       | none                                                                                                                                                                                                                                                                                                                                                           |
| name                                                                                                         | [ string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                           |
| description                                                                                                  | [ string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id        | [optional string](#string)                                   | none                                                                                                                                                                                                                                                                                                                                                           |
| source                                                                                                       | [ Source](#source)                                           | Source of the monitor.                                                                                                                                                                                                                                                                                                                                         |
| timezone                                                                                                     | [ string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.freshness              | [ MonitorFreshness](#monitorfreshness)                       | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.volume                 | [ MonitorVolume](#monitorvolume)                             | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.custom\_numeric        | [ MonitorCustomNumeric](#monitorcustomnumeric)               | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.field\_stats           | [ MonitorFieldStats](#monitorfieldstats)                     | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.table\_stats           | [ MonitorTableStats](#monitortablestats)                     | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) monitor.category\_distribution | [ MonitorCategoryDistribution](#monitorcategorydistribution) | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mode.anomaly\_engine           | [ ModeAnomalyEngine](#modeanomalyengine)                     | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mode.fixed\_thresholds         | [ ModeFixedThresholds](#modefixedthresholds)                 | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) schedule.daily                 | [ ScheduleDaily](#scheduledaily)                             | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) schedule.hourly                | [ ScheduleHourly](#schedulehourly)                           | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) schedule.on\_demand            | [ ScheduleOnDemand](#scheduleondemand)                       | none                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sql\_source.sql\_source      | [optional SqlSource](#sqlsource)                             | Optional SQL source. When set, the monitor queries against this SQL (wrapped as a CTE) instead of the table identified by monitored\_id directly. Column references in time\_partitioning, segmentation, and filter refer to columns in the SQL output.                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category            | [optional string](#string)                                   | Technical category this monitor declares for itself — what kind of check it is mechanically (e.g. "volume", "freshness"). It is the monitor's own declaration, not an administrative override: it is authoritative over any categorisation rule the workspace would otherwise apply, and is itself overridden by an explicit per-check category an admin sets. |

The value is free-form and workspace-defined — whatever vocabulary your categorisation rules already use. It is displayed with underscores turned into spaces, so `snake_case` reads well.

Send the whole monitor on every upsert: leaving this out is the same as sending it empty, and both mean the monitor declares no technical category. A monitor then falls back to its `quality.check_category` annotation, which remains accepted and keeps working — this field simply outranks it.

A segmented monitor's segments take this value too. A segment is the same monitor sliced by a column value, so it cannot declare a category of its own. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | Governance category this monitor declares for itself — what the check is for, the data quality dimension governance reports on (e.g. "timeliness"). Resolves independently of `category` — setting one never suppresses the other — and follows the same precedence, the same free-form vocabulary and the same full-state upsert rule described above. Its annotation fallback is `quality.governance_category`. |

### MonitorFieldStats

(synq.monitors.custom\_monitors.v1.MonitorFieldStats)

| Field  | Type                       | Description |
| ------ | -------------------------- | ----------- |
| fields | [repeated string](#string) | none        |

### MonitorFreshness

(synq.monitors.custom\_monitors.v1.MonitorFreshness)

| Field      | Type               | Description                                                             |
| ---------- | ------------------ | ----------------------------------------------------------------------- |
| expression | [ string](#string) | The expression to filter on (eg. "created\_at", "meta\['created\_at']") |

### MonitorTableStats

(synq.monitors.custom\_monitors.v1.MonitorTableStats)

| Field                                                                                                 | Type                                   | Description                                                                                                                                                |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| metric\_options                                                                                       | [repeated MetricOption](#metricoption) | Metrics to monitor. If empty, all metrics are monitored.                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) freshness\_source.field | [ string](#string)                     | Timestamp column name, e.g. "updated\_at" (used as max(updated\_at)).                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) freshness\_source.sql   | [ string](#string)                     | Row-level SQL expression yielding a timestamp, e.g. "coalesce(updated\_at, created\_at)". Do NOT wrap it in an aggregate — max() is applied automatically. |
| delay\_model                                                                                          | [ DelayModel](#delaymodel)             | How the delay and volume\_change\_delay metrics model the expected arrival time of new data. Unset leaves the stored value unchanged.                      |

### MonitorVolume

(synq.monitors.custom\_monitors.v1.MonitorVolume)

### ScheduleDaily

(synq.monitors.custom\_monitors.v1.ScheduleDaily)

| Field                                                                                                             | Type                     | Description                                                                                                                  |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| minutes\_since\_midnight                                                                                          | [ int32](#int32)         | Minutes since midnight (0-1439)                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_delay\_num\_days.delay\_num\_days | [optional int32](#int32) | Delay monitoring by given number of days.                                                                                    |
| only\_schedule\_delay                                                                                             | [ bool](#bool)           | if true, the minutes\_since\_midnight will be related to delay scheduling/execution instead of time shifting time partitions |

### ScheduleHourly

(synq.monitors.custom\_monitors.v1.ScheduleHourly)

| Field                                                                                                               | Type                     | Description                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| minute\_of\_hour                                                                                                    | [ int32](#int32)         | Minute of hour (0-59)                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_delay\_num\_hours.delay\_num\_hours | [optional int32](#int32) | Delay monitoring by given number of hours.                                                                           |
| only\_schedule\_delay                                                                                               | [ bool](#bool)           | if true, the minute\_of\_hour will be related to delay scheduling/execution instead of time shifting time partitions |

### ScheduleOnDemand

(synq.monitors.custom\_monitors.v1.ScheduleOnDemand)

### Segmentation

(synq.monitors.custom\_monitors.v1.Segmentation)

| Field                                                                                                           | Type                             | Description                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| expression                                                                                                      | [ string](#string)               | The expression to segment on (eg. "country", "meta\['country']") You can optionally specify values to include or exclude from segmentation. If neither are provided, all values are included by default. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_include\_values.include\_values | [optional ValueList](#valuelist) | List of expression values to include for segmentation (eg. "UK", "France")                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_exclude\_values.exclude\_values | [optional ValueList](#valuelist) | List of expression values to exclude for segmentation (eg. "NA", "")                                                                                                                                     |

### SqlSource

(synq.monitors.custom\_monitors.v1.SqlSource)

SQL query to use as the data source for a monitor instead of querying a table directly.
The SQL is wrapped as a CTE, and the monitor's metric query runs against its output.
Column references (time partitioning, segmentation, filter) refer to columns in the SQL output.

| Field | Type               | Description                                                                                                                    |
| ----- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| sql   | [ string](#string) | The SQL query providing the data source. Example: "SELECT created\_at, country, amount FROM orders WHERE status = 'completed'" |

### TimePartitioning

(synq.monitors.custom\_monitors.v1.TimePartitioning)

| Field      | Type                   | Description                                                                                                                                                                                                                                                                   |
| ---------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| expression | [ string](#string)     | The expression to partition on (eg. "created\_at", "meta\['created\_at']"). Required whenever time\_partitioning is set. To monitor without time segmentation, omit the whole time\_partitioning message rather than sending an empty expression.                             |
| interval   | [ Duration](#duration) | Length of one time segment. Optional: defaults to the interval implied by the schedule (24h for daily, 1h for hourly) and must equal it when set. On-demand monitors have no schedule interval to inherit, so they must set it explicitly whenever time\_partitioning is set. |

### ValueList

(synq.monitors.custom\_monitors.v1.ValueList)

| Field  | Type                       | Description |
| ------ | -------------------------- | ----------- |
| values | [repeated string](#string) | none        |

### BatchGetExecutionsRequest

(synq.entities.executions.v2.BatchGetExecutionsRequest)

BatchGetExecutionsRequest requests specific executions by ID.

| Field          | Type                       | Description                |
| -------------- | -------------------------- | -------------------------- |
| execution\_ids | [repeated string](#string) | Execution IDs to retrieve. |

### BatchGetExecutionsResponse

(synq.entities.executions.v2.BatchGetExecutionsResponse)

BatchGetExecutionsResponse contains the requested executions.

| Field      | Type                                    | Description                                                                                      |
| ---------- | --------------------------------------- | ------------------------------------------------------------------------------------------------ |
| executions | [map ExecutionsEntry](#executionsentry) | Map of execution ID to EntityExecution. Only includes executions that were found and accessible. |

### BatchGetExecutionsResponse.ExecutionsEntry

(synq.entities.executions.v2.BatchGetExecutionsResponse.ExecutionsEntry)

| Field | Type                                 | Description |
| ----- | ------------------------------------ | ----------- |
| key   | [ string](#string)                   | none        |
| value | [ EntityExecution](#entityexecution) | none        |

### EntityExecution

(synq.entities.executions.v2.EntityExecution)

EntityExecution represents a single execution event on an entity.
This is a public representation of internal Run data, excluding sensitive metadata.

| Field                                                                                                               | Type                                 | Description                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                                  | [ string](#string)                   | Unique identifier for this execution.                                                                                             |
| entities                                                                                                            | [repeated Identifier](#identifier)   | Primary entities affected by this execution. These are the main entities this execution ran on or modified.                       |
| entities\_synq\_paths                                                                                               | [repeated string](#string)           | Coalesce Quality paths of primary entities affected by this execution.                                                            |
| targets                                                                                                             | [repeated Identifier](#identifier)   | Target entities referenced by this execution. These are secondary entities that were targets of the execution.                    |
| targets\_synq\_paths                                                                                                | [repeated string](#string)           | Coalesce Quality paths of target entities referenced by this execution.                                                           |
| extra\_references                                                                                                   | [repeated Identifier](#identifier)   | Additional entity references. These are other entities referenced during the execution.                                           |
| extra\_references\_synq\_paths                                                                                      | [repeated string](#string)           | Coalesce Quality paths of additional entity references.                                                                           |
| execution\_type                                                                                                     | [ ExecutionType](#executiontype)     | Type of execution (e.g., query, job, test run).                                                                                   |
| status                                                                                                              | [ ExecutionStatus](#executionstatus) | Status of the execution.                                                                                                          |
| skipped                                                                                                             | [ bool](#bool)                       | Whether this execution was skipped.                                                                                               |
| message                                                                                                             | [ string](#string)                   | Human-readable message describing the execution result. This typically contains error messages, warnings, or success information. |
| created\_at                                                                                                         | [ Timestamp](#timestamp)             | When the execution record was created in Coalesce Quality.                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_at.started\_at             | [optional Timestamp](#timestamp)     | When the execution actually started.                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_finished\_at.finished\_at           | [optional Timestamp](#timestamp)     | When the execution finished.                                                                                                      |
| parent\_execution\_ids                                                                                              | [repeated string](#string)           | IDs of parent executions, if this is a nested execution. For example, a task execution might have a parent DAG execution.         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_duration\_seconds.duration\_seconds | [optional double](#double)           | Duration of the execution in seconds. Only populated if both started\_at and finished\_at are present.                            |

### ExecutionStatusCount

(synq.entities.executions.v2.ExecutionStatusCount)

ExecutionStatusCount represents the count of executions by status.

| Field  | Type                                 | Description |
| ------ | ------------------------------------ | ----------- |
| status | [ ExecutionStatus](#executionstatus) | none        |
| count  | [ int64](#int64)                     | none        |

### ExecutionTypeCount

(synq.entities.executions.v2.ExecutionTypeCount)

ExecutionTypeCount represents the count of executions by type.

| Field           | Type                             | Description |
| --------------- | -------------------------------- | ----------- |
| execution\_type | [ ExecutionType](#executiontype) | none        |
| count           | [ int64](#int64)                 | none        |

### GetExecutionsSummaryRequest

(synq.entities.executions.v2.GetExecutionsSummaryRequest)

GetExecutionsSummaryRequest requests summary statistics for entities.

| Field                                                                                                                                 | Type                               | Description                                                                                                                  |
| ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| entity\_ids                                                                                                                           | [repeated Identifier](#identifier) | Entity identifiers to get summary for.                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_started\_after.execution\_started\_after   | [optional Timestamp](#timestamp)   | Return executions that started after this timestamp. If not provided, defaults to 30 days before execution\_started\_before. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_started\_before.execution\_started\_before | [optional Timestamp](#timestamp)   | Return executions that started before this timestamp. If not provided, defaults to now().                                    |

### GetExecutionsSummaryResponse

(synq.entities.executions.v2.GetExecutionsSummaryResponse)

GetExecutionsSummaryResponse contains aggregated execution statistics.

| Field                                                                                                                   | Type                                                   | Description                                       |
| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------- |
| total\_executions                                                                                                       | [ int64](#int64)                                       | Total number of executions matching the criteria. |
| execution\_type\_counts                                                                                                 | [repeated ExecutionTypeCount](#executiontypecount)     | Count of executions by type.                      |
| status\_counts                                                                                                          | [repeated ExecutionStatusCount](#executionstatuscount) | Count of executions by status.                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_earliest\_execution.earliest\_execution | [optional Timestamp](#timestamp)                       | Time range of available executions.               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_latest\_execution.latest\_execution     | [optional Timestamp](#timestamp)                       | none                                              |
| latest\_by\_entity                                                                                                      | [map LatestByEntityEntry](#latestbyentityentry)        | Latest execution for each requested entity.       |

### GetExecutionsSummaryResponse.LatestByEntityEntry

(synq.entities.executions.v2.GetExecutionsSummaryResponse.LatestByEntityEntry)

| Field | Type                                 | Description |
| ----- | ------------------------------------ | ----------- |
| key   | [ string](#string)                   | none        |
| value | [ EntityExecution](#entityexecution) | none        |

### GetLatestExecutionsRequest

(synq.entities.executions.v2.GetLatestExecutionsRequest)

GetLatestExecutionsRequest requests the latest execution for each entity.

| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                         |
| ---------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity\_ids      | [repeated Identifier](#identifier)           | Entity identifiers to get latest executions for. Only returns executions where these entities appear in EntityExecution.entities (what executed). Examples that WILL return results: monitors, dbt models, airflow tasks, tests Examples that WON'T return results: tables (they don't execute, they are created/updated by models) |
| statuses         | [repeated ExecutionStatus](#executionstatus) | Filter by execution status. If provided, returns the latest execution with one of these statuses. If empty, returns the latest execution regardless of status.                                                                                                                                                                      |
| execution\_types | [repeated ExecutionType](#executiontype)     | Filter by execution types. If provided, returns the latest execution of one of these types. If empty, returns the latest execution regardless of type.                                                                                                                                                                              |

### GetLatestExecutionsResponse

(synq.entities.executions.v2.GetLatestExecutionsResponse)

GetLatestExecutionsResponse contains the latest execution for each requested entity.

| Field              | Type                                                | Description                                                                                                 |
| ------------------ | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| latest\_executions | [map LatestExecutionsEntry](#latestexecutionsentry) | Map of entity identifier (as string) to latest execution. Entities with no matching executions are omitted. |

### GetLatestExecutionsResponse.LatestExecutionsEntry

(synq.entities.executions.v2.GetLatestExecutionsResponse.LatestExecutionsEntry)

| Field | Type                                 | Description |
| ----- | ------------------------------------ | ----------- |
| key   | [ string](#string)                   | none        |
| value | [ EntityExecution](#entityexecution) | none        |

### ListExecutionsRequest

(synq.entities.executions.v2.ListExecutionsRequest)

ListExecutionsRequest specifies filters for listing executions.

| Field                                                                                                                                 | Type                                         | Description                                                                                                                                                                           |
| ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity\_ids                                                                                                                           | [repeated Identifier](#identifier)           | Entity identifiers to get executions for. Executions affecting any of these entities will be returned.                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_started\_after.execution\_started\_after   | [optional Timestamp](#timestamp)             | Return executions that started after this timestamp. If not provided, defaults to 7 days before execution\_started\_before.                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_started\_before.execution\_started\_before | [optional Timestamp](#timestamp)             | Return executions that started before this timestamp. If not provided, defaults to now().                                                                                             |
| execution\_types                                                                                                                      | [repeated ExecutionType](#executiontype)     | Filter by specific execution types. If empty, all execution types are included.                                                                                                       |
| statuses                                                                                                                              | [repeated ExecutionStatus](#executionstatus) | Filter by execution status. If empty, all statuses are included.                                                                                                                      |
| include\_referenced\_executions                                                                                                       | [ bool](#bool)                               | Include executions that reference the specified entities (not just primary entities). If true, executions where entity\_ids appear in targets or extra\_references are also returned. |
| pagination                                                                                                                            | [ Pagination](#pagination)                   | Pagination parameters.                                                                                                                                                                |

### ListExecutionsResponse

(synq.entities.executions.v2.ListExecutionsResponse)

ListExecutionsResponse contains the paginated list of executions.

| Field      | Type                                         | Description                                                                         |
| ---------- | -------------------------------------------- | ----------------------------------------------------------------------------------- |
| executions | [repeated EntityExecution](#entityexecution) | List of executions matching the filter criteria, ordered by started\_at descending. |
| page\_info | [ PageInfo](#pageinfo)                       | Pagination information.                                                             |

### Execution

(synq.entities.executions.v1.Execution)

| Field        | Type                                       | Description |
| ------------ | ------------------------------------------ | ----------- |
| id           | [ Identifier](#identifier)                 | none        |
| status       | [ ExecutionStatus](#executionstatus)       | none        |
| message      | [ string](#string)                         | none        |
| created\_at  | [ Timestamp](#timestamp)                   | none        |
| started\_at  | [ Timestamp](#timestamp)                   | none        |
| finished\_at | [ Timestamp](#timestamp)                   | none        |
| annotations  | [repeated Annotation](#annotation)         | none        |
| extras       | [repeated ExecutionExtra](#executionextra) | none        |

### ExecutionExtra

(synq.entities.executions.v1.ExecutionExtra)

| Field                                                                                             | Type               | Description |
| ------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) extra.executed\_sql | [ string](#string) | none        |

### LogEntry

(synq.entities.executions.v1.LogEntry)

| Field        | Type                               | Description |
| ------------ | ---------------------------------- | ----------- |
| id           | [ Identifier](#identifier)         | none        |
| message      | [ string](#string)                 | none        |
| created\_at  | [ Timestamp](#timestamp)           | none        |
| started\_at  | [ Timestamp](#timestamp)           | none        |
| finished\_at | [ Timestamp](#timestamp)           | none        |
| annotations  | [repeated Annotation](#annotation) | none        |

### UpsertExecutionRequest

(synq.entities.executions.v1.UpsertExecutionRequest)

| Field     | Type                     | Description |
| --------- | ------------------------ | ----------- |
| execution | [ Execution](#execution) | none        |

### UpsertExecutionResponse

(synq.entities.executions.v1.UpsertExecutionResponse)

### UpsertLogEntryRequest

(synq.entities.executions.v1.UpsertLogEntryRequest)

| Field      | Type                   | Description |
| ---------- | ---------------------- | ----------- |
| log\_entry | [ LogEntry](#logentry) | none        |

### UpsertLogEntryResponse

(synq.entities.executions.v1.UpsertLogEntryResponse)

### CllDetails

(synq.entities.lineage.v1.CllDetails)

| Field         | Type                       | Description                                                     |
| ------------- | -------------------------- | --------------------------------------------------------------- |
| columns       | [repeated Column](#column) | Column details for CLL.                                         |
| cll\_state    | [ CllState](#cllstate)     | State of the CLL parse. UNSPECIFIED if CLL was not requested.   |
| cll\_messages | [repeated string](#string) | Messages related to CLL. e.g. Description of parse errors, etc. |

### Column

(synq.entities.lineage.v1.Column)

Column in a table-like asset (used in CLL mode).

| Field                                                                                                     | Type                       | Description                                               |
| --------------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------- |
| column\_id                                                                                                | [ string](#string)         | ID string for the column. This is the parsed column name. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_name.name                 | [optional string](#string) | Original column name as fetched from the table.           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_native\_type.native\_type | [optional string](#string) | Column type as fetched from the table.                    |

### ColumnDependency

(synq.entities.lineage.v1.ColumnDependency)

Indicates data flow between columns.
Source columns are used to compute value of target columns.

| Field                    | Type               | Description                                     |
| ------------------------ | ------------------ | ----------------------------------------------- |
| source\_node\_idx        | [ uint32](#uint32) | Index of source node in the lineage nodes list. |
| source\_node\_column\_id | [ string](#string) | none                                            |
| target\_node\_idx        | [ uint32](#uint32) | Index of target node in the lineage nodes list. |
| target\_node\_column\_id | [ string](#string) | none                                            |

### Lineage

(synq.entities.lineage.v1.Lineage)

Lineage defines the lineage of table-like entities.

| Field                | Type                                           | Description                                                                                    |
| -------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| nodes                | [repeated LineageNode](#lineagenode)           | Nodes in the lineage with their identities and columns.                                        |
| node\_dependencies   | [repeated NodeDependency](#nodedependency)     | All edges in the lineage between nodes. This can be parsed to create a graph of all the nodes. |
| is\_cll              | [ bool](#bool)                                 | Indicates whether the lineage was filtered for column level lineage (CLL).                     |
| column\_dependencies | [repeated ColumnDependency](#columndependency) | Dependencies between columns. Populated only for CLL.                                          |

### LineageNode

(synq.entities.lineage.v1.LineageNode)

Node in a lineage graph representing one or more entities (e.g. database table).

| Field                                                                                                     | Type                               | Description                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ids                                                                                                       | [repeated Identifier](#identifier) | All entities which have the same identity as this node. Must be at least one item. These are sorted by closeness to the type of the start point entities. e.g. if requesting lineage of a DBT source, first entity should be from DBT, similarly when viewing table it will be other tables. |
| position                                                                                                  | [ NodePosition](#nodeposition)     | Position of the node in the lineage.                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cll\_details.cll\_details | [optional CllDetails](#clldetails) | Populated only for Column Level Lineage (CLL).                                                                                                                                                                                                                                               |

### NodeDependency

(synq.entities.lineage.v1.NodeDependency)

Indicates data flow between nodes.
Source nodes are used to compute value of target nodes.

| Field             | Type               | Description                                     |
| ----------------- | ------------------ | ----------------------------------------------- |
| source\_node\_idx | [ uint32](#uint32) | Index of source node in the lineage nodes list. |
| target\_node\_idx | [ uint32](#uint32) | Index of target node in the lineage nodes list. |

### EntitiesStartPoint

(synq.entities.lineage.v1.EntitiesStartPoint)

| Field    | Type                               | Description |
| -------- | ---------------------------------- | ----------- |
| entities | [repeated Identifier](#identifier) | none        |

### EntityColumnsStartPoint

(synq.entities.lineage.v1.EntityColumnsStartPoint)

| Field         | Type                       | Description |
| ------------- | -------------------------- | ----------- |
| id            | [ Identifier](#identifier) | none        |
| column\_names | [repeated string](#string) | none        |

### GetLineageRequest

(synq.entities.lineage.v1.GetLineageRequest)

| Field                                                                                                 | Type                                           | Description |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------- |
| lineage\_direction                                                                                    | [ LineageDirection](#lineagedirection)         | none        |
| start\_point                                                                                          | [ GetLineageStartPoint](#getlineagestartpoint) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_max\_depth.max\_depth | [optional int32](#int32)                       | none        |

### GetLineageResponse

(synq.entities.lineage.v1.GetLineageResponse)

| Field   | Type                 | Description |
| ------- | -------------------- | ----------- |
| lineage | [ Lineage](#lineage) | none        |

### GetLineageStartPoint

(synq.entities.lineage.v1.GetLineageStartPoint)

Possible starting points to get lineage from.

| Field                                                                                              | Type                                                 | Description |
| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) from.entities        | [ EntitiesStartPoint](#entitiesstartpoint)           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) from.entity\_columns | [ EntityColumnsStartPoint](#entitycolumnsstartpoint) | none        |

### CategorisationFacets

(synq.entities.checks.v2.CategorisationFacets)

A set of check attributes. The same four dimensions select checks in three
places — the predicate of a categorisation rule, the filter on a check
listing, and the values a workspace actually has — so one message carries
them everywhere and a value read from one can be passed straight to the next.

An empty list places no constraint on its dimension. Within a list the values
are alternatives; across lists they combine.

| Field                 | Type                                           | Description                                                     |
| --------------------- | ---------------------------------------------- | --------------------------------------------------------------- |
| data\_platform\_types | [repeated DataPlatformType](#dataplatformtype) | Platforms the check runs on.                                    |
| entity\_types         | [repeated EntityType](#entitytype)             | Entity types of the check itself, e.g. ENTITY\_TYPE\_DBT\_TEST. |
| packages              | [repeated string](#string)                     | Packages the check comes from, e.g. "dbt\_utils".               |
| kinds                 | [repeated string](#string)                     | Check kinds, e.g. "not\_null", "unique".                        |

### CheckSummary

(synq.entities.checks.v2.CheckSummary)

Enough of a check to recognise it and act on it without a second call.

Every field is output-only and reflects the check as the tool that produced
it described it — a dbt test, a monitor, a reconciliation case. Nothing here
is editable through the categorisation API; to change any of it, change it in
the tool that publishes the check.

| Field      | Type                       | Description                                                                                                                                                                                                                                      |
| ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| name       | [ string](#string)         | Name of the check, as its producer names it. Always the last element of `full_name` when that is populated; kept as its own field so a client that only needs the label never has to index into an array.                                        |
| full\_name | [repeated string](#string) | Full display path down to the check, root first and leaf last — suitable for rendering a breadcrumb as-is, the same order and meaning as `synq.entities.folders.v1.Folder.full_name`: `["prod", "analytics", "orders", "not_null_customer_id"]`. |

The leading segments are the producer's own containers — a dbt project, a warehouse database and schema — so how many there are varies by platform. Drop the last element for the path to the check's parent. |
\| package | [ string](#string) | Package the check comes from, e.g. "dbt", "dbt\_utils". Empty when the producer has no notion of packages. |
\| kind | [ string](#string) | General kind of the check, e.g. "not\_null", "unique", "row\_count". This is the attribute categorisation rules most often match on. |
\| entity\_type | [ EntityType](#entitytype) | Entity type of the check itself, e.g. ENTITY\_TYPE\_DBT\_TEST. |
\| data\_platform\_type | [ DataPlatformType](#dataplatformtype) | Platform the check runs on, e.g. DATA\_PLATFORM\_TYPE\_DBT. |
\| is\_platform\_native | [ bool](#bool) | Whether the check is native to its platform (a dbt test in a dbt project) rather than defined in Coalesce Quality. |
\| description | [ string](#string) | Description of the check, where the producer supplied one. |
\| checked\_entity\_ids | [repeated string](#string) | The entities the check validates. Empty when the check's targets could not be resolved. |
\| annotations | [map AnnotationsEntry](#annotationsentry) | Free-form key/value metadata the tool that produced the check attached to it — a dbt test's `meta` entries, a SQLMesh audit's, a custom label.

This is what a categorisation rule's `annotation_matches` predicate is written against, so reading them is how you find out what there is to match on in your own workspace. |

### CheckSummary.AnnotationsEntry

(synq.entities.checks.v2.CheckSummary.AnnotationsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### AnnotationMatch

(synq.entities.checks.v2.AnnotationMatch)

A condition on one annotation of a check.

Annotations are the key/value metadata a producer attaches to a check — a
dbt test's `meta` entries, for example — which makes them the way to
categorise by something only your own team knows, such as a domain or an
owning squad.

| Field                                                                                      | Type                                   | Description                                                                                                           |
| ------------------------------------------------------------------------------------------ | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| key                                                                                        | [ string](#string)                     | Annotation key to look up on the check.                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) match.exists | [ bool](#bool)                         | Matches when the key is present, whatever its value. Set it to true; a false value is not a negation and is rejected. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) match.equals | [ string](#string)                     | Matches when the value equals this string exactly.                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) match.in     | [ AnnotationValues](#annotationvalues) | Matches when the value is one of these.                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) match.regex  | [ string](#string)                     | Matches when the value matches this RE2 regular expression.                                                           |

### AnnotationValues

(synq.entities.checks.v2.AnnotationValues)

A list of accepted annotation values.

| Field  | Type                       | Description |
| ------ | -------------------------- | ----------- |
| values | [repeated string](#string) | none        |

### CheckAttributesMatcher

(synq.entities.checks.v2.CheckAttributesMatcher)

Selects checks by their attributes. A check matches when every populated
field matches it; an empty field places no constraint, so an entirely empty
matcher matches every check in the workspace.

This is the form to reach for first: it is what the rule editor writes, what
reads back legibly, and what ListCategorisationFilters offers values for.

| Field               | Type                                           | Description                                                                                                                                                                                                                       |
| ------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| facets              | [ CategorisationFacets](#categorisationfacets) | Platform, entity type, package and kind the check must be one of.                                                                                                                                                                 |
| names               | [repeated string](#string)                     | Patterns matched against the check's name. `*` stands for any sequence of characters, including none; every other character matches literally. A check matches when at least one pattern matches. An empty list matches any name. |
| annotation\_matches | [repeated AnnotationMatch](#annotationmatch)   | Conditions on the check's annotations. A check must satisfy every entry.                                                                                                                                                          |

### CheckMatcher

(synq.entities.checks.v2.CheckMatcher)

Which checks a categorisation rule applies to.

| Field                                                                                            | Type                                               | Description                                                                                                                                                                                                                                                                        |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) matcher.attributes | [ CheckAttributesMatcher](#checkattributesmatcher) | Select checks by their attributes. Covers almost every rule and is the only form the rule editor can render.                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) matcher.expression | [ string](#string)                                 | A CEL expression returning a boolean, for the rare predicate the attribute matcher cannot express — combining alternatives across dimensions, or matching on a substring of a name. See [https://github.com/google/cel-spec](https://github.com/google/cel-spec) for the language. |

Variables available to the expression: platform, asset\_type, package, kind, name, description (string) is\_platform\_native (bool) annotations (map\<string, string>)

Platform and entity-type enum value names are available as string constants. For example: platform == PLATFORM\_DBT && kind.startsWith("not\_null") |

### CategorisationRule

(synq.entities.checks.v2.CategorisationRule)

A rule that assigns a category to every check it matches.

Rules are how a workspace categorises at scale: they apply to the checks that
exist today and to every check ingested afterwards, so nobody has to revisit
individual checks as tools publish new ones.

Rules resolve independently per dimension, and exactly one rule wins a check.
Rules are tried in this order, and the first whose matcher matches assigns
the category:

1. Scope first. Every workspace rule is tried before any platform-provided
   one, whatever their priorities are — so a workspace rule at priority 0
   still beats a global rule at priority 1000. This is what makes your own
   rules an override of the defaults rather than a competitor to them.
2. Then priority, highest number first. `priority` is a rank, not a
   position: 10 is tried before 1.
3. Then, among rules of equal scope and priority, most recently updated
   first, and finally by id. `resolution_order` reports the resulting
   position, so you never have to reproduce this ordering yourself.

A category a rule computes is used only when the check has neither a category
set explicitly on it nor one its producer declared.

| Field             | Type                                     | Description                                                                                                                                                                                                                                                           |
| ----------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                | [ string](#string)                       | Client-supplied UUID identifying the rule.                                                                                                                                                                                                                            |
| dimension         | [ CategoryDimension](#categorydimension) | The dimension this rule categorises along.                                                                                                                                                                                                                            |
| scope             | [ RuleScope](#rulescope)                 | Whether the rule belongs to the workspace or is a platform default.                                                                                                                                                                                                   |
| title             | [ string](#string)                       | Human-readable title, shown wherever the rule is credited for a category.                                                                                                                                                                                             |
| category          | [ string](#string)                       | The category assigned to matching checks.                                                                                                                                                                                                                             |
| matcher           | [ CheckMatcher](#checkmatcher)           | Which checks the rule applies to.                                                                                                                                                                                                                                     |
| priority          | [ int32](#int32)                         | Rank within the rule's scope: the highest number is tried first. Ties are broken as described above.                                                                                                                                                                  |
| resolution\_order | [ int32](#int32)                         | Position of this rule in the order rules are tried for its dimension, counting from 0 across both scopes — 0 is the rule that gets first refusal on every check. Output-only, and recomputed whenever any rule in the dimension changes.                              |
| updated\_by       | [ Actor](#actor)                         | Who last edited the rule: display name, and the account or channel they acted through. Absent on a platform-provided rule, which nobody in your workspace edited, and on a rule whose editor could not be resolved to anything a reader would recognise. Output-only. |
| etag              | [ string](#string)                       | Optimistic-concurrency token: pass it back on UpsertRule or DeleteRule to have the write rejected if the rule changed in the meantime. Form: `W/"<id>-<version>"`.                                                                                                    |
| created\_at       | [ Timestamp](#timestamp)                 | When the rule was created. Output-only.                                                                                                                                                                                                                               |
| updated\_at       | [ Timestamp](#timestamp)                 | When the rule was last updated. Output-only.                                                                                                                                                                                                                          |

### CategoryInfo

(synq.entities.checks.v2.CategoryInfo)

One category name in a workspace's vocabulary, with how it is produced and
how much of the workspace currently carries it.

Category names are free-form workspace strings, not a fixed list. Offering
this vocabulary in a picker rather than a text box is what keeps a workspace
converging on one spelling per concept.

| Field                | Type                                     | Description                                                                                                                                                                                                                                      |
| -------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| name                 | [ string](#string)                       | The category name.                                                                                                                                                                                                                               |
| dimension            | [ CategoryDimension](#categorydimension) | The dimension the name belongs to. The same name can exist on both dimensions; they are separate entries.                                                                                                                                        |
| has\_workspace\_rule | [ bool](#bool)                           | At least one rule in the caller's workspace produces this category.                                                                                                                                                                              |
| has\_global\_rule    | [ bool](#bool)                           | At least one platform-provided rule produces this category.                                                                                                                                                                                      |
| check\_count         | [ int64](#int64)                         | How many checks currently resolve to this category on this dimension, whatever produced it. A name can have rules and no checks (nothing matches yet), or checks and no rules (every one of them was categorised explicitly or by its producer). |

### DimensionSummary

(synq.entities.checks.v2.DimensionSummary)

How much of a workspace one dimension covers.

| Field                       | Type                                     | Description                                                                                   |
| --------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------- |
| dimension                   | [ CategoryDimension](#categorydimension) | The dimension summarised.                                                                     |
| categorised\_check\_count   | [ int64](#int64)                         | Checks in the workspace with a category on this dimension.                                    |
| uncategorised\_check\_count | [ int64](#int64)                         | Checks in the workspace with no category on this dimension. This is the number to drive down. |

### RecategorisationStatus

(synq.entities.checks.v2.RecategorisationStatus)

Progress of the workspace-wide re-categorisation that follows a rule change.

A rule change takes effect on newly ingested checks immediately. Checks that
already exist are rewritten by a sweep, scheduled automatically whenever
rules are created, updated or deleted; several edits in quick succession
coalesce into one sweep. The sweep normally completes in seconds, so reading
this is about confirming a change landed rather than waiting on it — until it
finishes, some checks still carry the categories the previous rules gave
them.

| Field                                                                                                       | Type                             | Description                                                                                |
| ----------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------ |
| state                                                                                                       | [ State](#state)                 | Current state of the sweep.                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scheduled\_at.scheduled\_at | [optional Timestamp](#timestamp) | When the pending sweep was queued.                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_at.started\_at     | [optional Timestamp](#timestamp) | When the current or most recent sweep started.                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_finished\_at.finished\_at   | [optional Timestamp](#timestamp) | When the most recent sweep finished.                                                       |
| scanned\_count                                                                                              | [ int64](#int64)                 | Checks examined by the current or most recent sweep.                                       |
| rewritten\_count                                                                                            | [ int64](#int64)                 | Checks whose categorisation actually changed in that sweep.                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_error.last\_error     | [optional string](#string)       | Populated when the most recent sweep failed. The next rule change schedules a fresh sweep. |

### BatchGetCheckCategoriesRequest

(synq.entities.checks.v2.BatchGetCheckCategoriesRequest)

| Field       | Type                       | Description                     |
| ----------- | -------------------------- | ------------------------------- |
| entity\_ids | [repeated string](#string) | Checks to read (1–500, unique). |

### BatchGetCheckCategoriesResponse

(synq.entities.checks.v2.BatchGetCheckCategoriesResponse)

| Field      | Type                                    | Description                                                         |
| ---------- | --------------------------------------- | ------------------------------------------------------------------- |
| categories | [map CategoriesEntry](#categoriesentry) | Category state keyed by check id. Ids that do not exist are absent. |

### BatchGetCheckCategoriesResponse.CategoriesEntry

(synq.entities.checks.v2.BatchGetCheckCategoriesResponse.CategoriesEntry)

| Field | Type                                 | Description |
| ----- | ------------------------------------ | ----------- |
| key   | [ string](#string)                   | none        |
| value | [ CheckCategories](#checkcategories) | none        |

### DeleteCheckCategoriesRequest

(synq.entities.checks.v2.DeleteCheckCategoriesRequest)

| Field                                                                                       | Type                                                     | Description                                                       |
| ------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------- |
| categories                                                                                  | [repeated CheckCategoryDeletion](#checkcategorydeletion) | The checks to clear. Every entry must name a distinct check.      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor | [optional Actor](#actor)                                 | Who is making the change. See UpsertCheckCategoriesRequest.actor. |

### DeleteCheckCategoriesResponse

(synq.entities.checks.v2.DeleteCheckCategoriesResponse)

### ListCategoriesRequest

(synq.entities.checks.v2.ListCategoriesRequest)

| Field                                                                                               | Type                                             | Description                                     |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dimension.dimension | [optional CategoryDimension](#categorydimension) | Restrict to one dimension. Omit to return both. |

### ListCategoriesResponse

(synq.entities.checks.v2.ListCategoriesResponse)

| Field      | Type                                           | Description                                                                                               |
| ---------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| categories | [repeated CategoryInfo](#categoryinfo)         | Every category name in use, sorted by name within each dimension.                                         |
| dimensions | [repeated DimensionSummary](#dimensionsummary) | Coverage per dimension, so "N of M checks categorised" can be rendered without summing the entries above. |

### ListCategorisationFiltersRequest

(synq.entities.checks.v2.ListCategorisationFiltersRequest)

| Field    | Type                                           | Description                                                                                                    |
| -------- | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| selected | [ CategorisationFacets](#categorisationfacets) | The values already chosen, if any. Each returned list is narrowed to values that co-occur with this selection. |

### ListCategorisationFiltersResponse

(synq.entities.checks.v2.ListCategorisationFiltersResponse)

| Field     | Type                                           | Description                            |
| --------- | ---------------------------------------------- | -------------------------------------- |
| available | [ CategorisationFacets](#categorisationfacets) | The values available given `selected`. |

### ListCheckCategoriesRequest

(synq.entities.checks.v2.ListCheckCategoriesRequest)

| Field                        | Type                                           | Description                                                                                                                                                                                                               |
| ---------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| technical\_filter            | [ CategorisationFilter](#categorisationfilter) | Keep only checks that are, or are not, categorised on the technical dimension.                                                                                                                                            |
| governance\_filter           | [ CategorisationFilter](#categorisationfilter) | Keep only checks that are, or are not, categorised on the governance dimension.                                                                                                                                           |
| technical\_override\_filter  | [ OverrideFilter](#overridefilter)             | Keep only checks whose technical category was, or was not, set explicitly.                                                                                                                                                |
| governance\_override\_filter | [ OverrideFilter](#overridefilter)             | Keep only checks whose governance category was, or was not, set explicitly.                                                                                                                                               |
| rule\_ids                    | [repeated string](#string)                     | Keep only checks currently categorised by one of these rules, on either dimension. This is the paginated companion to ChecksCategorisationRulesService.ListRuleMatches, which reports exact counts and a sample per rule. |
| technical\_categories        | [repeated string](#string)                     | Keep only checks whose effective technical category is one of these.                                                                                                                                                      |
| governance\_categories       | [repeated string](#string)                     | Keep only checks whose effective governance category is one of these.                                                                                                                                                     |
| attributes                   | [ CategorisationFacets](#categorisationfacets) | Keep only checks with these attributes — the same platform / entity type / package / kind selection a categorisation rule matches on, so a listing can be narrowed to exactly the checks a candidate rule would consider. |
| entity\_ids                  | [repeated string](#string)                     | Keep only these checks. Combines with the other filters, so it answers "which of these checks are uncategorised" in a single call.                                                                                        |
| pagination                   | [ Pagination](#pagination)                     | Pagination. Defaults to 200 checks per page.                                                                                                                                                                              |

### ListCheckCategoriesResponse

(synq.entities.checks.v2.ListCheckCategoriesResponse)

| Field      | Type                                         | Description                                                            |
| ---------- | -------------------------------------------- | ---------------------------------------------------------------------- |
| categories | [repeated CheckCategories](#checkcategories) | The matching checks, ordered by entity id.                             |
| page\_info | [ PageInfo](#pageinfo)                       | Pagination cursor for the next page. Empty when this is the last page. |

### UpsertCheckCategoriesRequest

(synq.entities.checks.v2.UpsertCheckCategoriesRequest)

| Field                                                                                       | Type                                                 | Description                                                                                                                                                                                                           |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| categories                                                                                  | [repeated CheckCategoryUpdate](#checkcategoryupdate) | The checks to categorise. Every entry must name a distinct check.                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor | [optional Actor](#actor)                             | Who is making the change, when the caller acts on someone's behalf — an agent, a bot, an automation. Recorded as the editor and shown back on reads. Omit it when the caller's own credentials already identify them. |

### UpsertCheckCategoriesResponse

(synq.entities.checks.v2.UpsertCheckCategoriesResponse)

| Field      | Type                                         | Description                                                          |
| ---------- | -------------------------------------------- | -------------------------------------------------------------------- |
| categories | [repeated CheckCategories](#checkcategories) | The resolved category state of each updated check, in request order. |

### RuleMatches

(synq.entities.checks.v2.RuleMatches)

The checks one categorisation rule currently categorises — the state already
applied to the workspace, not a projection of what a rule would do.

The count is always exact. The sample is a readable excerpt, not the full
set: to page through every check a rule categorised, call
ListCheckCategories with the rule's id.

| Field               | Type                       | Description                                                                                         |
| ------------------- | -------------------------- | --------------------------------------------------------------------------------------------------- |
| check\_count        | [ int64](#int64)           | How many checks the rule categorises in the workspace.                                              |
| sample\_entity\_ids | [repeated string](#string) | A sample of those checks, ordered by entity id.                                                     |
| sample\_truncated   | [ bool](#bool)             | True when the sample was cut short, meaning the rule categorises more checks than the sample shows. |

### BatchGetRulesRequest

(synq.entities.checks.v2.BatchGetRulesRequest)

| Field | Type                       | Description                       |
| ----- | -------------------------- | --------------------------------- |
| ids   | [repeated string](#string) | Rule ids to read (1–200, unique). |

### BatchGetRulesResponse

(synq.entities.checks.v2.BatchGetRulesResponse)

| Field | Type                          | Description                                                                     |
| ----- | ----------------------------- | ------------------------------------------------------------------------------- |
| rules | [map RulesEntry](#rulesentry) | Rules keyed by id. Ids the caller cannot see, or that do not exist, are absent. |

### BatchGetRulesResponse.RulesEntry

(synq.entities.checks.v2.BatchGetRulesResponse.RulesEntry)

| Field | Type                                       | Description |
| ----- | ------------------------------------------ | ----------- |
| key   | [ string](#string)                         | none        |
| value | [ CategorisationRule](#categorisationrule) | none        |

### DeleteRuleRequest

(synq.entities.checks.v2.DeleteRuleRequest)

| Field                                                                                       | Type                       | Description                                            |
| ------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------ |
| id                                                                                          | [ string](#string)         | Id of the rule to delete.                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag   | [optional string](#string) | Optional optimistic-concurrency guard.                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor | [optional Actor](#actor)   | Who is making the change. See UpsertRuleRequest.actor. |

### DeleteRuleResponse

(synq.entities.checks.v2.DeleteRuleResponse)

### GetRecategorisationStatusRequest

(synq.entities.checks.v2.GetRecategorisationStatusRequest)

### GetRecategorisationStatusResponse

(synq.entities.checks.v2.GetRecategorisationStatusResponse)

| Field  | Type                                               | Description                               |
| ------ | -------------------------------------------------- | ----------------------------------------- |
| status | [ RecategorisationStatus](#recategorisationstatus) | Progress of the caller's workspace sweep. |

### ListRuleMatchesRequest

(synq.entities.checks.v2.ListRuleMatchesRequest)

| Field                                                                                                     | Type                       | Description                                                                                                                                            |
| --------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| rule\_ids                                                                                                 | [repeated string](#string) | Rules to report on. Empty returns every rule that currently categorises at least one check.                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sample\_size.sample\_size | [optional int32](#int32)   | How many check ids to return per rule as a sample. Defaults to 100, and may be 0 for counts only. The counts are always exact whatever this is set to. |

### ListRuleMatchesResponse

(synq.entities.checks.v2.ListRuleMatchesResponse)

| Field   | Type                              | Description                                                                   |
| ------- | --------------------------------- | ----------------------------------------------------------------------------- |
| matches | [map MatchesEntry](#matchesentry) | Matches keyed by rule id. Rules that currently categorise nothing are absent. |

### ListRuleMatchesResponse.MatchesEntry

(synq.entities.checks.v2.ListRuleMatchesResponse.MatchesEntry)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| key   | [ string](#string)           | none        |
| value | [ RuleMatches](#rulematches) | none        |

### ListRulesRequest

(synq.entities.checks.v2.ListRulesRequest)

| Field                                                                                               | Type                                             | Description                                                                                  |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dimension.dimension | [optional CategoryDimension](#categorydimension) | Restrict to one dimension. Omit to return both.                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scope.scope         | [optional RuleScope](#rulescope)                 | Restrict to the workspace's own rules or to the platform-provided ones. Omit to return both. |
| pagination                                                                                          | [ Pagination](#pagination)                       | Pagination. Defaults to 200 rules per page.                                                  |

### ListRulesResponse

(synq.entities.checks.v2.ListRulesResponse)

| Field      | Type                                               | Description                                                                                                              |
| ---------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| rules      | [repeated CategorisationRule](#categorisationrule) | Matching rules, in the order they are tried: workspace rules before platform-provided ones, then by descending priority. |
| page\_info | [ PageInfo](#pageinfo)                             | Pagination cursor for the next page. Empty when this is the last page.                                                   |

### PreviewRuleRequest

(synq.entities.checks.v2.PreviewRuleRequest)

| Field                                                                                                     | Type                                     | Description                                                                                                                                                                                                                                                                                |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_id.id                     | [optional string](#string)               | Set to an existing rule's id to preview an edit to it — the candidate replaces that rule during resolution, so the result reflects the change rather than the addition of a second rule. Omit to preview a new rule.                                                                       |
| dimension                                                                                                 | [ CategoryDimension](#categorydimension) | The dimension the candidate would categorise along.                                                                                                                                                                                                                                        |
| scope                                                                                                     | [ RuleScope](#rulescope)                 | Scope the candidate would be saved with. Defaults to RULE\_SCOPE\_WORKSPACE.                                                                                                                                                                                                               |
| title                                                                                                     | [ string](#string)                       | Title the candidate would be saved with. Does not affect the outcome.                                                                                                                                                                                                                      |
| category                                                                                                  | [ string](#string)                       | The category the candidate would assign.                                                                                                                                                                                                                                                   |
| matcher                                                                                                   | [ CheckMatcher](#checkmatcher)           | Which checks the candidate would apply to.                                                                                                                                                                                                                                                 |
| priority                                                                                                  | [ int32](#int32)                         | Priority the candidate would be saved with. It participates in resolution exactly as it would once saved, so previewing at the wrong priority reports the wrong impact.                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sample\_size.sample\_size | [optional int32](#int32)                 | How many check ids to return in each of the response's samples — it caps `affected_entity_ids` and `explicit_category_entity_ids` independently, so either may come back at this size. Defaults to 100, and may be 0 for counts only. The counts are always exact whatever this is set to. |

### PreviewRuleResponse

(synq.entities.checks.v2.PreviewRuleResponse)

| Field                                      | Type                       | Description                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| matched\_count                             | [ int64](#int64)           | Checks whose predicate the candidate matches at all — its raw reach, whether or not it ends up winning them.                                                                                                                                                                                                              |
| affected\_count                            | [ int64](#int64)           | Checks whose effective category on the candidate's dimension would actually change. This is the rule's real impact. It equals newly\_categorised\_count + reassigned\_count, and matched\_count equals this plus unchanged\_count.                                                                                        |
| newly\_categorised\_count                  | [ int64](#int64)           | Of the affected checks, how many have no category on this dimension today.                                                                                                                                                                                                                                                |
| reassigned\_count                          | [ int64](#int64)           | Of the affected checks, how many already have a different category that the candidate would take over. Worth a second look before saving.                                                                                                                                                                                 |
| unchanged\_count                           | [ int64](#int64)           | Checks the candidate matches whose effective category would not change. The three fields below say why, and add up to this one.                                                                                                                                                                                           |
| affected\_entity\_ids                      | [repeated string](#string) | A sample of the affected checks, ordered by entity id.                                                                                                                                                                                                                                                                    |
| affected\_entity\_ids\_truncated           | [ bool](#bool)             | True when the sample was cut short by `sample_size`.                                                                                                                                                                                                                                                                      |
| higher\_priority\_rule\_count              | [ int64](#int64)           | Of the unchanged checks, how many a rule of higher priority already wins, so the candidate never gets to assign anything. Raise the candidate's priority to take these over.                                                                                                                                              |
| explicit\_category\_count                  | [ int64](#int64)           | Of the unchanged checks, how many carry a category set explicitly on the check, or declared by the tool that produced it. Either outranks every rule, so these are the checks the candidate looks like it covers and does not — no priority will win them. Clear the explicit category to hand a check back to the rules. |
| same\_category\_count                      | [ int64](#int64)           | Of the unchanged checks, how many the candidate does win, assigning the category the check already has. Nothing to do about these; the rule is simply agreeing with what is there.                                                                                                                                        |
| explicit\_category\_entity\_ids            | [repeated string](#string) | A sample of the checks counted in `explicit_category_count`, ordered by entity id — the ones worth showing a customer, because a rule that reads as covering them does not.                                                                                                                                               |
| explicit\_category\_entity\_ids\_truncated | [ bool](#bool)             | True when that sample was cut short by `sample_size`.                                                                                                                                                                                                                                                                     |

### UpsertRuleRequest

(synq.entities.checks.v2.UpsertRuleRequest)

| Field                                                                                               | Type                                             | Description                                                                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                  | [ string](#string)                               | Client-supplied UUID identifying the rule. The same id updates the same rule; a new id creates a new rule.                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dimension.dimension | [optional CategoryDimension](#categorydimension) | The dimension the rule categorises along. Required when creating; omit to keep it on update.                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scope.scope         | [optional RuleScope](#rulescope)                 | Scope of the rule. Defaults to RULE\_SCOPE\_WORKSPACE when creating; omit to keep it on update. Platform-provided rules cannot be edited from a workspace.                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title         | [optional string](#string)                       | Human-readable title, shown wherever the rule is credited for a category. Required when creating; omit to keep it on update.                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category   | [optional string](#string)                       | The category assigned to matching checks. Required when creating; omit to keep it on update. Prefer a name the workspace already uses — read them from ChecksCategoriesService.ListCategories.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_matcher.matcher     | [optional CheckMatcher](#checkmatcher)           | Which checks the rule applies to. Required when creating; omit to keep it on update. Replaces the previous matcher wholesale — there is no partial update within a matcher.                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_priority.priority   | [optional int32](#int32)                         | Rank within the rule's scope: the highest number is tried first. Defaults to 0 when creating; omit to keep it on update.                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag           | [optional string](#string)                       | Optional optimistic-concurrency guard. When set, the write fails with a conflict if the rule was modified since this etag was read.                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor         | [optional Actor](#actor)                         | Who is making the change, when the caller acts on someone's behalf — an agent, a bot, an automation. Recorded as the editor and shown back on reads. Omit it when the caller's own credentials already identify them. |

### UpsertRuleResponse

(synq.entities.checks.v2.UpsertRuleResponse)

| Field | Type                                       | Description                      |
| ----- | ------------------------------------------ | -------------------------------- |
| rule  | [ CategorisationRule](#categorisationrule) | The stored rule after the write. |

### CheckCategories

(synq.entities.checks.v2.CheckCategories)

The category state of a single check, on both dimensions.

| Field       | Type                                   | Description                                                                                                                                                                                                                                                                                                 |
| ----------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity\_id  | [ string](#string)                     | The check this describes. Treat it as opaque: acquire it from a listing or from IdentifierResolveService and pass it back unchanged.                                                                                                                                                                        |
| technical   | [ ResolvedCategory](#resolvedcategory) | Technical category — what kind of check this is, mechanically.                                                                                                                                                                                                                                              |
| governance  | [ ResolvedCategory](#resolvedcategory) | Governance category — what the check is for.                                                                                                                                                                                                                                                                |
| check       | [ CheckSummary](#checksummary)         | What the check is, so a listing is actionable on its own. Absent for a check that carries an explicit category but is not (or is no longer) present in the catalogue.                                                                                                                                       |
| etag        | [ string](#string)                     | Optimistic-concurrency token covering the categories set explicitly on this check. Pass it back on UpsertCheckCategories or DeleteCheckCategories to have the write rejected if someone changed them in the meantime. Empty when the check carries no explicit category. Form: `W/"<entity_id>-<version>"`. |
| updated\_by | [ Actor](#actor)                       | Who last set the explicit categories: display name, and the account or channel they acted through. Absent when no explicit categories are set, and when the setter could not be resolved to anything a reader would recognise.                                                                              |
| updated\_at | [ Timestamp](#timestamp)               | When the explicit categories were last changed. Absent when none are set.                                                                                                                                                                                                                                   |

### CheckCategoryDeletion

(synq.entities.checks.v2.CheckCategoryDeletion)

One check whose explicit categories should be cleared, on both dimensions.

| Field                                                                                     | Type                       | Description                                                                             |
| ----------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------- |
| entity\_id                                                                                | [ string](#string)         | The check to clear.                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard, with the same meaning as on CheckCategoryUpdate. |

### CheckCategoryUpdate

(synq.entities.checks.v2.CheckCategoryUpdate)

The categories to set explicitly on one check.

Each dimension is updated independently, and presence is meaningful: omit a
field to leave that dimension as it is, send an empty string to clear it so
the check falls back to its producer-declared or rule-computed value, send a
non-empty string to set or replace it.

| Field                                                                                                 | Type                       | Description                                                                                                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity\_id                                                                                            | [ string](#string)         | The check to categorise.                                                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_technical.technical   | [optional string](#string) | Technical category to set — what kind of check this is, mechanically.                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance.governance | [optional string](#string) | Governance category to set — what the check is for.                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag             | [optional string](#string) | Optional optimistic-concurrency guard. When set, the write fails with a conflict if the check's explicit categories changed since this etag was read. Pass an empty string to require that the check has no explicit category yet, which turns the write into a create-only operation. |

### ComputedCategory

(synq.entities.checks.v2.ComputedCategory)

What the workspace's categorisation rules compute for a check on one
dimension, whatever ends up in effect.

| Field       | Type               | Description                                                                                                                              |
| ----------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| category    | [ string](#string) | The category the rule assigns.                                                                                                           |
| rule\_id    | [ string](#string) | The rule that assigns it. Pass it to BatchGetRules to read the rule, or to ListCheckCategories to list every check the rule categorised. |
| rule\_title | [ string](#string) | Title of that rule, so it can be named without a second call.                                                                            |

### ResolvedCategory

(synq.entities.checks.v2.ResolvedCategory)

The category a check resolves to on one dimension, together with where that
value came from.

Reading `source` matters as much as reading `category`: a value that came
from a rule changes when the rules change, while one set explicitly on the
check stays until someone clears it.

| Field       | Type                                   | Description                                                                                                                                                                                                 |
| ----------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| category    | [ string](#string)                     | The category in effect. Empty when the check is uncategorised on this dimension.                                                                                                                            |
| source      | [ CategorySource](#categorysource)     | Which of the three sources produced `category`.                                                                                                                                                             |
| override    | [ string](#string)                     | The category set explicitly on the check, if any. Populated whatever the effective value is, so you can tell an explicit category apart from the one it replaced. Empty when none is set.                   |
| rule\_id    | [ string](#string)                     | The rule that computed the category. Populated only when `source` is CATEGORY\_SOURCE\_RULE; pass it to BatchGetRules to read the rule, or to ListCheckCategories to list every check the rule categorised. |
| rule\_title | [ string](#string)                     | Title of the rule named by `rule_id`, so "categorised by …" can be rendered without a second call.                                                                                                          |
| rule\_scope | [ RuleScope](#rulescope)               | Whether the rule that won is one of the workspace's own or a platform-provided default. Populated only when `source` is CATEGORY\_SOURCE\_RULE.                                                             |
| computed    | [ ComputedCategory](#computedcategory) | What the categorisation rules compute for this check, populated whenever a rule matches it at all.                                                                                                          |

When `source` is CATEGORY\_SOURCE\_RULE this is the value in effect and repeats `category`. When a category set explicitly on the check, or one its producer declared, is standing in front of the rules, this is what the check falls back to once that is cleared — the one part of the resolution a client cannot work out from the fields above. Absent when no rule matches. |

### CheckEntity

(synq.entities.checks.v1.CheckEntity)

| Field                                                                                                                     | Type                                   | Description                                                                                                                                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| check\_id                                                                                                                 | [ Identifier](#identifier)             | Identifier of the check                                                                                                                                                                                            |
| name                                                                                                                      | [ string](#string)                     | The name of the check                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_package.package                           | [optional string](#string)             | The package of the check, e.g. "dbt", "sqlmesh", "dbt-utils"                                                                                                                                                       |
| kind                                                                                                                      | [ string](#string)                     | General kind of the test, e.g. "not\_null", "unique", "foreign\_key"                                                                                                                                               |
| entity\_type                                                                                                              | [ EntityType](#entitytype)             | Entity type of the check itself, e.g. ENTITY\_TYPE\_DBT\_TEST. ENTITY\_TYPE\_UNSPECIFIED when the type is unknown.                                                                                                 |
| data\_platform\_type                                                                                                      | [ DataPlatformType](#dataplatformtype) | Platform the check runs on, e.g. DATA\_PLATFORM\_TYPE\_DBT. DATA\_PLATFORM\_TYPE\_UNSPECIFIED when the platform is unknown.                                                                                        |
| is\_platform\_native                                                                                                      | [ bool](#bool)                         | Whether the check is platform native                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category                         | [optional string](#string)             | Technical category to use for this check — what kind of check it is, mechanically, e.g. "nullness". Empty when the check declares none, in which case the category a categorisation rule computes is used instead. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string)             | Governance category to use for this check — what the check is for, e.g. "Completeness". Empty when the check declares none, in which case the category a categorisation rule computes is used instead.             |

### CheckCategory

(synq.entities.checks.v1.CheckCategory)

CheckCategory is the complete explicit category state for one check,
carrying both dimensions. It overrides the categories the
categorisation rules would otherwise compute for the check.

| Field                | Type                     | Description                                                                                                                                                                                                   |
| -------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| check\_path          | [ string](#string)       | check\_path of the check this applies to (matches the check's identifier in the catalogue).                                                                                                                   |
| category             | [ string](#string)       | Explicit technical category (empty = no explicit technical category; the rule-computed one is used instead).                                                                                                  |
| governance\_category | [ string](#string)       | Explicit governance category (empty = no explicit governance category; the rule-computed one is used instead).                                                                                                |
| updated\_by          | [ Actor](#actor)         | Who last set this category: display name, and the account or channel they acted through. Absent when the setter could not be resolved to anything a reader would recognise. Server-derived; ignored on input. |
| updated\_at          | [ Timestamp](#timestamp) | When this category was last updated. Server-set; ignored on input.                                                                                                                                            |

### DeleteCheckCategoriesRequest

(synq.entities.checks.v1.DeleteCheckCategoriesRequest)

| Field        | Type                       | Description                                                                 |
| ------------ | -------------------------- | --------------------------------------------------------------------------- |
| check\_paths | [repeated string](#string) | check\_paths whose explicit categories (both dimensions) should be cleared. |

### DeleteCheckCategoriesResponse

(synq.entities.checks.v1.DeleteCheckCategoriesResponse)

### ListCheckCategoriesRequest

(synq.entities.checks.v1.ListCheckCategoriesRequest)

### ListCheckCategoriesResponse

(synq.entities.checks.v1.ListCheckCategoriesResponse)

| Field      | Type                                     | Description |
| ---------- | ---------------------------------------- | ----------- |
| categories | [repeated CheckCategory](#checkcategory) | none        |

### UpsertCheckCategoriesRequest

(synq.entities.checks.v1.UpsertCheckCategoriesRequest)

| Field      | Type                                     | Description |
| ---------- | ---------------------------------------- | ----------- |
| categories | [repeated CheckCategory](#checkcategory) | none        |

### UpsertCheckCategoriesResponse

(synq.entities.checks.v1.UpsertCheckCategoriesResponse)

| Field      | Type                                     | Description                                                 |
| ---------- | ---------------------------------------- | ----------------------------------------------------------- |
| categories | [repeated CheckCategory](#checkcategory) | Echoed categories with the server-set editor and timestamp. |

### GetCoverageRequest

(synq.entities.checks.v1.GetCoverageRequest)

GetCoverageRequest contains the parameters needed to retrieve check coverage for a specific entity.

| Field               | Type                                     | Description                                                                                                                            |
| ------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| id                  | [ Identifier](#identifier)               | Identifier of the entity to get checks coverage for. This can be a path identifier that uniquely identifies the entity in the system.  |
| propagation\_filter | [ PropagationFilter](#propagationfilter) | Filter to control which checks are included in the coverage response. Default (UNSPECIFIED) returns both direct and propagated checks. |

### GetCoverageResponse

(synq.entities.checks.v1.GetCoverageResponse)

GetCoverageResponse contains the check coverage information for the requested entity.

| Field    | Type                             | Description                                                 |
| -------- | -------------------------------- | ----------------------------------------------------------- |
| coverage | [ ChecksSummary](#checkssummary) | The complete coverage information for the requested entity. |

### GetCoverageResponse.ChecksSummary

(synq.entities.checks.v1.GetCoverageResponse.ChecksSummary)

ChecksSummary provides a comprehensive overview of checks and their coverage.

| Field                     | Type                                                   | Description                                                   |
| ------------------------- | ------------------------------------------------------ | ------------------------------------------------------------- |
| all\_columns              | [repeated string](#string)                             | List of all column names in the entity.                       |
| table\_checks             | [repeated CheckEntity](#checkentity)                   | List of table-level checks applied to this entity.            |
| propagated\_table\_checks | [repeated PropagatedTableCheck](#propagatedtablecheck) | List of table-level checks propagated from upstream entities. |
| column\_info              | [repeated ColumnInformation](#columninformation)       | Detailed information about each column in the entity.         |

### GetCoverageResponse.ChecksSummary.ColumnInformation

(synq.entities.checks.v1.GetCoverageResponse.ChecksSummary.ColumnInformation)

ColumnInformation contains detailed information about a specific column.

| Field                       | Type                                                     | Description                                                                |
| --------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
| name                        | [ string](#string)                                       | Human readable name of the column as present in dbt or data warehouse.     |
| native\_type                | [ string](#string)                                       | Native data type of the column as present in data warehouse.               |
| direct\_check\_entities     | [repeated CheckEntity](#checkentity)                     | Checks running on current model on this column                             |
| propagated\_check\_entities | [repeated PropagatedColumnCheck](#propagatedcolumncheck) | Checks running on upstream model column, where this is a passthrough of it |
| is\_transformed             | [ bool](#bool)                                           | Indicates that there is an expression transforming the data                |
| is\_renamed                 | [ bool](#bool)                                           | Indicates that there is a rename operation                                 |
| is\_passthrough             | [ bool](#bool)                                           | Indicates that there is no transformation or rename                        |
| used\_by\_downstream        | [ bool](#bool)                                           | Is this column used by any downstream model column                         |
| referenced\_by\_downstream  | [ bool](#bool)                                           | Is any downstream model referencing this column e.g. in WHERE              |
| using\_upstream             | [ bool](#bool)                                           | Does this column pull any data from upstream                               |
| referencing\_upstream       | [ bool](#bool)                                           | Does this column reference any columns in upstream                         |
| downstream\_usage           | [ ColumnUsage](#columnusage)                             | Statistics about column impact                                             |

### GetCoverageResponse.ColumnUpstream

(synq.entities.checks.v1.GetCoverageResponse.ColumnUpstream)

ColumnUpstream represents an upstream column that a check is propagated from.

| Field  | Type                       | Description                                |
| ------ | -------------------------- | ------------------------------------------ |
| id     | [ Identifier](#identifier) | Identifier of the upstream entity.         |
| column | [ string](#string)         | Name of the column in the upstream entity. |

### GetCoverageResponse.ColumnUsage

(synq.entities.checks.v1.GetCoverageResponse.ColumnUsage)

ColumnUsage contains statistics about how a column is used by downstream entities.

| Field                       | Type             | Description                                                                    |
| --------------------------- | ---------------- | ------------------------------------------------------------------------------ |
| used\_as\_data\_direct      | [ int32](#int32) | Number of times this column is directly used as data.                          |
| used\_as\_data\_cumulative  | [ int32](#int32) | Total number of times this column is used as data (including indirect usage).  |
| used\_as\_logic\_direct     | [ int32](#int32) | Number of times this column is directly used in logic (e.g., WHERE clauses).   |
| used\_as\_logic\_cumulative | [ int32](#int32) | Total number of times this column is used in logic (including indirect usage). |

### GetCoverageResponse.PropagatedColumnCheck

(synq.entities.checks.v1.GetCoverageResponse.PropagatedColumnCheck)

PropagatedColumnCheck represents a check that is propagated from an upstream column.

| Field       | Type                                       | Description                                                |
| ----------- | ------------------------------------------ | ---------------------------------------------------------- |
| check       | [ CheckEntity](#checkentity)               | The check entity being propagated.                         |
| propagation | [repeated ColumnUpstream](#columnupstream) | List of upstream columns where this check originates from. |

### GetCoverageResponse.PropagatedColumnChecks

(synq.entities.checks.v1.GetCoverageResponse.PropagatedColumnChecks)

PropagatedColumnChecks contains a list of checks propagated from upstream columns.

| Field  | Type                                                     | Description                       |
| ------ | -------------------------------------------------------- | --------------------------------- |
| checks | [repeated PropagatedColumnCheck](#propagatedcolumncheck) | List of propagated column checks. |

### GetCoverageResponse.PropagatedTableCheck

(synq.entities.checks.v1.GetCoverageResponse.PropagatedTableCheck)

PropagatedTableCheck represents a check that is propagated from an upstream table.

| Field         | Type                               | Description                                                           |
| ------------- | ---------------------------------- | --------------------------------------------------------------------- |
| check         | [ CheckEntity](#checkentity)       | The check entity being propagated.                                    |
| upstream\_ids | [repeated Identifier](#identifier) | List of upstream entity identifiers where this check originates from. |

### GetTableConstraintsRequest

(synq.entities.constraints.v1.GetTableConstraintsRequest)

| Field | Type                       | Description                                      |
| ----- | -------------------------- | ------------------------------------------------ |
| id    | [ Identifier](#identifier) | Identifier of the entity to get constraints for. |

### GetTableConstraintsResponse

(synq.entities.constraints.v1.GetTableConstraintsResponse)

| Field              | Type                                         | Description                                                                                                                                                                                            |
| ------------------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                 | [ Identifier](#identifier)                   | Identifier of the entity whose constraints are returned. May differ from the requested identifier if identity resolution mapped the request to an underlying table (e.g. dbt model → warehouse table). |
| synq\_path         | [ string](#string)                           | Coalesce Quality path of the resolved entity.                                                                                                                                                          |
| constraints        | [repeated TableConstraint](#tableconstraint) | Constraints and indexes defined on the table.                                                                                                                                                          |
| database\_instance | [ string](#string)                           | Database coordinates of the table whose constraints are returned.                                                                                                                                      |
| database\_name     | [ string](#string)                           | none                                                                                                                                                                                                   |
| schema\_name       | [ string](#string)                           | none                                                                                                                                                                                                   |
| object\_name       | [ string](#string)                           | none                                                                                                                                                                                                   |

### BatchSqlDetailsRequest

(synq.entities.sql\_insights.v1.BatchSqlDetailsRequest)

BatchSqlDetailsRequest requests SQL details for a set of entities.

| Field | Type                       | Description                                                                                                                                                                   |
| ----- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| paths | [repeated string](#string) | The synq paths of the entities to fetch SQL details for. A synq path uniquely identifies an entity and can be obtained from the `synq_paths` field of other entity responses. |

### BatchSqlDetailsResponse

(synq.entities.sql\_insights.v1.BatchSqlDetailsResponse)

BatchSqlDetailsResponse maps each requested synq path to its SQL details.

| Field        | Type                                    | Description                                                            |
| ------------ | --------------------------------------- | ---------------------------------------------------------------------- |
| sql\_details | [map SqlDetailsEntry](#sqldetailsentry) | SQL details keyed by synq path. Paths with no SQL details are omitted. |

### BatchSqlDetailsResponse.SqlDetailsEntry

(synq.entities.sql\_insights.v1.BatchSqlDetailsResponse.SqlDetailsEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ SqlDetails](#sqldetails) | none        |

### ListSqlConstructsRequest

(synq.entities.sql\_insights.v1.ListSqlConstructsRequest)

ListSqlConstructsRequest has no fields: the result is scoped to the workspace
of the authenticated request.

### ListSqlConstructsResponse

(synq.entities.sql\_insights.v1.ListSqlConstructsResponse)

ListSqlConstructsResponse carries the per-construct occurrence counts for the
workspace.

| Field           | Type                                             | Description                                                          |
| --------------- | ------------------------------------------------ | -------------------------------------------------------------------- |
| sql\_constructs | [repeated SqlConstructCount](#sqlconstructcount) | One entry per construct that appears at least once in the workspace. |

### ListSqlConstructsResponse.SqlConstructCount

(synq.entities.sql\_insights.v1.ListSqlConstructsResponse.SqlConstructCount)

SqlConstructCount pairs a SQL construct with the number of entities in the
workspace whose SQL uses it.

| Field          | Type                           | Description                                            |
| -------------- | ------------------------------ | ------------------------------------------------------ |
| sql\_construct | [ SqlConstruct](#sqlconstruct) | The SQL construct being counted.                       |
| count          | [ int32](#int32)               | How many entities in the workspace use this construct. |

### SqlDetails

(synq.entities.sql\_insights.v1.SqlDetails)

SqlDetails describes the SQL used by a single entity.

| Field           | Type                                   | Description                                                                                                                                                                                                      |
| --------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| path            | [ string](#string)                     | The synq path of the entity these details belong to.                                                                                                                                                             |
| sql\_constructs | [repeated SqlConstruct](#sqlconstruct) | The set of SQL constructs detected in the entity's SQL. Multiple constructs can be present on a single entity (e.g. a query with both a CTE and an INNER JOIN reports HAS\_CTE, HAS\_ANY\_JOIN and INNER\_JOIN). |

### EntityIncident

(synq.entities.status.v1.EntityIncident)

| Field        | Type                     | Description                                               |
| ------------ | ------------------------ | --------------------------------------------------------- |
| id           | [ string](#string)       | Unique identifier of the incident.                        |
| url          | [ string](#string)       | URL of the incident.                                      |
| name         | [ string](#string)       | Name of the incident give by the user.                    |
| created\_by  | [ string](#string)       | Information about author of the incident.                 |
| created\_at  | [ Timestamp](#timestamp) | Time when the incident was created.                       |
| updated\_by  | [ string](#string)       | Information about the user who last updated the incident. |
| updated\_at  | [ Timestamp](#timestamp) | Time when the incident was last updated.                  |
| is\_resolved | [ bool](#bool)           | Indicates if all issues inside the incident are resolved. |

### BatchGetIncidentsRequest

(synq.entities.status.v1.BatchGetIncidentsRequest)

BatchGetIncidentsRequest is the request message for the BatchGetIssues method.

| Field    | Type                                                 | Description |
| -------- | ---------------------------------------------------- | ----------- |
| requests | [repeated GetIncidentsRequest](#getincidentsrequest) | none        |

### BatchGetIncidentsResponse

(synq.entities.status.v1.BatchGetIncidentsResponse)

BatchGetIncidentsResponse is the response message for the BatchGetIssues method.

| Field     | Type                                                   | Description |
| --------- | ------------------------------------------------------ | ----------- |
| responses | [repeated GetIncidentsResponse](#getincidentsresponse) | none        |

### GetIncidentsRequest

(synq.entities.status.v1.GetIncidentsRequest)

GetIncidentsRequest is the request message for the GetEntity method.

| Field                      | Type                       | Description                                    |
| -------------------------- | -------------------------- | ---------------------------------------------- |
| id                         | [ Identifier](#identifier) | Identifier of the entity to get incidents for. |
| fetch\_upstream\_incidents | [ bool](#bool)             | Retrieve incidents of upstream entities.       |

### GetIncidentsResponse

(synq.entities.status.v1.GetIncidentsResponse)

GetIncidentsResponse is the response message for the GetEntity method.

| Field                     | Type                                       | Description                                                        |
| ------------------------- | ------------------------------------------ | ------------------------------------------------------------------ |
| id                        | [ Identifier](#identifier)                 | Identifier of the entity.                                          |
| entity\_open\_incidents   | [repeated EntityIncident](#entityincident) | Open incident associated with the entity requested.                |
| upstream\_open\_incidents | [repeated EntityIncident](#entityincident) | Open incidents associated with the upstream entities if requested. |

### BatchGetIssuesStatusRequest

(synq.entities.status.v1.BatchGetIssuesStatusRequest)

BatchGetIssuesStatusRequest is the request message for the BatchGetIssues method.

| Field    | Type                                                       | Description |
| -------- | ---------------------------------------------------------- | ----------- |
| requests | [repeated GetIssuesStatusRequest](#getissuesstatusrequest) | none        |

### BatchGetIssuesStatusResponse

(synq.entities.status.v1.BatchGetIssuesStatusResponse)

BatchGetIssuesStatusResponse is the response message for the BatchGetIssues method.

| Field     | Type                                                         | Description |
| --------- | ------------------------------------------------------------ | ----------- |
| responses | [repeated GetIssuesStatusResponse](#getissuesstatusresponse) | none        |

### GetIssuesStatusRequest

(synq.entities.status.v1.GetIssuesStatusRequest)

GetIssuesStatusRequest is the request message for the GetEntity method.

| Field                   | Type                       | Description                                 |
| ----------------------- | -------------------------- | ------------------------------------------- |
| id                      | [ Identifier](#identifier) | Identifier of the entity to get status for. |
| fetch\_upstream\_status | [ bool](#bool)             | Retrieve status of upstream entities.       |

### GetIssuesStatusResponse

(synq.entities.status.v1.GetIssuesStatusResponse)

GetIssuesStatusResponse is the response message for the GetEntity method.

| Field                     | Type                             | Description                                      |
| ------------------------- | -------------------------------- | ------------------------------------------------ |
| id                        | [ Identifier](#identifier)       | Identifier of the entity.                        |
| entity\_issues\_status    | [ IssueStatus](#issuestatus)     | Status of the entity requested.                  |
| entity\_issues\_summary   | [ IssuesSummary](#issuessummary) | none                                             |
| upstream\_issues\_status  | [ IssueStatus](#issuestatus)     | Optionally, the status of all upstream entities. |
| upstream\_issues\_summary | [ IssuesSummary](#issuessummary) | none                                             |

### GetIssuesStatusResponse.IssuesSummary

(synq.entities.status.v1.GetIssuesStatusResponse.IssuesSummary)

| Field           | Type             | Description                                             |
| --------------- | ---------------- | ------------------------------------------------------- |
| total\_count    | [ int32](#int32) | Number of issues for the entity.                        |
| warn\_count     | [ int32](#int32) | Number of issues for the entity with status 'warn'.     |
| error\_count    | [ int32](#int32) | Number of issues for the entity with status 'error'.    |
| critical\_count | [ int32](#int32) | Number of issues for the entity with status 'critical'. |

### BatchGetEntitiesRequest

(synq.entities.entities.v1.BatchGetEntitiesRequest)

BatchGetEntitiesRequest is the request message for the BatchGetEntities method.

| Field | Type                               | Description                         |
| ----- | ---------------------------------- | ----------------------------------- |
| ids   | [repeated Identifier](#identifier) | Identifiers of the entities to get. |

### BatchGetEntitiesResponse

(synq.entities.entities.v1.BatchGetEntitiesResponse)

BatchGetEntitiesResponse is the response message for the BatchGetEntities method.

| Field    | Type                       | Description                       |
| -------- | -------------------------- | --------------------------------- |
| entities | [repeated Entity](#entity) | The entities that were retrieved. |

### GetEntityRequest

(synq.entities.entities.v1.GetEntityRequest)

GetEntityRequest is the request message for the GetEntity method.

| Field | Type                       | Description                      |
| ----- | -------------------------- | -------------------------------- |
| id    | [ Identifier](#identifier) | Identifier of the entity to get. |

### GetEntityResponse

(synq.entities.entities.v1.GetEntityResponse)

GetEntityResponse is the response message for the GetEntity method.

| Field  | Type               | Description                    |
| ------ | ------------------ | ------------------------------ |
| entity | [ Entity](#entity) | The entity that was retrieved. |

### ListEntitiesRequest

(synq.entities.entities.v1.ListEntitiesRequest)

| Field      | Type                       | Description |
| ---------- | -------------------------- | ----------- |
| query      | [ Query](#query)           | none        |
| pagination | [ Pagination](#pagination) | none        |

### ListEntitiesResponse

(synq.entities.entities.v1.ListEntitiesResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| page\_info  | [ PageInfo](#pageinfo)             | none        |
| entity\_ids | [repeated Identifier](#identifier) | none        |

### SearchEntitiesRequest

(synq.entities.entities.v1.SearchEntitiesRequest)

| Field                                                                                                             | Type                               | Description                                                                                        |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------- |
| query                                                                                                             | [ string](#string)                 | Full text search query, it will search in name but also in description and columns of the entities |
| limit\_to\_types                                                                                                  | [repeated EntityType](#entitytype) | Limit results to specific entity types, leave empty to use only the query                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_page.page                         | [optional uint32](#uint32)         | none                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_limit\_per\_page.limit\_per\_page | [optional uint32](#uint32)         | none                                                                                               |

### SearchEntitiesResponse

(synq.entities.entities.v1.SearchEntitiesResponse)

| Field                   | Type                                                     | Description                                           |
| ----------------------- | -------------------------------------------------------- | ----------------------------------------------------- |
| hits                    | [repeated SearchHit](#searchhit)                         | The entities that were retrieved.                     |
| estimated\_total\_hits  | [ uint64](#uint64)                                       | Estimated number of all search results                |
| entity\_type\_estimates | [repeated EntityTypeSearchFacet](#entitytypesearchfacet) | Estimated number of all search results by entity type |

### EntityTypeSearchFacet

(synq.entities.entities.v1.EntityTypeSearchFacet)

| Field        | Type                       | Description |
| ------------ | -------------------------- | ----------- |
| entity\_type | [ EntityType](#entitytype) | none        |
| count        | [ uint32](#uint32)         | none        |

### SearchHit

(synq.entities.entities.v1.SearchHit)

| Field                                                                                                     | Type                               | Description                                             |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------- |
| name                                                                                                      | [ string](#string)                 | Name of the found entity with optional folder like path |
| description                                                                                               | [ string](#string)                 | Description is used for display and search              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entity\_id.entity\_id     | [optional Identifier](#identifier) | Identifier of the entity                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_synq\_path.synq\_path     | [optional string](#string)         | Coalesce Quality path, as used in frontend              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entity\_type.entity\_type | [optional EntityType](#entitytype) | Information about entity type                           |
| ranking\_score                                                                                            | [ float](#float)                   | Ranking score, higher is better                         |

### BatchOrchestrationRequest

(synq.entities.orchestration.v1.BatchOrchestrationRequest)

| Field    | Type                               | Description                                                                                                 |
| -------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| entities | [repeated Identifier](#identifier) | Entities to query for orchestration relationships (e.g., Airflow tasks, dbt models, SQLMesh models, tables) |

### BatchOrchestrationResponse

(synq.entities.orchestration.v1.BatchOrchestrationResponse)

| Field          | Type                                     | Description                                                                                                           |
| -------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| orchestrations | [repeated Orchestration](#orchestration) | Orchestration relationships for each requested entity. The order corresponds to the order of entities in the request. |

### Orchestration

(synq.entities.orchestration.v1.Orchestration)

Orchestration represents the orchestration relationships for a given entity.
It shows both what the entity orchestrates (downstream) and what orchestrates it (upstream).

| Field      | Type                                               | Description                                                                                                                                                                                                                                                                                                                              |
| ---------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entity     | [ OrchestrationGroup](#orchestrationgroup)         | The entity being queried along with its other identities. For example, if querying a dbt or SQLMesh model, this group includes both the model and the table it creates, as they represent the same logical concept.                                                                                                                      |
| downstream | [repeated OrchestrationGroup](#orchestrationgroup) | Downstream entities that this entity orchestrates. Each group contains all identities of the orchestrated concept. Examples: - If entity is an Airflow task: groups containing \[dbt model, table] or \[SQLMesh model, table] - If entity is an Airflow task: groups containing downstream Airflow tasks and their orchestrated entities |
| upstream   | [repeated OrchestrationGroup](#orchestrationgroup) | Upstream entities that orchestrate this entity. Each group contains all identities of the orchestrating concept. Examples: - If entity is a dbt/SQLMesh model or table: groups containing the Airflow task that executes it - If entity is an Airflow task: groups containing upstream Airflow tasks that trigger it                     |

### OrchestrationGroup

(synq.entities.orchestration.v1.OrchestrationGroup)

OrchestrationGroup represents different identities of the same logical concept.
For example, a dbt model and the table it creates are different representations
of the same entity, so they appear together in one group. An Airflow task
typically has only one identity (the task itself).

| Field       | Type                               | Description                                                                                                                                                                                                             |
| ----------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| entities    | [repeated Identifier](#identifier) | Identifiers of all representations of this logical entity. Examples: - For a dbt model: \[dbt model, table it creates] - For a SQLMesh model: \[SQLMesh model, table it creates] - For an Airflow task: \[Airflow task] |
| synq\_paths | [repeated string](#string)         | Coalesce Quality paths of the entities for easier reference, in the same order as entities                                                                                                                              |

### ListAnnotationsRequest

(synq.entities.annotations.v1.ListAnnotationsRequest)

ListAnnotationsRequest is the request message for the ListAnnotations method.

### ListAnnotationsResponse

(synq.entities.annotations.v1.ListAnnotationsResponse)

ListAnnotationsResponse is the response message for the ListAnnotations method.

| Field              | Type                                         | Description                                      |
| ------------------ | -------------------------------------------- | ------------------------------------------------ |
| annotation\_counts | [repeated AnnotationCount](#annotationcount) | The annotation counts grouped by name and value. |

### AnnotationCount

(synq.entities.annotations.v1.AnnotationCount)

AnnotationCount represents the count of entities that have a specific annotation name-value pair.
This is used for aggregating and reporting annotation statistics across entities.

| Field | Type               | Description                                                                                  |
| ----- | ------------------ | -------------------------------------------------------------------------------------------- |
| name  | [ string](#string) | The annotation name (key).                                                                   |
| value | [ string](#string) | The annotation value. If empty, represents the count for all values of this annotation name. |
| count | [ int32](#int32)   | The number of entities that have this annotation name-value pair.                            |

### Type

(synq.entities.v1.Type)

Custom entity type that is used to categorize custom entities.

| Field         | Type                       | Description                                                                                                                                                                                                                                                                                                    |
| ------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| workspace     | [ string](#string)         | Immutable workspace identifier that this custom entity type belongs to.                                                                                                                                                                                                                                        |
| type\_id      | [ int32](#int32)           | none                                                                                                                                                                                                                                                                                                           |
| name          | [ string](#string)         | Name of the custom entity type that is displayed to the user.                                                                                                                                                                                                                                                  |
| svg\_icon     | [ bytes](#bytes)           | SVG icon of the custom entity type that is displayed to the user.                                                                                                                                                                                                                                              |
| svg\_icon\_id | [ string](#string)         | Coalesce Quality identifier used for CDN purposes, read-only.                                                                                                                                                                                                                                                  |
| created\_at   | [ Timestamp](#timestamp)   | Timestamp when the custom entity type was created.                                                                                                                                                                                                                                                             |
| updated\_at   | [ Timestamp](#timestamp)   | Timestamp when the custom entity type was last updated.                                                                                                                                                                                                                                                        |
| deleted\_at   | [ Timestamp](#timestamp)   | Timestamp when the custom entity type was deleted. If this is set, the custom entity type is considered deleted.                                                                                                                                                                                               |
| traits        | [ TypeTraits](#typetraits) | Behavioral traits declared on this type. Every entity of the type inherits them: declaring is\_model, for example, makes its entities rank and behave as transformation models (canonical-entity ranking, monitorability, lineage), the same way a dbt model does. Unset means no declared traits (all false). |

### Schema

(synq.entities.v1.Schema)

Schema represents a schema of a table like entity

| Field                                                                                                   | Type                                   | Description                                                                                                                  |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| workspace                                                                                               | [ string](#string)                     | Immutable workspace identifier that this entity belongs to.                                                                  |
| id                                                                                                      | [ Identifier](#identifier)             | Unique identifier for this entity.                                                                                           |
| synq\_path                                                                                              | [ string](#string)                     | Coalesce Quality Path to the entity. This is a unique path that can be used to access the entity in the Coalesce Quality UI. |
| state\_at                                                                                               | [ Timestamp](#timestamp)               | Time when the schema was defined.                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)             | Optional description of the schema, might differ from the entity itself                                                      |
| columns                                                                                                 | [repeated SchemaColumn](#schemacolumn) | Columns of the schema                                                                                                        |

### SchemaColumn

(synq.entities.v1.SchemaColumn)

| Field             | Type                                             | Description                                                                       |
| ----------------- | ------------------------------------------------ | --------------------------------------------------------------------------------- |
| name              | [ string](#string)                               | Human readable name of the column as present in dbt or data warehouse.            |
| native\_type      | [ string](#string)                               | Native data type of the column as present in data warehouse.                      |
| description       | [ string](#string)                               | Description of the column                                                         |
| ordinal\_position | [ int32](#int32)                                 | Ordinal position of the column in the table, starting from 1                      |
| is\_struct        | [ bool](#bool)                                   | Indicates that the column type could be used as a struct/json in a data warehouse |
| is\_repeated      | [ bool](#bool)                                   | Indicates that the column is a repeated field in a data warehouse (e.g. array)    |
| fields            | [repeated SchemaColumnField](#schemacolumnfield) | Fields inside of the struct/record like column                                    |

### SchemaColumnField

(synq.entities.v1.SchemaColumnField)

| Field             | Type                                             | Description                                                                      |
| ----------------- | ------------------------------------------------ | -------------------------------------------------------------------------------- |
| name              | [ string](#string)                               | Human readable name of the column as present in dbt or data warehouse.           |
| native\_type      | [ string](#string)                               | Native data type of the column as present in data warehouse.                     |
| description       | [ string](#string)                               | Description of the column                                                        |
| ordinal\_position | [ int32](#int32)                                 | Ordinal position of the column in the struct, starting from 1                    |
| is\_struct        | [ bool](#bool)                                   | Indicates that the field type could be used as a struct/json in a data warehouse |
| is\_repeated      | [ bool](#bool)                                   | Indicates that the field is a repeated field in a data warehouse (e.g. array)    |
| fields            | [repeated SchemaColumnField](#schemacolumnfield) | Fields inside of the struct/record like field                                    |

### ForeignKeyReference

(synq.entities.v1.ForeignKeyReference)

ForeignKeyReference describes the target of a foreign key constraint.

| Field    | Type                       | Description                                 |
| -------- | -------------------------- | ------------------------------------------- |
| database | [ string](#string)         | Target database name                        |
| schema   | [ string](#string)         | Target schema name                          |
| table    | [ string](#string)         | Target table name                           |
| columns  | [repeated string](#string) | Target column names in the referenced table |

### TableConstraint

(synq.entities.v1.TableConstraint)

TableConstraint represents a single constraint or index on a database table.

| Field                                                                                                                           | Type                                                 | Description                                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                                            | [ string](#string)                                   | Name of the constraint or index                                                                                                                                                                                                                                        |
| type                                                                                                                            | [ TableConstraintType](#tableconstrainttype)         | Type of the constraint (best-effort mapping to enum)                                                                                                                                                                                                                   |
| columns                                                                                                                         | [repeated string](#string)                           | Column names involved in this constraint or index                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_foreign\_key\_reference.foreign\_key\_reference | [optional ForeignKeyReference](#foreignkeyreference) | Foreign key reference details (only set when type is FOREIGN\_KEY)                                                                                                                                                                                                     |
| index\_type                                                                                                                     | [ string](#string)                                   | Index type (e.g. "btree", "hash", "gin", "gist") - only relevant for INDEX type                                                                                                                                                                                        |
| expression                                                                                                                      | [ string](#string)                                   | Expression for check constraints or expression-based indexes                                                                                                                                                                                                           |
| is\_unique                                                                                                                      | [ bool](#bool)                                       | Whether this constraint or index enforces uniqueness                                                                                                                                                                                                                   |
| raw\_type                                                                                                                       | [ string](#string)                                   | Raw constraint type string from the data warehouse (e.g. "PRIMARY KEY", "SORTING KEY", "PARTITION BY", "CLUSTER BY", "DISTRIBUTION KEY", "PROJECTION", "INDEX", "UNIQUE INDEX"). Preserved verbatim for consumers that need platform-specific details beyond the enum. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_enforced.is\_enforced                       | [optional bool](#bool)                               | Whether this constraint is enforced by the database. nil/unset = unknown, true = enforced, false = not enforced (e.g. Snowflake NORELY, Oracle DISABLED).                                                                                                              |

### FolderRef

(synq.entities.v1.FolderRef)

FolderRef is the human-friendly, structured address of a folder: the entity it
hangs under (`root_entity_id`) plus the ordered folder names from that root
down to the folder (`folders`).

It is the stable way to name a folder across responses. Prefer it over the
opaque folder entity id when you want to log, display, or reconstruct a
location — the segments are the same names a user sees in the catalog, and
they survive changes to the underlying id encoding.

A `FolderRef` with an empty `folders` list names the root entity itself (a
top-level integration or container the hierarchy hangs from).

This type lives in `synq.entities.v1` (rather than a folder-specific package)
so it can be shared by both the folders navigation API and the query API
without an import cycle.

| Field            | Type                       | Description                                                                                                                                                                                                                                                                                             |
| ---------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| root\_entity\_id | [ string](#string)         | Opaque id of the entity the folder hierarchy hangs under — an integration root or container (for example a warehouse instance, a database, or a transformation project). Take it verbatim from `FolderRef.root_entity_id` of a folder you already read, or from an entity id returned elsewhere.        |
| folders          | [repeated string](#string) | Ordered folder names from the root down to this folder (root first, leaf last), for example \["staging", "sales"]. Empty means the ref points at the root entity itself. Folder names are kept as separate segments (not joined with "/") because some platforms allow "/" inside a single folder name. |

### TypeTraits

(synq.entities.v1.TypeTraits)

TypeTraits are the behavioral traits a custom entity Type can declare.
Declaring a trait makes every entity of that type behave platform-wide as if
it carried the trait natively (e.g. is\_model => transformation-model ranking,
monitorability and lineage).

Every field is `optional` so an unset trait means "not declared, fall through
to the trait default" — distinct from an explicit `false`. An unset/nil message
means no declared traits (every trait at its default).

| Field                                                                                                                             | Type                   | Description                                                                                      |
| --------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_model.is\_model                               | [optional bool](#bool) | model-like: the dbt-model / Coalesce-node / SQLMesh-model analog. Default when unset: false.     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_source.is\_source                             | [optional bool](#bool) | source-like: an external/raw input to the transformation graph. Default when unset: false.       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_bi\_like.is\_bi\_like                         | [optional bool](#bool) | BI-like: a dashboard, report or other business-intelligence artifact. Default when unset: false. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_test\_type.is\_test\_type                     | [optional bool](#bool) | check-like: pairs with declarative checks. Default when unset: false.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_ignored\_in\_lineage.is\_ignored\_in\_lineage | [optional bool](#bool) | excluded from lineage rendering. Default when unset: false.                                      |

### Entity

(synq.entities.v1.Entity)

Entity is the base type for all entities in the system. Its always attached to a given
client workspace and can be uniquely identified by its id.

| Field                                                                                                     | Type                               | Description                                                                                                                                     |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| workspace                                                                                                 | [ string](#string)                 | Immutable workspace identifier that this entity belongs to.                                                                                     |
| id                                                                                                        | [ Identifier](#identifier)         | Unique identifier for this entity.                                                                                                              |
| type\_id                                                                                                  | [ int32](#int32)                   | Id of custom type or default type when 0, ignored for non-custom entities                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entity\_type.entity\_type | [optional EntityType](#entitytype) | Information about entity type                                                                                                                   |
| name                                                                                                      | [ string](#string)                 | Name of the entity that is displayed to the user.                                                                                               |
| description                                                                                               | [ string](#string)                 | Description of the entity that is displayed in relevant contexts. Can contain Markdown.                                                         |
| created\_at                                                                                               | [ Timestamp](#timestamp)           | Timestamp when the entity was created.                                                                                                          |
| updated\_at                                                                                               | [ Timestamp](#timestamp)           | Timestamp when the entity was last updated.                                                                                                     |
| deleted\_at                                                                                               | [ Timestamp](#timestamp)           | Timestamp when the entity was deleted. If this is set, the entity is considered deleted.                                                        |
| synq\_path                                                                                                | [ string](#string)                 | Return only value. Coalesce Quality Path to the entity. This is a unique path that can be used to access the entity in the Coalesce Quality UI. |
| synq\_catalog\_url                                                                                        | [ string](#string)                 | Return only value. Coalesce Quality URL to the entity. This is a unique URL that can be used to access the entity in the Coalesce Quality UI.   |
| ids                                                                                                       | [repeated Identifier](#identifier) | Return only value. All identifiers of entities which are tightly related                                                                        |
| synq\_paths                                                                                               | [repeated string](#string)         | Return only value. Coalesce Quality Path to the all identifiers of entities which are tightly related                                           |
| annotations                                                                                               | [repeated Annotation](#annotation) | Annotations attached to the entity. Annotations are key-value pairs that can be used to store metadata about the entity.                        |
| is\_dwh\_table                                                                                            | [ bool](#bool)                     | none                                                                                                                                            |
| is\_dwh\_view                                                                                             | [ bool](#bool)                     | none                                                                                                                                            |

### Annotation

(synq.entities.v1.Annotation)

Annotations can be used to annotate any entity with a key:value pair.
These annotations can be used for filtering and searching entities.

| Field  | Type                       | Description                                            |
| ------ | -------------------------- | ------------------------------------------------------ |
| name   | [ string](#string)         | String key for the annotation.                         |
| values | [repeated string](#string) | Optional list of values that the annotation can carry. |

### EntityChange

(synq.entities.v1.EntityChange)

EntityChange represents a change detected in an entity within the system.
It tracks modifications to entities like Git commits, SQL definitions, and database schemas.

| Field                                                                                                                 | Type                                         | Description                                                                                |
| --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------ |
| entity\_id                                                                                                            | [ Identifier](#identifier)                   | Identifier of the entity on which the change was detected when available.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entity\_synq\_path.entity\_synq\_path | [optional string](#string)                   | Coalesce Quality path representing entity on which the change was detected when available, |
| affected\_entities                                                                                                    | [repeated Identifier](#identifier)           | Identifiers of entities directly affected by this change.                                  |
| affected\_entities\_synq\_paths                                                                                       | [repeated string](#string)                   | Coalesce Quality paths of entities directly affected by this change.                       |
| change\_id                                                                                                            | [ string](#string)                           | Internal identifier of the change event.                                                   |
| change\_detected\_at                                                                                                  | [ Timestamp](#timestamp)                     | Timestamp when the change was detected by Coalesce Quality.                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) change\_type.git\_commit                | [ GitCommitChange](#gitcommitchange)         | none                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) change\_type.sql\_definition            | [ SqlDefinitionChange](#sqldefinitionchange) | none                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) change\_type.schema                     | [ SchemaChange](#schemachange)               | none                                                                                       |

### GitCommitChange

(synq.entities.v1.GitCommitChange)

GitCommitChange represents a change detected in a Git repository.

| Field                                                                                                             | Type                                                       | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| hash                                                                                                              | [ string](#string)                                         | Hash of the Git commit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| author                                                                                                            | [ Signature](#signature)                                   | Author information of the Git commit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| committer                                                                                                         | [ Signature](#signature)                                   | Committer information of the Git commit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| message                                                                                                           | [ string](#string)                                         | Commit message describing the changes.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| short\_message                                                                                                    | [ string](#string)                                         | First non-empty line of the message                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| file\_change\_stats                                                                                               | [map FileChangeStatsEntry](#filechangestatsentry)          | Statistics about changes made to each modified file.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| changed\_file\_paths                                                                                              | [repeated string](#string)                                 | All file paths changed in this commit (complete list). For commits with many files, this may be a large array.                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| related\_changed\_file\_paths                                                                                     | [repeated string](#string)                                 | File paths that directly affect the queried entity (filtered subset of changed\_file\_paths). When querying changes for a specific entity (e.g., dbt model "customers"), this contains only the files that directly impact that entity (e.g., "models/customers.sql", "models/staging/stg\_customers.sql"). Empty when retrieving a change by change\_id directly (not scoped to a specific entity). Empty when it's impossible to determine entity-specific file mappings. Example: If a commit changes 50 files but only 2 affect your queried dbt model, this contains those 2 files. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_branch\_name.branch\_name         | [optional string](#string)                                 | Name of the branch associated with the commit, if any.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| clone\_url                                                                                                        | [ string](#string)                                         | URL of the Git repository where the commit was made.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_web\_commit\_url.web\_commit\_url | [optional string](#string)                                 | URL to e.g. Github which opens the Commit                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| directory\_changes                                                                                                | [repeated DirectoryChangeSummary](#directorychangesummary) | Hierarchical directory summaries showing where changes occurred.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| changes\_by\_file\_type                                                                                           | [map ChangesByFileTypeEntry](#changesbyfiletypeentry)      | Aggregated statistics by file type/extension.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_statistics.statistics             | [optional ChangeStatistics](#changestatistics)             | Overall statistical summary of the commit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |

### GitCommitChange.ChangeStatistics

(synq.entities.v1.GitCommitChange.ChangeStatistics)

ChangeStatistics provides statistical summaries of the entire commit.

| Field                 | Type                                               | Description                           |
| --------------------- | -------------------------------------------------- | ------------------------------------- |
| total\_files          | [ int32](#int32)                                   | Total number of files changed.        |
| total\_lines\_added   | [ int32](#int32)                                   | Total lines added across all files.   |
| total\_lines\_removed | [ int32](#int32)                                   | Total lines removed across all files. |
| distribution          | [ FileChangeDistribution](#filechangedistribution) | Distribution of changes by magnitude. |
| top\_changes          | [repeated TopChange](#topchange)                   | Top 10 files by total lines changed.  |

### GitCommitChange.ChangeStats

(synq.entities.v1.GitCommitChange.ChangeStats)

ChangeStats contains statistics about changes made to a single file.

| Field     | Type             | Description                            |
| --------- | ---------------- | -------------------------------------- |
| additions | [ int32](#int32) | Number of lines added to the file.     |
| deletions | [ int32](#int32) | Number of lines removed from the file. |

### GitCommitChange.ChangesByFileTypeEntry

(synq.entities.v1.GitCommitChange.ChangesByFileTypeEntry)

| Field | Type                                             | Description |
| ----- | ------------------------------------------------ | ----------- |
| key   | [ string](#string)                               | none        |
| value | [ FileTypeChangeSummary](#filetypechangesummary) | none        |

### GitCommitChange.DirectoryChangeSummary

(synq.entities.v1.GitCommitChange.DirectoryChangeSummary)

DirectoryChangeSummary provides hierarchical directory-level statistics.

| Field                 | Type                                                       | Description                                                           |
| --------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------- |
| directory\_path       | [ string](#string)                                         | Path of the directory.                                                |
| files\_changed        | [ int32](#int32)                                           | Number of files changed in this directory (excluding subdirectories). |
| total\_lines\_added   | [ int32](#int32)                                           | Total lines added in this directory (excluding subdirectories).       |
| total\_lines\_removed | [ int32](#int32)                                           | Total lines removed in this directory (excluding subdirectories).     |
| subdirs               | [repeated DirectoryChangeSummary](#directorychangesummary) | Subdirectory summaries.                                               |
| top\_files            | [repeated TopFileChange](#topfilechange)                   | Top 3-5 most significant file changes in this directory.              |

### GitCommitChange.FileChangeDistribution

(synq.entities.v1.GitCommitChange.FileChangeDistribution)

FileChangeDistribution categorizes files by change magnitude.

| Field                        | Type             | Description                             |
| ---------------------------- | ---------------- | --------------------------------------- |
| files\_with\_small\_changes  | [ int32](#int32) | Files with fewer than 10 lines changed. |
| files\_with\_medium\_changes | [ int32](#int32) | Files with 10-100 lines changed.        |
| files\_with\_large\_changes  | [ int32](#int32) | Files with more than 100 lines changed. |
| files\_added                 | [ int32](#int32) | Files that were newly added.            |
| files\_modified              | [ int32](#int32) | Files that were modified.               |
| files\_deleted               | [ int32](#int32) | Files that were deleted.                |

### GitCommitChange.FileChangeStatsEntry

(synq.entities.v1.GitCommitChange.FileChangeStatsEntry)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| key   | [ string](#string)           | none        |
| value | [ ChangeStats](#changestats) | none        |

### GitCommitChange.FileTypeChangeSummary

(synq.entities.v1.GitCommitChange.FileTypeChangeSummary)

FileTypeChangeSummary aggregates changes by file type/extension.

| Field                 | Type                       | Description                                                        |
| --------------------- | -------------------------- | ------------------------------------------------------------------ |
| file\_extension       | [ string](#string)         | File extension (e.g., ".sql", ".py", ".yml").                      |
| files\_count          | [ int32](#int32)           | Number of files with this extension that were changed.             |
| total\_lines\_added   | [ int32](#int32)           | Total lines added across all files of this type.                   |
| total\_lines\_removed | [ int32](#int32)           | Total lines removed across all files of this type.                 |
| example\_files        | [repeated string](#string) | Example file paths (up to 5) showing where these changes occurred. |
| common\_directories   | [repeated string](#string) | Common directories where files of this type were modified.         |

### GitCommitChange.Signature

(synq.entities.v1.GitCommitChange.Signature)

Signature contains information about the Git user who made the changes.

| Field       | Type                     | Description                               |
| ----------- | ------------------------ | ----------------------------------------- |
| name        | [ string](#string)       | Name of the Git user.                     |
| email       | [ string](#string)       | Email address of the Git user.            |
| created\_at | [ Timestamp](#timestamp) | Timestamp when the signature was created. |

### GitCommitChange.TopChange

(synq.entities.v1.GitCommitChange.TopChange)

TopChange represents one of the most significant file changes.

| Field                 | Type               | Description                            |
| --------------------- | ------------------ | -------------------------------------- |
| file\_path            | [ string](#string) | Path of the file.                      |
| lines\_added          | [ int32](#int32)   | Lines added.                           |
| lines\_removed        | [ int32](#int32)   | Lines removed.                         |
| total\_lines\_changed | [ int32](#int32)   | Total lines changed (added + removed). |

### GitCommitChange.TopFileChange

(synq.entities.v1.GitCommitChange.TopFileChange)

TopFileChange represents a significant file change within a directory.

| Field          | Type               | Description                                 |
| -------------- | ------------------ | ------------------------------------------- |
| file\_path     | [ string](#string) | Path of the file relative to the directory. |
| lines\_added   | [ int32](#int32)   | Number of lines added.                      |
| lines\_removed | [ int32](#int32)   | Number of lines removed.                    |

### SchemaChange

(synq.entities.v1.SchemaChange)

SchemaChange represents a change detected in a database schema.

| Field           | Type                                               | Description                                               |
| --------------- | -------------------------------------------------- | --------------------------------------------------------- |
| column\_changes | [repeated SchemaColumnChange](#schemacolumnchange) | List of changes made to individual columns in the schema. |

### SchemaColumnChange

(synq.entities.v1.SchemaColumnChange)

SchemaColumnChange represents a specific change to a column in the schema.

| Field                                                                                                             | Type                                                       | Description |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) column\_change.column\_addition     | [ ColumnAdditionChangeType](#columnadditionchangetype)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) column\_change.column\_native\_type | [ ColumnNativeTypeChangeType](#columnnativetypechangetype) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) column\_change.column\_removal      | [ ColumnRemovalChangeType](#columnremovalchangetype)       | none        |

### SchemaColumnChange.ColumnAdditionChangeType

(synq.entities.v1.SchemaColumnChange.ColumnAdditionChangeType)

ColumnAdditionChangeType represents the addition of a new column to the schema.

| Field             | Type               | Description                                                                                     |
| ----------------- | ------------------ | ----------------------------------------------------------------------------------------------- |
| column\_id        | [ string](#string) | Identifier of the new column. See ColumnRemovalChangeType.column\_id.                           |
| native\_type      | [ string](#string) | Data type of the new column.                                                                    |
| ordinal\_position | [ int32](#int32)   | Position where the column was added in the schema.                                              |
| human\_name       | [ string](#string) | Name of the column as it appears in the source system. See ColumnRemovalChangeType.human\_name. |

### SchemaColumnChange.ColumnNativeTypeChangeType

(synq.entities.v1.SchemaColumnChange.ColumnNativeTypeChangeType)

ColumnNativeTypeChangeType represents a change in a column's data type.

| Field                  | Type               | Description                                                                                     |
| ---------------------- | ------------------ | ----------------------------------------------------------------------------------------------- |
| column\_id             | [ string](#string) | Identifier of the modified column. See ColumnRemovalChangeType.column\_id.                      |
| previous\_native\_type | [ string](#string) | Previous data type of the column.                                                               |
| current\_native\_type  | [ string](#string) | New data type of the column.                                                                    |
| human\_name            | [ string](#string) | Name of the column as it appears in the source system. See ColumnRemovalChangeType.human\_name. |
| ordinal\_position      | [ int32](#int32)   | Position of the changed column in the current version of the schema.                            |

### SchemaColumnChange.ColumnRemovalChangeType

(synq.entities.v1.SchemaColumnChange.ColumnRemovalChangeType)

ColumnRemovalChangeType represents the removal of a column from the schema.

| Field             | Type               | Description                                                                                                                                                                                                                     |
| ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_id        | [ string](#string) | Identifier of the removed column. Normalized to lower case with special characters stripped, so several columns of one schema can share it.                                                                                     |
| native\_type      | [ string](#string) | Native data type of the removed column.                                                                                                                                                                                         |
| ordinal\_position | [ int32](#int32)   | Original position of the column in the schema.                                                                                                                                                                                  |
| human\_name       | [ string](#string) | Name of the column as it appears in the source system, which is what distinguishes two columns sharing a column\_id. Empty when the source system reported no distinct name, and on changes recorded before this field existed. |

### SqlDefinitionChange

(synq.entities.v1.SqlDefinitionChange)

SqlDefinitionChange represents a change detected in a SQL definition.

| Field                    | Type                     | Description                                                |
| ------------------------ | ------------------------ | ---------------------------------------------------------- |
| previous\_sql            | [ string](#string)       | Previous version of the SQL definition.                    |
| previous\_sql\_state\_at | [ Timestamp](#timestamp) | Timestamp when the previous SQL state was valid.           |
| current\_sql             | [ string](#string)       | Current version of the SQL definition.                     |
| current\_sql\_state\_at  | [ Timestamp](#timestamp) | Timestamp when the current SQL state became valid.         |
| sql\_diff                | [ string](#string)       | Diff showing the changes between previous and current SQL. |

### AirflowDagIdentifier

(synq.entities.v1.AirflowDagIdentifier)

| Field           | Type               | Description                                                           |
| --------------- | ------------------ | --------------------------------------------------------------------- |
| integration\_id | [ string](#string) | Coalesce Quality integration\_id that identifies the Airflow instance |
| dag\_id         | [ string](#string) | Airflow dag\_id that identifies the DAG                               |

### AirflowTaskIdentifier

(synq.entities.v1.AirflowTaskIdentifier)

| Field           | Type               | Description                                                           |
| --------------- | ------------------ | --------------------------------------------------------------------- |
| integration\_id | [ string](#string) | Coalesce Quality integration\_id that identifies the Airflow instance |
| dag\_id         | [ string](#string) | Airflow dag\_id that identifies the DAG                               |
| task\_id        | [ string](#string) | Airflow task\_id that identifies the task within the DAG              |

### AthenaTableIdentifier

(synq.entities.v1.AthenaTableIdentifier)

| Field    | Type               | Description                                                                                                                                                                                     |
| -------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| instance | [ string](#string) | AWS account and region the Athena workgroup runs in, formatted as "\<account-id>.\<region>" (e.g. "123456789012.eu-west-1"). Auto-derived from sts:GetCallerIdentity at integration setup time. |
| catalog  | [ string](#string) | Glue Data Catalog name. Almost always "AwsDataCatalog" — the default catalog for Athena unless the customer registered a federated catalog.                                                     |
| database | [ string](#string) | Glue database (the namespace users typically filter on).                                                                                                                                        |
| table    | [ string](#string) | Glue table or view name.                                                                                                                                                                        |

### BigqueryTableIdentifier

(synq.entities.v1.BigqueryTableIdentifier)

| Field   | Type               | Description         |
| ------- | ------------------ | ------------------- |
| project | [ string](#string) | BigQuery project    |
| dataset | [ string](#string) | BigQuery dataset id |
| table   | [ string](#string) | BigQuery table name |

### ClickhouseTableIdentifier

(synq.entities.v1.ClickhouseTableIdentifier)

| Field  | Type               | Description                      |
| ------ | ------------------ | -------------------------------- |
| host   | [ string](#string) | Clickhouse hostname without port |
| schema | [ string](#string) | Clickhouse database              |
| table  | [ string](#string) | Clickhouse table                 |

### CustomIdentifier

(synq.entities.v1.CustomIdentifier)

| Field | Type               | Description                                                                                       |
| ----- | ------------------ | ------------------------------------------------------------------------------------------------- |
| id    | [ string](#string) | Id that identifies the custom entity The Id should be unique within the custom entity Identifier. |

### DatabricksTableIdentifier

(synq.entities.v1.DatabricksTableIdentifier)

| Field     | Type               | Description                 |
| --------- | ------------------ | --------------------------- |
| workspace | [ string](#string) | URL of Databricks workspace |
| catalog   | [ string](#string) | Databricks catalog          |
| schema    | [ string](#string) | Databricks schema           |
| table     | [ string](#string) | Databricks table or view    |

### DataproductIdentifier

(synq.entities.v1.DataproductIdentifier)

| Field | Type               | Description                                    |
| ----- | ------------------ | ---------------------------------------------- |
| id    | [ string](#string) | Dataproduct id that identifies the Dataproduct |

### DbtCloudNodeIdentifier

(synq.entities.v1.DbtCloudNodeIdentifier)

| Field       | Type               | Description                                                          |
| ----------- | ------------------ | -------------------------------------------------------------------- |
| project\_id | [ string](#string) | Your dbt Cloud project id                                            |
| account\_id | [ string](#string) | Your dbt Cloud account id                                            |
| node\_id    | [ string](#string) | Dbt node\_id that identifies one of dbt DAG nodes (model, test, etc) |

### DbtCoreNodeIdentifier

(synq.entities.v1.DbtCoreNodeIdentifier)

| Field           | Type               | Description                                                                                                                                                                                                                                                               |
| --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| integration\_id | [ string](#string) | Opaque identifier of the dbt Core project. Usually the Coalesce Quality integration id (a UUID), but may also be the dbt project name from manifest.json when the integration is configured to identify assets by project name. Treat it as an opaque string, not a UUID. |
| node\_id        | [ string](#string) | Dbt node\_id that identifies one of dbt DAG nodes (model, test, etc)                                                                                                                                                                                                      |

### FabricTableIdentifier

(synq.entities.v1.FabricTableIdentifier)

Microsoft Fabric warehouse/lakehouse table identifier. Fabric is
workspace-scoped with cross-database three-part \[database].\[schema].\[table]
T-SQL names.

| Field         | Type               | Description                                                                                                                                                                                                                                         |
| ------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| instance      | [ string](#string) | Workspace SQL analytics endpoint host, e.g. "\<workspace-id>.datawarehouse.fabric.microsoft.com".                                                                                                                                                   |
| database      | [ string](#string) | Fabric warehouse / lakehouse (database).                                                                                                                                                                                                            |
| schema        | [ string](#string) | Schema within the database.                                                                                                                                                                                                                         |
| table         | [ string](#string) | Table or view name.                                                                                                                                                                                                                                 |
| workspace\_id | [ string](#string) | Fabric workspace GUID, decoded from the endpoint host in `instance`. Optional and informational: the table is addressed by instance/database/schema/table, so leave it empty if you don't have it — it does not affect how the identifier resolves. |
| tenant\_id    | [ string](#string) | Entra (Azure AD) tenant GUID, decoded from the endpoint host in `instance`. Optional and informational, like workspace\_id.                                                                                                                         |

### Identifier

(synq.entities.v1.Identifier)

Identifier is a unique reference to an entity in Coalesce Quality system. Entity identifiers
are designed to closely mimic identifiers used by data platforms and tools. To construct
an identifier, you need to know the kind of the entity and the ids that you would normally
use to identify it in the data platform or tool. For example, to identify a table in BigQuery,
you would need to know the project, dataset, and table names.

| Field                                                                                              | Type                                                     | Description                                                                           |
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.dbt\_core\_node   | [ DbtCoreNodeIdentifier](#dbtcorenodeidentifier)         | Dbt node that identifies one of dbt DAG nodes (model, test, etc) in dbt Core project  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.dbt\_cloud\_node  | [ DbtCloudNodeIdentifier](#dbtcloudnodeidentifier)       | Dbt node that identifies one of dbt DAG nodes (model, test, etc) in dbt Cloud project |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.bigquery\_table   | [ BigqueryTableIdentifier](#bigquerytableidentifier)     | BigQuery table identifier                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.snowflake\_table  | [ SnowflakeTableIdentifier](#snowflaketableidentifier)   | Snowflake table identifier                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.redshift\_table   | [ RedshiftTableIdentifier](#redshifttableidentifier)     | Redshift table identifier                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.postgres\_table   | [ PostgresTableIdentifier](#postgrestableidentifier)     | Postgres table identifier                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.mysql\_table      | [ MysqlTableIdentifier](#mysqltableidentifier)           | Mysql table identifier                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.clickhouse\_table | [ ClickhouseTableIdentifier](#clickhousetableidentifier) | Clickhouse table identifier                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.airflow\_dag      | [ AirflowDagIdentifier](#airflowdagidentifier)           | Airflow DAG identifier                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.airflow\_task     | [ AirflowTaskIdentifier](#airflowtaskidentifier)         | Airflow task identifier within a given DAG                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.custom            | [ CustomIdentifier](#customidentifier)                   | Custom identifier to be used with all custom created entities                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.dataproduct       | [ DataproductIdentifier](#dataproductidentifier)         | Dataproduct identifier                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.synq\_path        | [ SynqPathIdentifier](#synqpathidentifier)               | SynqPath identifier                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.databricks\_table | [ DatabricksTableIdentifier](#databrickstableidentifier) | Databricks table identifier                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.trino\_table      | [ TrinoTableIdentifier](#trinotableidentifier)           | Trino table identifier                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.sql\_mesh\_model  | [ SqlMeshModelIdentifier](#sqlmeshmodelidentifier)       | SQLMesh Model identifier                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.sql\_mesh\_audit  | [ SqlMeshAuditIdentifier](#sqlmeshauditidentifier)       | SQLMesh Audit identifier                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.monitor           | [ MonitorIdentifier](#monitoridentifier)                 | Monitor identifier                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.mssql\_table      | [ MssqlTableIdentifier](#mssqltableidentifier)           | SQL Server table identifier                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.oracle\_table     | [ OracleTableIdentifier](#oracletableidentifier)         | Oracle table identifier                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.athena\_table     | [ AthenaTableIdentifier](#athenatableidentifier)         | Amazon Athena (Glue) table identifier                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.saved\_view       | [ SavedViewIdentifier](#savedviewidentifier)             | Saved view identifier                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.fabric\_table     | [ FabricTableIdentifier](#fabrictableidentifier)         | Microsoft Fabric table identifier                                                     |

### MonitorIdentifier

(synq.entities.v1.MonitorIdentifier)

| Field                                                                                                           | Type                       | Description                                                  |
| --------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------ |
| monitored\_id                                                                                                   | [ Identifier](#identifier) | Identifier of the monitored entity                           |
| monitor\_id                                                                                                     | [ string](#string)         | Identifier of the monitor                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segment.segment                 | [optional string](#string) | Optional monitor segmentation identifier                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id | [optional string](#string) | Coalesce Quality integration\_id of the monitored identifier |

### MssqlTableIdentifier

(synq.entities.v1.MssqlTableIdentifier)

| Field    | Type               | Description                         |
| -------- | ------------------ | ----------------------------------- |
| host     | [ string](#string) | Hostname of the SQL Server instance |
| database | [ string](#string) | SQL Server database                 |
| schema   | [ string](#string) | SQL Server schema (e.g. "dbo")      |
| table    | [ string](#string) | SQL Server table or view            |

### MysqlTableIdentifier

(synq.entities.v1.MysqlTableIdentifier)

| Field  | Type               | Description                 |
| ------ | ------------------ | --------------------------- |
| host   | [ string](#string) | Mysql hostname without port |
| schema | [ string](#string) | Mysql database              |
| table  | [ string](#string) | Mysql table                 |

### OracleTableIdentifier

(synq.entities.v1.OracleTableIdentifier)

| Field         | Type               | Description                     |
| ------------- | ------------------ | ------------------------------- |
| host          | [ string](#string) | Hostname of the Oracle instance |
| service\_name | [ string](#string) | Oracle service name (PDB)       |
| schema        | [ string](#string) | Oracle schema (= owning user)   |
| table         | [ string](#string) | Oracle table or view            |

### OwnerIdentifier

(synq.entities.v1.OwnerIdentifier)

| Field | Type               | Description                        |
| ----- | ------------------ | ---------------------------------- |
| id    | [ string](#string) | Owner id that identifies the Owner |

### PostgresTableIdentifier

(synq.entities.v1.PostgresTableIdentifier)

| Field    | Type               | Description                    |
| -------- | ------------------ | ------------------------------ |
| host     | [ string](#string) | Postgres hostname without port |
| database | [ string](#string) | Postgres database              |
| schema   | [ string](#string) | Postgres schema                |
| table    | [ string](#string) | Postgres table                 |

### RedshiftTableIdentifier

(synq.entities.v1.RedshiftTableIdentifier)

| Field    | Type               | Description       |
| -------- | ------------------ | ----------------- |
| cluster  | [ string](#string) | Redshift cluster  |
| database | [ string](#string) | Redshift database |
| schema   | [ string](#string) | Redshift schema   |
| table    | [ string](#string) | Redshift table    |

### SavedViewIdentifier

(synq.entities.v1.SavedViewIdentifier)

| Field | Type               | Description                                                         |
| ----- | ------------------ | ------------------------------------------------------------------- |
| id    | [ string](#string) | Saved view id (client-supplied UUID) that identifies the saved view |

### SnowflakeTableIdentifier

(synq.entities.v1.SnowflakeTableIdentifier)

| Field    | Type               | Description        |
| -------- | ------------------ | ------------------ |
| account  | [ string](#string) | Snowflake account  |
| database | [ string](#string) | Snowflake database |
| schema   | [ string](#string) | Snowflake schema   |
| table    | [ string](#string) | Snowflake table    |

### SqlMeshAuditIdentifier

(synq.entities.v1.SqlMeshAuditIdentifier)

| Field           | Type               | Description                                                           |
| --------------- | ------------------ | --------------------------------------------------------------------- |
| integration\_id | [ string](#string) | Coalesce Quality integration\_id that identifies the dbt Core project |
| fqn             | [ string](#string) | SQLMesh model fully qualified name                                    |
| audit\_id       | [ string](#string) | Identifier of the audit                                               |

### SqlMeshModelIdentifier

(synq.entities.v1.SqlMeshModelIdentifier)

| Field           | Type               | Description                                                           |
| --------------- | ------------------ | --------------------------------------------------------------------- |
| integration\_id | [ string](#string) | Coalesce Quality integration\_id that identifies the dbt Core project |
| fqn             | [ string](#string) | SQLMesh model fully qualified name                                    |

### SynqPathIdentifier

(synq.entities.v1.SynqPathIdentifier)

| Field | Type               | Description                                                                                           |
| ----- | ------------------ | ----------------------------------------------------------------------------------------------------- |
| path  | [ string](#string) | Coalesce Quality path that identifies the Coalesce Quality entity, needs to be one of supported paths |

### TrinoTableIdentifier

(synq.entities.v1.TrinoTableIdentifier)

| Field   | Type               | Description                    |
| ------- | ------------------ | ------------------------------ |
| host    | [ string](#string) | Hostname of the Trino instance |
| catalog | [ string](#string) | Trino catalog                  |
| schema  | [ string](#string) | Trino schema                   |
| table   | [ string](#string) | Trino table or view            |

### Code

(synq.entities.v1.Code)

Code represents a piece of code or configuration that can be processed by Coalesce Quality.
This message is used to store and manage various types of code artifacts, such as SQL queries,
Python scripts, dbt models, and other code configurations. Each code piece is associated with
a specific entity that defines or owns it, and includes metadata about its type and state.

| Field                                                                                                     | Type                               | Description                                                                                                                                                         |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| definer\_identifier                                                                                       | [ Identifier](#identifier)         | Identifier of the entity that defines or owns this code piece. This could be a dbt model, SQLMesh model, or any other entity type that contains code.               |
| definer\_synq\_path                                                                                       | [ string](#string)                 | Coalesce Quality Path to the entity. This is a unique path that can be used to access the entity in the Coalesce Quality UI.                                        |
| definer\_entity\_type                                                                                     | [ EntityType](#entitytype)         | Information about entity type of the entity defining code                                                                                                           |
| state\_at                                                                                                 | [ Timestamp](#timestamp)           | Timestamp indicating when this specific version of the code was captured or last modified. This helps track the evolution of code over time.                        |
| code\_type                                                                                                | [ CodeType](#codetype)             | Type of code being stored, which determines how Coalesce Quality will process and analyze it. This can be SQL, Python, dbt, SQLMesh, or other supported code types. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sql\_dialect.sql\_dialect | [optional SqlDialect](#sqldialect) | SQL dialect used in the code, if the code\_type is SQL. This helps Coalesce Quality understand the specific SQL syntax and features being used.                     |
| content                                                                                                   | [ string](#string)                 | The actual content of the code. This can be SQL queries, Python scripts, dbt models, or any other supported code format.                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_code\_name.code\_name     | [optional string](#string)         | Optional human-readable name for the code piece that can be used for display purposes. Might also indicate name of the file.                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_file\_path.file\_path     | [optional string](#string)         | Optional path in e.g. git or project directory which is source of the code                                                                                          |

### Schema

(synq.entities.custom.features.v1.Schema)

Schema represents a schema of a table like entity

| Field     | Type                                   | Description                                                                                                                                                                                                          |
| --------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| state\_at | [ Timestamp](#timestamp)               | Time when the schema was defined, will default to `now` if not set.                                                                                                                                                  |
| columns   | [repeated SchemaColumn](#schemacolumn) | Columns of the schema Columns are ordered by ordinal\_position, it has to be defined for all or none of the columns, when not defined, ordinal positions are attached according to the order of columns in the list. |

### SqlDefinition

(synq.entities.custom.features.v1.SqlDefinition)

SqlDefinition is a feature that allows to define lineage via SQL for a custom entity.
Used to generate dependencies and other metadata. If parsed successfully,
it will provide a code and column level lineage. Can be used to define simplified transformation
of data which component performs using e.g. `INSERT INTO foo SELECT * FROM bar`.

| Field                                                                                                               | Type                                         | Description                                                                                                                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| state\_at                                                                                                           | [ Timestamp](#timestamp)                     | Time when the sql was defined, will default to `now` if not set.                                                                                                                                                     |
| dialect                                                                                                             | [ SqlDialect](#sqldialect)                   | SQL dialect used in the SQL.                                                                                                                                                                                         |
| sql                                                                                                                 | [ string](#string)                           | Final form of the SQL as executed in the database/data warehouse. Must be a valid SQL in the selected dialect.                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database\_context.database\_context | [optional DatabaseContext](#databasecontext) | Optional database context for resolving unqualified table references in the SQL. When provided, helps CLL resolve schema-qualified references (e.g. `PROD.TABLE_NAME`) to the correct database instance and catalog. |

### CheckCategory

(synq.entities.custom.features.v1.CheckCategory)

Checks feature indicates that the entity is testing in some way different entity.
To define the kind of the check use the `kind` field. The `package` field is optional.
It is used to categorize the entities which check other entities.

| Field                                                                                             | Type                       | Description                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| package                                                                                           | [ string](#string)         | Grouping of check kinds. e.g. "gcs", "sql", "queue"                                                                                                                                                    |
| kind                                                                                              | [ string](#string)         | Kind of the check. e.g "not\_null", "unique", "foreign\_key", "row\_count".                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category | [optional string](#string) | Explicit technical category of the check — what kind of check this is, mechanically (e.g. "nullness", "uniqueness", "freshness"), so the same check expressed on another platform shares one category. |

Presence is meaningful on update: omit the field to leave the current value untouched, send an empty string to clear it, send a non-empty string to set or replace it. Leaving it unset means the check is uncategorised for this dimension and the workspace's categorisation rules decide it from package + kind; the `quality.check_category` annotation on the entity is read as the lower-precedence fallback. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | Explicit governance category of the check — what the check is for, the data-quality dimension a governance function tracks coverage against (e.g. "Completeness", "Accuracy", "Timeliness").

Resolves independently of `category` and follows the same presence semantics: omitted leaves it unchanged, empty clears it, non-empty sets it. Unset means uncategorised for this dimension; the `quality.governance_category` annotation on the entity is the lower-precedence fallback. |

### GitFileReference

(synq.entities.custom.features.v1.GitFileReference)

GitFileReference represents a reference to a file in a git repository.

| Field           | Type               | Description                                          |
| --------------- | ------------------ | ---------------------------------------------------- |
| repository\_url | [ string](#string) | URL of the git repository. Preferably SSH clone URL. |
| branch\_name    | [ string](#string) | Name of the branch in the git repository.            |
| file\_path      | [ string](#string) | Path to the file in the git repository.              |

### Code

(synq.entities.custom.features.v1.Code)

Code feature represents a code snippet associated with the entity.
If support for code parsing and dependency extraction is needed use [SqlDefinition](sql_definition.proto).

| Field      | Type                   | Description                                   |
| ---------- | ---------------------- | --------------------------------------------- |
| name       | [ string](#string)     | Might be e.g. name of the file or a function. |
| code\_type | [ CodeType](#codetype) | Type of the code.                             |
| content    | [ string](#string)     | Content of the code. Displayed in the UI.     |

### DeleteRelationshipsRequest

(synq.entities.custom.v1.DeleteRelationshipsRequest)

| Field         | Type                                   | Description |
| ------------- | -------------------------------------- | ----------- |
| relationships | [repeated Relationship](#relationship) | none        |

### DeleteRelationshipsResponse

(synq.entities.custom.v1.DeleteRelationshipsResponse)

### ListRelationshipsRequest

(synq.entities.custom.v1.ListRelationshipsRequest)

| Field | Type                               | Description                                                                   |
| ----- | ---------------------------------- | ----------------------------------------------------------------------------- |
| ids   | [repeated Identifier](#identifier) | Return relationships for the given entity\_id. Either upstream or downstream. |

### ListRelationshipsResponse

(synq.entities.custom.v1.ListRelationshipsResponse)

| Field         | Type                                   | Description |
| ------------- | -------------------------------------- | ----------- |
| relationships | [repeated Relationship](#relationship) | none        |

### Relationship

(synq.entities.custom.v1.Relationship)

| Field      | Type                       | Description |
| ---------- | -------------------------- | ----------- |
| upstream   | [ Identifier](#identifier) | none        |
| downstream | [ Identifier](#identifier) | none        |

### UpsertRelationshipsRequest

(synq.entities.custom.v1.UpsertRelationshipsRequest)

| Field         | Type                                   | Description |
| ------------- | -------------------------------------- | ----------- |
| relationships | [repeated Relationship](#relationship) | none        |

### UpsertRelationshipsResponse

(synq.entities.custom.v1.UpsertRelationshipsResponse)

### Execution

(synq.entities.custom.v1.Execution)

| Field        | Type                                       | Description |
| ------------ | ------------------------------------------ | ----------- |
| id           | [ Identifier](#identifier)                 | none        |
| status       | [ ExecutionStatus](#executionstatus)       | none        |
| message      | [ string](#string)                         | none        |
| created\_at  | [ Timestamp](#timestamp)                   | none        |
| started\_at  | [ Timestamp](#timestamp)                   | none        |
| finished\_at | [ Timestamp](#timestamp)                   | none        |
| annotations  | [repeated Annotation](#annotation)         | none        |
| extras       | [repeated ExecutionExtra](#executionextra) | none        |

### ExecutionExtra

(synq.entities.custom.v1.ExecutionExtra)

| Field                                                                                             | Type               | Description |
| ------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) extra.executed\_sql | [ string](#string) | none        |

### LogEntry

(synq.entities.custom.v1.LogEntry)

| Field        | Type                               | Description |
| ------------ | ---------------------------------- | ----------- |
| id           | [ Identifier](#identifier)         | none        |
| message      | [ string](#string)                 | none        |
| created\_at  | [ Timestamp](#timestamp)           | none        |
| started\_at  | [ Timestamp](#timestamp)           | none        |
| finished\_at | [ Timestamp](#timestamp)           | none        |
| annotations  | [repeated Annotation](#annotation) | none        |

### UpsertExecutionRequest

(synq.entities.custom.v1.UpsertExecutionRequest)

| Field     | Type                     | Description |
| --------- | ------------------------ | ----------- |
| execution | [ Execution](#execution) | none        |

### UpsertExecutionResponse

(synq.entities.custom.v1.UpsertExecutionResponse)

### UpsertLogEntryRequest

(synq.entities.custom.v1.UpsertLogEntryRequest)

| Field      | Type                   | Description |
| ---------- | ---------------------- | ----------- |
| log\_entry | [ LogEntry](#logentry) | none        |

### UpsertLogEntryResponse

(synq.entities.custom.v1.UpsertLogEntryResponse)

### DeleteEntityFeatureRequest

(synq.entities.custom.v1.DeleteEntityFeatureRequest)

| Field       | Type                       | Description                                      |
| ----------- | -------------------------- | ------------------------------------------------ |
| entity\_id  | [ Identifier](#identifier) | Identifier of the entity to delete feature from. |
| feature\_id | [ string](#string)         | Identifier of the feature to delete.             |

### DeleteEntityFeatureResponse

(synq.entities.custom.v1.DeleteEntityFeatureResponse)

### Feature

(synq.entities.custom.v1.Feature)

| Field                                                                                                      | Type                                   | Description                                                                                                                                                                                        |
| ---------------------------------------------------------------------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| workspace                                                                                                  | [ string](#string)                     | Immutable workspace identifier that this entity belongs to.                                                                                                                                        |
| entity\_id                                                                                                 | [ Identifier](#identifier)             | The identifier of the entity to create or update feature for.                                                                                                                                      |
| feature\_id                                                                                                | [ string](#string)                     | Identifier of the feature. Can be any string, e.g. "sql" for SQL feature. Use same identifier to update the feature. Do not use random identifier as it will create a new feature on every update. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feature.sql\_definition      | [ SqlDefinition](#sqldefinition)       | Only one feature per entity.                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feature.git\_file\_reference | [ GitFileReference](#gitfilereference) | Multiple features per entity.                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feature.code                 | [ Code](#code)                         | Multiple features per entity.                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feature.schema               | [ Schema](#schema)                     | Only one feature per entity.                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feature.check\_category      | [ CheckCategory](#checkcategory)       | Only one feature per entity.                                                                                                                                                                       |
| created\_at                                                                                                | [ Timestamp](#timestamp)               | Timestamp when the entity was created.                                                                                                                                                             |
| updated\_at                                                                                                | [ Timestamp](#timestamp)               | Timestamp when the entity was last updated.                                                                                                                                                        |
| deleted\_at                                                                                                | [ Timestamp](#timestamp)               | Timestamp when the entity was deleted. If this is set, the entity is considered deleted.                                                                                                           |

### ListEntityFeaturesRequest

(synq.entities.custom.v1.ListEntityFeaturesRequest)

| Field      | Type                       | Description                                   |
| ---------- | -------------------------- | --------------------------------------------- |
| entity\_id | [ Identifier](#identifier) | Identifier of the entity to get features for. |

### ListEntityFeaturesResponse

(synq.entities.custom.v1.ListEntityFeaturesResponse)

| Field    | Type                         | Description                      |
| -------- | ---------------------------- | -------------------------------- |
| features | [repeated Feature](#feature) | List of features for the entity. |

### UpsertEntityFeatureRequest

(synq.entities.custom.v1.UpsertEntityFeatureRequest)

| Field   | Type                 | Description                      |
| ------- | -------------------- | -------------------------------- |
| feature | [ Feature](#feature) | The feature to create or update. |

### UpsertEntityFeatureResponse

(synq.entities.custom.v1.UpsertEntityFeatureResponse)

### DeleteEntityRequest

(synq.entities.custom.v1.DeleteEntityRequest)

DeleteEntityRequest is the request message for the DeleteEntity method.

| Field | Type                       | Description                         |
| ----- | -------------------------- | ----------------------------------- |
| id    | [ Identifier](#identifier) | Identifier of the entity to delete. |

### DeleteEntityResponse

(synq.entities.custom.v1.DeleteEntityResponse)

DeleteEntityResponse is the response message for the DeleteEntity method.

### ListEntitiesRequest

(synq.entities.custom.v1.ListEntitiesRequest)

### ListEntitiesResponse

(synq.entities.custom.v1.ListEntitiesResponse)

| Field    | Type                       | Description |
| -------- | -------------------------- | ----------- |
| entities | [repeated Entity](#entity) | none        |

### UpsertEntityRequest

(synq.entities.custom.v1.UpsertEntityRequest)

UpsertEntityRequest is the request message for the UpsertEntity method.

| Field  | Type               | Description                     |
| ------ | ------------------ | ------------------------------- |
| entity | [ Entity](#entity) | The entity to create or update. |

### UpsertEntityResponse

(synq.entities.custom.v1.UpsertEntityResponse)

UpsertEntityResponse is the response message for the UpsertEntity method.

### DeleteEntitiesGroupRequest

(synq.entities.custom.v1.DeleteEntitiesGroupRequest)

| Field     | Type               | Description |
| --------- | ------------------ | ----------- |
| group\_id | [ string](#string) | none        |

### DeleteEntitiesGroupResponse

(synq.entities.custom.v1.DeleteEntitiesGroupResponse)

### Group

(synq.entities.custom.v1.Group)

Group is a collection of entities.

| Field       | Type                               | Description                                       |
| ----------- | ---------------------------------- | ------------------------------------------------- |
| group\_id   | [ string](#string)                 | Identifier of the group.                          |
| entity\_ids | [repeated Identifier](#identifier) | Identifiers of entities that belong to the group. |
| created\_at | [ Timestamp](#timestamp)           | Timestamp when the group was created.             |
| updated\_at | [ Timestamp](#timestamp)           | Timestamp when the group was last updated.        |

### ListEntityGroupsRequest

(synq.entities.custom.v1.ListEntityGroupsRequest)

### ListEntityGroupsResponse

(synq.entities.custom.v1.ListEntityGroupsResponse)

| Field            | Type                     | Description |
| ---------------- | ------------------------ | ----------- |
| entities\_groups | [repeated Group](#group) | none        |

### UpsertEntitiesGroupRequest

(synq.entities.custom.v1.UpsertEntitiesGroupRequest)

| Field | Type             | Description |
| ----- | ---------------- | ----------- |
| group | [ Group](#group) | none        |

### UpsertEntitiesGroupResponse

(synq.entities.custom.v1.UpsertEntitiesGroupResponse)

| Field        | Type                               | Description |
| ------------ | ---------------------------------- | ----------- |
| deleted\_ids | [repeated Identifier](#identifier) | none        |

### DeleteTypeRequest

(synq.entities.custom.v1.DeleteTypeRequest)

| Field    | Type             | Description                                     |
| -------- | ---------------- | ----------------------------------------------- |
| type\_id | [ int32](#int32) | Identifier of the custom entity type to delete. |

### DeleteTypeResponse

(synq.entities.custom.v1.DeleteTypeResponse)

### ListTypesRequest

(synq.entities.custom.v1.ListTypesRequest)

### ListTypesResponse

(synq.entities.custom.v1.ListTypesResponse)

| Field | Type                   | Description       |
| ----- | ---------------------- | ----------------- |
| types | [repeated Type](#type) | List of entities. |

### UpsertTypeRequest

(synq.entities.custom.v1.UpsertTypeRequest)

| Field | Type           | Description                 |
| ----- | -------------- | --------------------------- |
| type  | [ Type](#type) | Entity to create or update. |

### UpsertTypeResponse

(synq.entities.custom.v1.UpsertTypeResponse)

### CheckRelationship

(synq.entities.custom.v1.CheckRelationship)

| Field            | Type                       | Description |
| ---------------- | -------------------------- | ----------- |
| check            | [ Identifier](#identifier) | none        |
| checked          | [ Identifier](#identifier) | none        |
| checked\_columns | [repeated string](#string) | none        |

### DeleteCheckRelationshipsRequest

(synq.entities.custom.v1.DeleteCheckRelationshipsRequest)

| Field                | Type                                             | Description |
| -------------------- | ------------------------------------------------ | ----------- |
| check\_relationships | [repeated CheckRelationship](#checkrelationship) | none        |

### DeleteCheckRelationshipsResponse

(synq.entities.custom.v1.DeleteCheckRelationshipsResponse)

### UpsertCheckRelationshipsRequest

(synq.entities.custom.v1.UpsertCheckRelationshipsRequest)

| Field                | Type                                             | Description |
| -------------------- | ------------------------------------------------ | ----------- |
| check\_relationships | [repeated CheckRelationship](#checkrelationship) | none        |

### UpsertCheckRelationshipsResponse

(synq.entities.custom.v1.UpsertCheckRelationshipsResponse)

### Folder

(synq.entities.folders.v1.Folder)

Folder is one node in the folder / containment hierarchy: an integration root,
a container (database, schema, project), or a nested folder. Members that are
not themselves folders (tables, models, …) are returned as entity ids, not as
`Folder`s.

| Field                | Type                                   | Description                                                                                                                                                                                                                                                                        |
| -------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| folder\_entity\_id   | [ string](#string)                     | Opaque, authoritative id of this folder. Round-trip it verbatim as the `parent` of `Browse` or the `folder` of `ListMembers`; do not parse it. It is the canonical handle for a folder — always prefer it over rebuilding a location from `ref` when calling back in.              |
| ref                  | [ FolderRef](#folderref)               | Structured, human-friendly address of this folder. Populated when it can be derived from the surrounding hierarchy (always for `GetFolderOf`, and for `Browse` when the parent location is known). When it cannot be derived, `folder_entity_id` remains the authoritative handle. |
| name                 | [ string](#string)                     | Display name of this folder (its own leaf name, e.g. "sales").                                                                                                                                                                                                                     |
| full\_name           | [repeated string](#string)             | Full display path from the root down to this folder (root first, leaf last), e.g. \["clickhouse-prod", "default", "sales"]. Suitable for rendering a breadcrumb.                                                                                                                   |
| type                 | [ EntityType](#entitytype)             | Entity type of this node. Folders synthesized purely for grouping report an unspecified type; container entities that also act as folders (databases, schemas, projects) report their real type.                                                                                   |
| platform             | [ DataPlatformType](#dataplatformtype) | Platform this folder belongs to, when known.                                                                                                                                                                                                                                       |
| child\_folder\_count | [ uint32](#uint32)                     | Number of direct sub-folders. Best-effort: it may be reported as a collapsed count for lazily-loaded folders and can be 0 when the count was not loaded.                                                                                                                           |
| member\_count        | [ uint32](#uint32)                     | Number of direct, non-folder members (entities that sit directly in this folder). Best-effort and may be 0 when not loaded.                                                                                                                                                        |
| role                 | [ FolderRole](#folderrole)             | How this folder participates in browsing.                                                                                                                                                                                                                                          |

### BrowseRequest

(synq.entities.folders.v1.BrowseRequest)

| Field                                                                                                           | Type                     | Description                                                                                              |
| --------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) parent.parent\_folder\_entity\_id | [ string](#string)       | Opaque id of the parent folder to browse into (from `Folder.folder_entity_id`).                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) parent.parent\_ref                | [ FolderRef](#folderref) | Structured address of the parent folder to browse into.                                                  |
| filter                                                                                                          | [ Query](#query)         | Optional filter. When set, the returned `member_entity_ids` are limited to entities matching this query. |

### BrowseResponse

(synq.entities.folders.v1.BrowseResponse)

| Field               | Type                       | Description                                                                                                                                                                                          |
| ------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| folders             | [repeated Folder](#folder) | Direct sub-folders of the browsed location (or the roots, when no `parent` was given).                                                                                                               |
| member\_entity\_ids | [repeated string](#string) | Opaque entity ids of the direct, non-folder members of the browsed folder. Empty when browsing the roots. Shallow by default — members of sub-folders are not included unless `depth` expanded them. |

### GetFolderOfRequest

(synq.entities.folders.v1.GetFolderOfRequest)

| Field       | Type                       | Description                                                                                                   |
| ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------- |
| entity\_ids | [repeated string](#string) | Opaque entity ids to look up. Ids that do not exist, or that live in no folder, are absent from the response. |

### GetFolderOfResponse

(synq.entities.folders.v1.GetFolderOfResponse)

| Field                       | Type                                                          | Description                                          |
| --------------------------- | ------------------------------------------------------------- | ---------------------------------------------------- |
| breadcrumbs\_by\_entity\_id | [map BreadcrumbsByEntityIdEntry](#breadcrumbsbyentityidentry) | Requested entity id -> its containing breadcrumb(s). |

### GetFolderOfResponse.Breadcrumb

(synq.entities.folders.v1.GetFolderOfResponse.Breadcrumb)

One containing breadcrumb: the folders from a root down to (and including)
the entity's immediate parent, ordered root first.

| Field   | Type                       | Description |
| ------- | -------------------------- | ----------- |
| folders | [repeated Folder](#folder) | none        |

### GetFolderOfResponse.Breadcrumbs

(synq.entities.folders.v1.GetFolderOfResponse.Breadcrumbs)

All breadcrumbs for one entity. Most entities have a single breadcrumb; an
entity placed in several hierarchies has one per hierarchy.

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| breadcrumbs | [repeated Breadcrumb](#breadcrumb) | none        |

### GetFolderOfResponse.BreadcrumbsByEntityIdEntry

(synq.entities.folders.v1.GetFolderOfResponse.BreadcrumbsByEntityIdEntry)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| key   | [ string](#string)           | none        |
| value | [ Breadcrumbs](#breadcrumbs) | none        |

### ListMembersRequest

(synq.entities.folders.v1.ListMembersRequest)

| Field                                                                                                   | Type                               | Description                                                                                                                           |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) folder.folder\_entity\_id | [ string](#string)                 | Opaque id of the folder (from `Folder.folder_entity_id`).                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) folder.folder\_ref        | [ FolderRef](#folderref)           | Structured address of the folder.                                                                                                     |
| deep                                                                                                    | [ bool](#bool)                     | When true, include entities in all nested sub-folders. When false (default), return only the entities placed directly in this folder. |
| types                                                                                                   | [repeated EntityType](#entitytype) | Optional entity-type filter. Empty returns all types.                                                                                 |
| filter                                                                                                  | [ Query](#query)                   | Optional query filter. When set, only members matching this query are returned.                                                       |
| pagination                                                                                              | [ Pagination](#pagination)         | Pagination.                                                                                                                           |

### ListMembersResponse

(synq.entities.folders.v1.ListMembersResponse)

| Field       | Type                       | Description                                |
| ----------- | -------------------------- | ------------------------------------------ |
| entity\_ids | [repeated string](#string) | Opaque entity ids of the folder's members. |
| page\_info  | [ PageInfo](#pageinfo)     | Pagination cursor for the next page.       |

### BatchSchemaMismatchesRequest

(synq.entities.schemas.v1.BatchSchemaMismatchesRequest)

BatchGetSchemaMismatchesRequest is the request message for the BatchGetSchemaMismatches method.

| Field | Type                               | Description                                               |
| ----- | ---------------------------------- | --------------------------------------------------------- |
| ids   | [repeated Identifier](#identifier) | Identifiers of the entities to get schema mismatches for. |

### BatchSchemaMismatchesResponse

(synq.entities.schemas.v1.BatchSchemaMismatchesResponse)

BatchGetSchemaMismatchesResponse is the response message for the BatchGetSchemaMismatches method.

| Field              | Type                                       | Description                                         |
| ------------------ | ------------------------------------------ | --------------------------------------------------- |
| schema\_mismatches | [repeated SchemaMismatch](#schemamismatch) | Schema mismatches found for the requested entities. |

### SchemaMismatch

(synq.entities.schemas.v1.SchemaMismatch)

SchemaMismatch represents a schema drift between a definer entity (e.g., dbt model)
and an origin entity (e.g., BigQuery table) where columns are defined but missing in origin.

| Field                                 | Type                       | Description                                                                                 |
| ------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------- |
| definer\_id                           | [ Identifier](#identifier) | Identifier of the entity that defines the columns (e.g., dbt model).                        |
| origin\_id                            | [ Identifier](#identifier) | Identifier of the entity where the columns are expected but missing (e.g., BigQuery table). |
| missing\_origin\_column\_names        | [repeated string](#string) | Names of the columns that are defined but missing in the origin.                            |
| missing\_origin\_column\_human\_names | [repeated string](#string) | Human-readable names of the columns that are defined but missing in the origin.             |

### GetSchemaRequest

(synq.entities.schemas.v1.GetSchemaRequest)

GetEntityRequest is the request message for the GetEntity method.

| Field | Type                       | Description                      |
| ----- | -------------------------- | -------------------------------- |
| id    | [ Identifier](#identifier) | Identifier of the entity to get. |

### GetSchemaResponse

(synq.entities.schemas.v1.GetSchemaResponse)

GetEntityResponse is the response message for the GetEntity method.

| Field                                                                                         | Type                       | Description                          |
| --------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schema.schema | [optional Schema](#schema) | Schema of the entity, might be empty |

### BatchResolveIdentifiersRequest

(synq.entities.resolve.v1.BatchResolveIdentifiersRequest)

| Field            | Type                               | Description                                                                     |
| ---------------- | ---------------------------------- | ------------------------------------------------------------------------------- |
| ids              | [repeated Identifier](#identifier) | Identifiers to resolve.                                                         |
| check\_existence | [ bool](#bool)                     | When true, also verify that the resolved entities actually exist in the system. |

### BatchResolveIdentifiersResponse

(synq.entities.resolve.v1.BatchResolveIdentifiersResponse)

| Field                 | Type                                               | Description |
| --------------------- | -------------------------------------------------- | ----------- |
| resolved\_identifiers | [repeated ResolvedIdentifier](#resolvedidentifier) | none        |

### ResolvedIdentifier

(synq.entities.resolve.v1.ResolvedIdentifier)

ResolvedIdentifier contains the resolution result for a single input identifier.

| Field                                                                                         | Type                               | Description                                                                                           |
| --------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------- |
| id                                                                                            | [ Identifier](#identifier)         | The original input identifier.                                                                        |
| synq\_path                                                                                    | [ string](#string)                 | The Coalesce Quality path for this identifier.                                                        |
| identities                                                                                    | [repeated Identifier](#identifier) | All identifiers that are part of the same identity group (including the input identifier).            |
| identity\_synq\_paths                                                                         | [repeated string](#string)         | All Coalesce Quality paths in the identity group.                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_exists.exists | [optional bool](#bool)             | Whether the entity exists in the system. Only populated when check\_existence is true in the request. |

### IdentityRule

(synq.entities.identities.v2.IdentityRule)

IdentityRule declares how entities are recognized as the same logical entity.
A rule is evaluated against the current set of entities, so it automatically
applies to entities that appear after the rule is created. The `kind` field
selects the matching strategy and must be set to a supported rule type.

| Field                                                                                                              | Type                                                     | Description |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) kind.prefix\_rewrite\_identity\_rule | [ PrefixRewriteIdentityRule](#prefixrewriteidentityrule) | none        |

### PrefixRewriteIdentityRule

(synq.entities.identities.v2.PrefixRewriteIdentityRule)

PrefixRewriteIdentityRule treats two identifier prefixes as the same instance:
any entity whose identifier begins with source\_prefix is considered identical
to the entity with the same identifier under target\_prefix. The relationship
is bidirectional.

| Field          | Type               | Description                                                              |
| -------------- | ------------------ | ------------------------------------------------------------------------ |
| source\_prefix | [ string](#string) | Identifier prefix to match (for example, an instance or account prefix). |
| target\_prefix | [ string](#string) | Identifier prefix that matched entities are unified with.                |

### BatchChangeRequest

(synq.entities.changes.v1.BatchChangeRequest)

BatchChangeRequest contains the parameters needed to retrieve multiple changes by their IDs.

| Field       | Type                       | Description                                                                                  |
| ----------- | -------------------------- | -------------------------------------------------------------------------------------------- |
| change\_ids | [repeated string](#string) | List of change IDs to retrieve. Each ID uniquely identifies a specific change in the system. |

### BatchChangeResponse

(synq.entities.changes.v1.BatchChangeResponse)

BatchChangeResponse contains the requested changes mapped by their IDs.

| Field   | Type                              | Description                                                                                                                            |
| ------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| changes | [map ChangesEntry](#changesentry) | Map of change ID to EntityChange. Only includes changes that were found and accessible. Missing changes are omitted from the response. |

### BatchChangeResponse.ChangesEntry

(synq.entities.changes.v1.BatchChangeResponse.ChangesEntry)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| key   | [ string](#string)             | none        |
| value | [ EntityChange](#entitychange) | none        |

### ListRequest

(synq.entities.changes.v1.ListRequest)

ListRequest contains the parameters needed to retrieve changes for a specific entity.

| Field                                                                                                         | Type                                           | Description                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                            | [ Identifier](#identifier)                     | Identifier of the entity to get changes for. This can be a path identifier that uniquely identifies the entity in the system. |
| ids                                                                                                           | [repeated Identifier](#identifier)             | Identifiers of entities for which to get changes. Change is returned when it affects id.                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_before.change\_before | [optional Timestamp](#timestamp)               | Return changes older than or on `before`. Defaults to `now()`.                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_after.change\_after   | [optional Timestamp](#timestamp)               | Return changes newer than until. Defaults to before - 7days,                                                                  |
| limit\_to\_change\_types                                                                                      | [repeated EntityChangeType](#entitychangetype) | Return only changes of specific types.                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination         | [optional Pagination](#pagination)             | Pagination parameters for limiting and cursoring through results.                                                             |

### ListResponse

(synq.entities.changes.v1.ListResponse)

ListResponse contains the list of changes made to the requested entity.

| Field                                                                                                 | Type                                   | Description                                                                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| changes                                                                                               | [repeated EntityChange](#entitychange) | List of recent changes to the state of entity. Changes are returned from newest to oldest. Each change includes: - The type of change (git commit, schema change, SQL definition change) - When the change occurred - Details specific to the type of change - Metadata about who made the change |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_page\_info.page\_info | [optional PageInfo](#pageinfo)         | Pagination information for navigating through results.                                                                                                                                                                                                                                            |

### ImpactedDataproduct

(synq.entities.impact.v1.ImpactedDataproduct)

| Field              | Type                                                 | Description |
| ------------------ | ---------------------------------------------------- | ----------- |
| id                 | [ DataproductIdentifier](#dataproductidentifier)     | none        |
| title              | [ string](#string)                                   | none        |
| description        | [ string](#string)                                   | none        |
| folder             | [ string](#string)                                   | none        |
| priority           | [ Priority](#priority)                               | none        |
| impacted\_entities | [repeated ImpactedEntityGroup](#impactedentitygroup) | none        |

### ImpactedEntityGroup

(synq.entities.impact.v1.ImpactedEntityGroup)

Multiple Entities which form logical group, e.g. dbt Model and it's table

| Field                                                                                     | Type                               | Description |
| ----------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_name.name | [optional string](#string)         | none        |
| ids                                                                                       | [repeated Identifier](#identifier) | none        |
| synq\_paths                                                                               | [repeated string](#string)         | none        |

### ImpactedOwner

(synq.entities.impact.v1.ImpactedOwner)

| Field              | Type                                                 | Description |
| ------------------ | ---------------------------------------------------- | ----------- |
| id                 | [ OwnerIdentifier](#owneridentifier)                 | none        |
| title              | [ string](#string)                                   | none        |
| impacted\_entities | [repeated ImpactedEntityGroup](#impactedentitygroup) | none        |

### GetImpactRequest

(synq.entities.impact.v1.GetImpactRequest)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| ids   | [repeated Identifier](#identifier) | none        |

### GetImpactResponse

(synq.entities.impact.v1.GetImpactResponse)

| Field                    | Type                                                 | Description |
| ------------------------ | ---------------------------------------------------- | ----------- |
| entities                 | [repeated ImpactedEntityGroup](#impactedentitygroup) | none        |
| downstream\_entities     | [repeated ImpactedEntityGroup](#impactedentitygroup) | none        |
| dataproducts             | [repeated ImpactedDataproduct](#impacteddataproduct) | none        |
| downstream\_dataproducts | [repeated ImpactedDataproduct](#impacteddataproduct) | none        |
| owners                   | [repeated ImpactedOwner](#impactedowner)             | none        |
| downstream\_owners       | [repeated ImpactedOwner](#impactedowner)             | none        |

### BatchDatabaseCoordinatesRequest

(synq.entities.coordinates.v1.BatchDatabaseCoordinatesRequest)

BatchGetEntitiesRequest is the request message for the BatchGetEntities method.

| Field | Type                               | Description                         |
| ----- | ---------------------------------- | ----------------------------------- |
| ids   | [repeated Identifier](#identifier) | Identifiers of the entities to get. |

### BatchDatabaseCoordinatesResponse

(synq.entities.coordinates.v1.BatchDatabaseCoordinatesResponse)

BatchGetEntitiesResponse is the response message for the BatchGetEntities method.

| Field       | Type                                                 | Description                       |
| ----------- | ---------------------------------------------------- | --------------------------------- |
| coordinates | [repeated DatabaseCoordinates](#databasecoordinates) | The entities that were retrieved. |

### BatchIdsByCoordinatesRequest

(synq.entities.coordinates.v1.BatchIdsByCoordinatesRequest)

| Field    | Type                       | Description                                                         |
| -------- | -------------------------- | ------------------------------------------------------------------- |
| sql\_fqn | [repeated string](#string) | Databases coordinates as present in the SQL, e.g. `db.schema.table` |

### BatchIdsByCoordinatesResponse

(synq.entities.coordinates.v1.BatchIdsByCoordinatesResponse)

| Field                | Type                                               | Description |
| -------------------- | -------------------------------------------------- | ----------- |
| matched\_coordinates | [repeated MatchedCoordinates](#matchedcoordinates) | none        |

### BatchIdsByCoordinatesResponse.MatchedCoordinates

(synq.entities.coordinates.v1.BatchIdsByCoordinatesResponse.MatchedCoordinates)

| Field      | Type                                                 | Description |
| ---------- | ---------------------------------------------------- | ----------- |
| sql\_fqn   | [ string](#string)                                   | none        |
| candidates | [repeated DatabaseCoordinates](#databasecoordinates) | none        |

### DatabaseContext

(synq.entities.coordinates.v1.DatabaseContext)

DatabaseContext provides the default database execution context
for resolving unqualified references (e.g. table names in SQL).

| Field          | Type               | Description                                                                                                                                                                                                                                                      |
| -------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| instance\_name | [ string](#string) | Instance identifier (e.g. Snowflake account, Databricks workspace URL, BigQuery project)                                                                                                                                                                         |
| database\_name | [ string](#string) | Database or catalog name                                                                                                                                                                                                                                         |
| schema\_name   | [ string](#string) | Schema name                                                                                                                                                                                                                                                      |
| object\_name   | [ string](#string) | Object name (e.g. table or view name) that the SQL writes to or creates. Only set when the SQL defines or materializes an object, e.g. `CREATE TABLE <object_name> AS SELECT ...`. Leave empty for read-only SQL such as dashboard queries or SELECT statements. |

### DatabaseCoordinates

(synq.entities.coordinates.v1.DatabaseCoordinates)

| Field                                                                                                                   | Type                                                       | Description                                                                                                                                               |
| ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| identifiers                                                                                                             | [repeated Identifier](#identifier)                         | none                                                                                                                                                      |
| synq\_paths                                                                                                             | [repeated string](#string)                                 | none                                                                                                                                                      |
| dialect\_name                                                                                                           | [ string](#string)                                         | none                                                                                                                                                      |
| dialect                                                                                                                 | [ SqlDialect](#sqldialect)                                 | none                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_data\_platform.data\_platform           | [optional DataPlatformIdentifier](#dataplatformidentifier) | none                                                                                                                                                      |
| data\_platform\_type                                                                                                    | [ DataPlatformType](#dataplatformtype)                     | none                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_connection\_id.connection\_id           | [optional string](#string)                                 | none                                                                                                                                                      |
| instance\_name                                                                                                          | [ string](#string)                                         | none                                                                                                                                                      |
| database\_name                                                                                                          | [ string](#string)                                         | none                                                                                                                                                      |
| schema\_name                                                                                                            | [ string](#string)                                         | none                                                                                                                                                      |
| object\_name                                                                                                            | [ string](#string)                                         | none                                                                                                                                                      |
| sql\_fqn                                                                                                                | [ string](#string)                                         | none                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sql\_database\_name.sql\_database\_name | [optional string](#string)                                 | SQL-addressable components (only parts usable in SQL queries). For Postgres, sql\_database\_name is empty since cross-database queries are not supported. |
| sql\_schema\_name                                                                                                       | [ string](#string)                                         | none                                                                                                                                                      |
| sql\_object\_name                                                                                                       | [ string](#string)                                         | none                                                                                                                                                      |

### ListCodeRequest

(synq.entities.code.v1.ListCodeRequest)

ListCodeRequest is the request message for the ListCode method.

| Field | Type                       | Description                                                                                              |
| ----- | -------------------------- | -------------------------------------------------------------------------------------------------------- |
| id    | [ Identifier](#identifier) | Identifier of the entity to retrieve code for. This can be any entity type that contains code artifacts. |

### ListCodeResponse

(synq.entities.code.v1.ListCodeResponse)

ListCodeResponse is the response message for the ListCode method.

| Field       | Type                               | Description                                                                                                                                          |
| ----------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| codes       | [repeated Code](#code)             | List of code artifacts associated with the requested entity. Each code artifact includes its content, type, and metadata about when it was captured. |
| identifiers | [repeated Identifier](#identifier) | none                                                                                                                                                 |
| synq\_paths | [repeated string](#string)         | none                                                                                                                                                 |

### SqlExpression

(synq.common.v1.SqlExpression)

SqlExpression carries a SQL string together with the placeholder tokens
the caller must substitute before executing it.

Empty `placeholders` means `sql` is byte-equal to what runs in the warehouse
and is safe to dispatch without further processing. When `placeholders` is
non-empty, every listed token appears literally in `sql` and must be replaced
(or otherwise interpreted) by the caller before execution.

| Field        | Type                                       | Description                                                                                                                                  |
| ------------ | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| sql          | [ string](#string)                         | SQL string. Dialect matches the integration that owns the expression's parent resource. May contain placeholder tokens — see `placeholders`. |
| placeholders | [repeated SqlPlaceholder](#sqlplaceholder) | Placeholders present in `sql`. Order is undefined; each token is unique within the slice. Absent when `sql` is directly runnable.            |

### SqlPlaceholder

(synq.common.v1.SqlPlaceholder)

SqlPlaceholder describes one substitution slot in a SqlExpression.

| Field       | Type               | Description                                                                                                                                                                                                                                           |
| ----------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| token       | [ string](#string) | Literal token as it appears in `sql`, e.g. "\{from}".                                                                                                                                                                                                 |
| description | [ string](#string) | Human- and AI-readable purpose of the placeholder. Should answer "what value should I substitute, and in what form?" without relying on out-of-band documentation. Example: "Lower bound of the metric query time window (inclusive, UTC timestamp)." |

### ScopeFilter

(synq.common.v1.ScopeFilter)

ScopeFilter defines include/exclude rules for scoping data warehouse queries.

Matching semantics:

* If include is non-empty, a (database, schema, table) tuple must match at least one include rule.
* If exclude is non-empty, the tuple must NOT match any exclude rule.
* Exclude takes precedence over include (exclude wins).
* Empty/unset ScopeFilter means accept all.

| Field   | Type                             | Description                                                                       |
| ------- | -------------------------------- | --------------------------------------------------------------------------------- |
| include | [repeated ScopeRule](#scoperule) | Include rules. If non-empty, only matching objects are accepted.                  |
| exclude | [repeated ScopeRule](#scoperule) | Exclude rules. Matching objects are rejected, even if they match an include rule. |

### ScopeRule

(synq.common.v1.ScopeRule)

ScopeRule is a multi-level pattern for matching data warehouse objects.
All non-empty fields must match for the rule to apply.
Empty field means "match anything" at that level (wildcard).
Patterns support glob syntax where \* matches zero or more characters.
Matching is case-insensitive.

| Field    | Type               | Description                                                                                                                                                                                                                                                                                                                                                                                            |
| -------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| database | [ string](#string) | Database-level pattern. Only meaningful for warehouses that expose more than one database/catalog per connection — Snowflake & Trino (catalog), Databricks (catalog), Athena (Glue catalog), DuckDB (database). Ignored by single-database/-project connections (Postgres, Redshift, MSSQL, Oracle, BigQuery project) and by MySQL/ClickHouse, which filter their namespace at the schema level below. |
| schema   | [ string](#string) | Schema-level pattern. The level directly above a table. Maps to: dataset in BigQuery; database (namespace) in MySQL & ClickHouse; schema in Postgres/Redshift/Snowflake/Trino/MSSQL; owner in Oracle.                                                                                                                                                                                                  |
| table    | [ string](#string) | Table or view name pattern.                                                                                                                                                                                                                                                                                                                                                                            |

### AlertIdentifier

(synq.alerts.services.v1.AlertIdentifier)

| Field                                                                                        | Type               | Description                               |
| -------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) identifier.id  | [ string](#string) | ID of the alert configuration to update.  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) identifier.fqn | [ string](#string) | FQN of the alert configuration to update. |

### BatchGetRequest

(synq.alerts.services.v1.BatchGetRequest)

| Field       | Type                                         | Description               |
| ----------- | -------------------------------------------- | ------------------------- |
| identifiers | [repeated AlertIdentifier](#alertidentifier) | IDs of the alerts to get. |

### BatchGetResponse

(synq.alerts.services.v1.BatchGetResponse)

| Field  | Type                            | Description                         |
| ------ | ------------------------------- | ----------------------------------- |
| alerts | [map AlertsEntry](#alertsentry) | Alerts mapped by their identifiers. |

### BatchGetResponse.AlertsEntry

(synq.alerts.services.v1.BatchGetResponse.AlertsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Alert](#alert)   | none        |

### CreateRequest

(synq.alerts.services.v1.CreateRequest)

CreateRequest creates a new alert configuration.

| Field                                                                                       | Type                                       | Description                                                                                                                         |
| ------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                        | [ string](#string)                         | Human-readable name for the alert configuration.                                                                                    |
| fqn                                                                                         | [ string](#string)                         | User-provided fully qualified name for the alert config. This is a unique identifier that users can specify to reference the alert. |
| trigger                                                                                     | [ EntityGroupQuery](#entitygroupquery)     | Query that defines which entities can trigger this alert.                                                                           |
| targets                                                                                     | [repeated AlertingTarget](#alertingtarget) | Targets where alerts will be sent.                                                                                                  |
| settings                                                                                    | [ AlertSettings](#alertsettings)           | Additional settings for the specific alert type.                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_owner.owner | [optional Owner](#owner)                   | Optional owner information for the alert configuration.                                                                             |

### CreateResponse

(synq.alerts.services.v1.CreateResponse)

CreateResponse returns the created alert configuration.

| Field | Type             | Description                               |
| ----- | ---------------- | ----------------------------------------- |
| alert | [ Alert](#alert) | The alert configuration that was created. |

### DeleteRequest

(synq.alerts.services.v1.DeleteRequest)

DeleteRequest specifies which alert configuration to delete.
The config can be identified by either ID or FQN.

| Field      | Type                                 | Description                          |
| ---------- | ------------------------------------ | ------------------------------------ |
| identifier | [ AlertIdentifier](#alertidentifier) | Identifier for the config to delete. |

### DeleteResponse

(synq.alerts.services.v1.DeleteResponse)

DeleteResponse confirms the deletion (empty response).

Empty response - successful deletion is indicated by HTTP 200 status.

### ListRequest

(synq.alerts.services.v1.ListRequest)

ListRequest filters alert configurations to retrieve.

| Field                                                                                       | Type                     | Description                                           |
| ------------------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_owner.owner | [optional Owner](#owner) | Optional filter by owner of the alert configurations. |

### ListResponse

(synq.alerts.services.v1.ListResponse)

ListResponse returns the filtered list of alert configurations.

| Field       | Type                       | Description                                                    |
| ----------- | -------------------------- | -------------------------------------------------------------- |
| alerts\_ids | [repeated string](#string) | The list of alert configurations matching the filter criteria. |

### ToggleEnabledRequest

(synq.alerts.services.v1.ToggleEnabledRequest)

ToggleEnabledRequest enables or disables an alert configuration.
The config can be identified by either ID or FQN.

| Field       | Type                                 | Description                                                                                            |
| ----------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| identifier  | [ AlertIdentifier](#alertidentifier) | Identifier for the config to toggle.                                                                   |
| is\_enabled | [ bool](#bool)                       | Whether the alert configuration should be enabled. true = enable the alert, false = disable the alert. |

### ToggleEnabledResponse

(synq.alerts.services.v1.ToggleEnabledResponse)

ToggleEnabledResponse confirms the toggle operation (empty response).

Empty response - successful toggle is indicated by HTTP 200 status.

### UpdateRequest

(synq.alerts.services.v1.UpdateRequest)

UpdateRequest updates an existing alert configuration.
The config can be identified by either ID or FQN.

| Field                                                                                             | Type                                           | Description                                                              |
| ------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ |
| identifier                                                                                        | [ AlertIdentifier](#alertidentifier)           | Identifier for the config to update.                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_name.name         | [optional string](#string)                     | Human-readable name for the alert configuration.                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_trigger.trigger   | [optional EntityGroupQuery](#entitygroupquery) | Query that defines which entities can trigger this alert.                |
| targets                                                                                           | [repeated AlertingTarget](#alertingtarget)     | Targets where alerts will be sent. Leave empty to keep existing targets. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_settings.settings | [optional AlertSettings](#alertsettings)       | Additional settings for the specific alert type.                         |

### UpdateResponse

(synq.alerts.services.v1.UpdateResponse)

UpdateResponse returns the updated alert configuration.

| Field | Type             | Description                               |
| ----- | ---------------- | ----------------------------------------- |
| alert | [ Alert](#alert) | The alert configuration that was updated. |

### Alert

(synq.alerts.v1.Alert)

Alert represents the configuration for an alert.
It contains all the necessary information to trigger and send alerts.

| Field                                                                                       | Type                                       | Description                                                                                                                         |
| ------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                          | [ string](#string)                         | Unique identifier for the alert config (system-generated).                                                                          |
| name                                                                                        | [ string](#string)                         | Human-readable name for the alert configuration.                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_fqn.fqn     | [optional string](#string)                 | User-provided fully qualified name for the alert config. This is a unique identifier that users can specify to reference the alert. |
| trigger                                                                                     | [ EntityGroupQuery](#entitygroupquery)     | Query that defines which entities can trigger this alert.                                                                           |
| targets                                                                                     | [repeated AlertingTarget](#alertingtarget) | List of targets where alerts will be sent.                                                                                          |
| settings                                                                                    | [ AlertSettings](#alertsettings)           | Additional settings for the specific alert type.                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_owner.owner | [optional Owner](#owner)                   | none                                                                                                                                |
| created\_at                                                                                 | [ Timestamp](#timestamp)                   | Timestamp when the alert config was created.                                                                                        |
| is\_disabled                                                                                | [ bool](#bool)                             | Whether the alert config is currently disabled.                                                                                     |

### Alert.Owner

(synq.alerts.v1.Alert.Owner)

Owner information for the alert configuration.
If set, the alert is attributed to the specified owner and ownership.

| Field         | Type               | Description                                      |
| ------------- | ------------------ | ------------------------------------------------ |
| owner\_path   | [ string](#string) | Path identifying the owner of this alert config. |
| ownership\_id | [ string](#string) | Ownership identifier.                            |

### AlertSettings

(synq.alerts.v1.AlertSettings)

AlertSettings defines the properties that affect the trigger and presentation of an alert.
It specifies the conditions under which an alert should be fired and how it should behave.

| Field                                                                                                 | Type                                                     | Description                                                                   |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) settings.schema\_change | [ SchemaChangeAlertSettings](#schemachangealertsettings) | Alert triggered by schema changes.                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) settings.issue          | [ IssueAlertSettings](#issuealertsettings)               | Unified issue alert settings (replaces entity\_failure and issue\_lifecycle). |

### EntityGroupQuery

(synq.alerts.v1.EntityGroupQuery)

EntityGroupQuery defines a query to select a group of entities.
This is used to specify which entities should be monitored by an alert.

| Field | Type                                       | Description                                     |
| ----- | ------------------------------------------ | ----------------------------------------------- |
| parts | [repeated SelectionQuery](#selectionquery) | The parts that compose this entity group query. |

### IssueAlertSettings

(synq.alerts.v1.IssueAlertSettings)

IssueAlertSettings is the unified alert settings type for issue-based alerts.
It replaces both EntityFailureAlertSettings and IssueLifecycleAlertSettings.

| Field                         | Type                                             | Description                                                       |
| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------------------- |
| severities                    | [repeated Severity](#severity)                   | The severity levels that should trigger this alert.               |
| notify\_upstream              | [ bool](#bool)                                   | Whether to notify upstream dependencies when this alert triggers. |
| allow\_sql\_test\_audit\_link | [ bool](#bool)                                   | Whether to allow SQL test audit links in alert notifications.     |
| ongoing                       | [ OngoingAlertsStrategy](#ongoingalertsstrategy) | Strategy for handling ongoing/repeated alerts.                    |
| grouping                      | [ IssueGroupingStrategy](#issuegroupingstrategy) | Strategy for grouping issues in alert notifications.              |

### IssueGroupingStrategy

(synq.alerts.v1.IssueGroupingStrategy)

IssueGroupingStrategy controls how issues are grouped for alerting purposes.

| Field                                                                                                   | Type                               | Description |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.no\_grouping     | [ NoGrouping](#nogrouping)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.system\_detected | [ SystemDetected](#systemdetected) | none        |

### IssueGroupingStrategy.NoGrouping

(synq.alerts.v1.IssueGroupingStrategy.NoGrouping)

NoGrouping - each issue triggers a separate alert.

### IssueGroupingStrategy.SystemDetected

(synq.alerts.v1.IssueGroupingStrategy.SystemDetected)

SystemDetected - the system automatically groups related issues.

### OngoingAlertsStrategy

(synq.alerts.v1.OngoingAlertsStrategy)

OngoingAlertsStrategy defines how to handle ongoing/repeated alerts.
This prevents alert spam by controlling notification frequency.

| Field                                                                                           | Type                   | Description |
| ----------------------------------------------------------------------------------------------- | ---------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.disabled | [ Disabled](#disabled) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.stream   | [ Stream](#stream)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) strategy.schedule | [ Schedule](#schedule) | none        |

### OngoingAlertsStrategy.Disabled

(synq.alerts.v1.OngoingAlertsStrategy.Disabled)

Disabled strategy - no ongoing alerts will be sent after the initial alert.

No configuration needed - alerts are simply disabled after the first one.

### OngoingAlertsStrategy.Schedule

(synq.alerts.v1.OngoingAlertsStrategy.Schedule)

Schedule strategy - alerts are sent on a scheduled basis.

| Field | Type               | Description                                                                                                                                    |
| ----- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| cron  | [ string](#string) | Cron expression defining when ongoing alerts should be sent. Must be a valid cron expression (e.g., "0 9 \* \* MON" for every Monday at 9 AM). |

### OngoingAlertsStrategy.Stream

(synq.alerts.v1.OngoingAlertsStrategy.Stream)

Stream strategy - alerts are sent continuously as issues persist.

No configuration needed - alerts stream continuously.

### SchemaChangeAlertSettings

(synq.alerts.v1.SchemaChangeAlertSettings)

SchemaChangeAlertSettings configures alerts for schema changes.
This alert triggers when the schema of monitored entities changes.

| Field            | Type           | Description                                                        |
| ---------------- | -------------- | ------------------------------------------------------------------ |
| notify\_upstream | [ bool](#bool) | Whether to notify upstream dependencies when schema changes occur. |

### SelectionQuery

(synq.alerts.v1.SelectionQuery)

SelectionQuery represents a query that selects entities based on various criteria.
It combines multiple query parts with a logical operand.

| Field   | Type                             | Description                                                          |
| ------- | -------------------------------- | -------------------------------------------------------------------- |
| parts   | [repeated QueryPart](#querypart) | The individual query parts that make up this selection.              |
| operand | [ QueryOperand](#queryoperand)   | The logical operand used to combine the query parts (AND, OR, etc.). |

### SelectionQuery.QueryPart

(synq.alerts.v1.SelectionQuery.QueryPart)

A single part of a selection query.

| Field                                                                                                         | Type                                           | Description                                         |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier\_list           | [ IdentifierList](#identifierlist)             | Filter by specific entity identifiers.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_name\_search         | [ WithNameSearch](#withnamesearch)             | Filter by name pattern search.                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_type                 | [ WithType](#withtype)                         | Filter by entity type.                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_annotation           | [ WithAnnotation](#withannotation)             | Filter by annotation presence/value.                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_data\_platform         | [ InDataPlatform](#indataplatform)             | Filter by data platform.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_folder                 | [ InFolder](#infolder)                         | Filter by folder location.                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_data\_platform\_type | [ WithDataPlatformType](#withdataplatformtype) | Filter by data platform type.                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_dataproduct            | [ InDataproduct](#indataproduct)               | Filter by data product membership.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query                      | [ SelectionQuery](#selectionquery)             | Nested selection query for complex filtering.       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.unsupported                | [ Unsupported](#unsupported)                   | Unsupported query types for backward compatibility. |

### AlertingTarget

(synq.alerts.v1.AlertingTarget)

AlertingTarget represents a destination where alert notifications will be sent.
Each target type has its own specific configuration requirements.

| Field                                                                                          | Type                             | Description                                      |
| ---------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) target.slack     | [ SlackTarget](#slacktarget)     | Send alert to a Slack channel or user.           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) target.email     | [ EmailTarget](#emailtarget)     | Send alert via email.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) target.owner     | [ OwnerTarget](#ownertarget)     | Send alert to the owner of the monitored entity. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) target.ms\_teams | [ MsTeamsTarget](#msteamstarget) | Send alert to Microsoft Teams channel or member. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) target.webhook   | [ WebhookTarget](#webhooktarget) | Send alert via webhook integration.              |

### EmailTarget

(synq.alerts.v1.EmailTarget)

EmailTarget configures alert delivery via email.

| Field             | Type                       | Description                                                                                                         |
| ----------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| recipient\_emails | [repeated string](#string) | List of email addresses that will receive the alert notifications. Each email must be a valid email address format. |

### MsTeamsTarget

(synq.alerts.v1.MsTeamsTarget)

MsTeamsTarget configures alert delivery to Microsoft Teams.
Alerts are sent to a Microsoft Teams channel.

| Field   | Type               | Description               |
| ------- | ------------------ | ------------------------- |
| channel | [ string](#string) | Teams channel name or ID. |

### OwnerTarget

(synq.alerts.v1.OwnerTarget)

OwnerTarget configures alert delivery to the owner of the monitored entity.
This allows alerts to be automatically sent to whoever owns the data being monitored.

| Field       | Type               | Description                                                                                                               |
| ----------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| owner\_path | [ string](#string) | Path that identifies the ownership context for this target. This determines how the system will resolve the actual owner. |

### SlackTarget

(synq.alerts.v1.SlackTarget)

SlackTarget configures alert delivery to Slack.
Alerts are sent to a Slack channel.

| Field   | Type               | Description                                                  |
| ------- | ------------------ | ------------------------------------------------------------ |
| channel | [ string](#string) | Slack channel name or ID (e.g., "#alerts" or "C1234567890"). |

### WebhookTarget

(synq.alerts.v1.WebhookTarget)

WebhookTarget configures alert delivery via webhook/hook integrations.
This allows integration with external systems and custom notification workflows.

| Field       | Type               | Description                                                                                                 |
| ----------- | ------------------ | ----------------------------------------------------------------------------------------------------------- |
| webhook\_id | [ string](#string) | Unique identifier of the webhook to send alerts to. This references a pre-configured webhook in the system. |

### IamRequest

(synq.auth.iam.v1.IamRequest)

### IamResponse

(synq.auth.iam.v1.IamResponse)

| Field                                                                                                           | Type                       | Description                                                                                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| workspace                                                                                                       | [ string](#string)         | Workspace to which caller is authenticated                                                                                                                                                     |
| scopes                                                                                                          | [repeated Scope](#scope)   | What scopes are granted                                                                                                                                                                        |
| scope\_names                                                                                                    | [repeated string](#string) | Names of the scopes available                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id | [optional string](#string) | Indicates that the token is scoped to a specific integration                                                                                                                                   |
| subject                                                                                                         | [ string](#string)         | Identifier of the provided token                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_synq\_user\_id.synq\_user\_id   | [optional string](#string) | Coalesce Quality user ID associated with the token, present for user-level credentials                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_client\_type.client\_type       | [optional string](#string) | Indicates the client type through which the request was made                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user\_name.user\_name           | [optional string](#string) | Human-readable name of the authenticated user. Populated only when the token is tied to a Coalesce Quality user (i.e. `synq_user_id` is set); empty for workspace-level or third-party tokens. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user\_email.user\_email         | [optional string](#string) | Email address of the authenticated user. Populated only when the token is tied to a Coalesce Quality user (i.e. `synq_user_id` is set); empty for workspace-level or third-party tokens.       |

### BatchAcceptTestSuggestionsRequest

(synq.datachecks.testsuggestions.v1.BatchAcceptTestSuggestionsRequest)

| Field            | Type                               | Description                                                                                                                           |
| ---------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| ids              | [repeated string](#string)         | none                                                                                                                                  |
| recurrence\_rule | [ string](#string)                 | [Recurrence rule](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) for the execution schedule of the SqlTest.   |
| annotations      | [repeated Annotation](#annotation) | Annotations for the given test.These help filter the tests for later operations like listing by API, selection in UI, analytics, etc. |
| save\_failures   | [ bool](#bool)                     | Boolean flag to to toggle saving of failure runs.                                                                                     |

### BatchAcceptTestSuggestionsResponse

(synq.datachecks.testsuggestions.v1.BatchAcceptTestSuggestionsResponse)

| Field       | Type                               | Description                   |
| ----------- | ---------------------------------- | ----------------------------- |
| identifiers | [repeated Identifier](#identifier) | Identifiers of created tests. |

### BatchCreateTestSuggestionsRequest

(synq.datachecks.testsuggestions.v1.BatchCreateTestSuggestionsRequest)

| Field       | Type                                       | Description |
| ----------- | ------------------------------------------ | ----------- |
| suggestions | [repeated TestSuggestion](#testsuggestion) | none        |

### BatchCreateTestSuggestionsResponse

(synq.datachecks.testsuggestions.v1.BatchCreateTestSuggestionsResponse)

### BatchGetTestSuggestionsForEntitiesRequest

(synq.datachecks.testsuggestions.v1.BatchGetTestSuggestionsForEntitiesRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### BatchGetTestSuggestionsForEntitiesResponse

(synq.datachecks.testsuggestions.v1.BatchGetTestSuggestionsForEntitiesResponse)

| Field       | Type                                       | Description |
| ----------- | ------------------------------------------ | ----------- |
| suggestions | [repeated TestSuggestion](#testsuggestion) | none        |

### BatchRejectTestSuggestionsRequest

(synq.datachecks.testsuggestions.v1.BatchRejectTestSuggestionsRequest)

| Field                                                                                         | Type                       | Description |
| --------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| ids                                                                                           | [repeated string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reason.reason | [optional string](#string) | none        |

### BatchRejectTestSuggestionsResponse

(synq.datachecks.testsuggestions.v1.BatchRejectTestSuggestionsResponse)

### AcceptedValuesTest

(synq.datachecks.testsuggestions.v1.AcceptedValuesTest)

| Field            | Type                       | Description                           |
| ---------------- | -------------------------- | ------------------------------------- |
| column\_name     | [ string](#string)         | Name of the column to validate        |
| accepted\_values | [repeated string](#string) | List of allowed values for the column |

### BusinessRuleTest

(synq.datachecks.testsuggestions.v1.BusinessRuleTest)

| Field           | Type               | Description                                                   |
| --------------- | ------------------ | ------------------------------------------------------------- |
| sql\_expression | [ string](#string) | SQL expression that should evaluate to TRUE for valid records |

### CountDistinctTest

(synq.datachecks.testsuggestions.v1.CountDistinctTest)

| Field         | Type                       | Description                                    |
| ------------- | -------------------------- | ---------------------------------------------- |
| column\_names | [repeated string](#string) | List of columns to count distinct combinations |

### CountDuplicatesTest

(synq.datachecks.testsuggestions.v1.CountDuplicatesTest)

| Field         | Type                       | Description                                         |
| ------------- | -------------------------- | --------------------------------------------------- |
| column\_names | [repeated string](#string) | List of columns to check for duplicate combinations |

### EmptyTest

(synq.datachecks.testsuggestions.v1.EmptyTest)

| Field         | Type                       | Description                                    |
| ------------- | -------------------------- | ---------------------------------------------- |
| column\_names | [repeated string](#string) | List of column names to check for empty values |

### FreshnessTest

(synq.datachecks.testsuggestions.v1.FreshnessTest)

| Field                         | Type               | Description                                           |
| ----------------------------- | ------------------ | ----------------------------------------------------- |
| time\_partition\_column\_name | [ string](#string) | Name of the timestamp column used for freshness check |
| time\_window\_seconds         | [ int64](#int64)   | Time window for freshness check (in seconds)          |

### MaxValueTest

(synq.datachecks.testsuggestions.v1.MaxValueTest)

| Field        | Type               | Description                             |
| ------------ | ------------------ | --------------------------------------- |
| column\_name | [ string](#string) | Name of the numeric column to validate  |
| max\_value   | [ double](#double) | Maximum allowed value (inclusive)       |
| strictly     | [ bool](#bool)     | If true, the maximum value is exclusive |

### MinMaxTest

(synq.datachecks.testsuggestions.v1.MinMaxTest)

| Field        | Type               | Description                            |
| ------------ | ------------------ | -------------------------------------- |
| column\_name | [ string](#string) | Name of the numeric column to validate |
| min\_value   | [ double](#double) | Minimum allowed value (inclusive)      |
| max\_value   | [ double](#double) | Maximum allowed value (inclusive)      |
| strictly     | [ bool](#bool)     | If true, bounds are exclusive          |

### MinValueTest

(synq.datachecks.testsuggestions.v1.MinValueTest)

| Field        | Type               | Description                             |
| ------------ | ------------------ | --------------------------------------- |
| column\_name | [ string](#string) | Name of the numeric column to validate  |
| min\_value   | [ double](#double) | Minimum allowed value (inclusive)       |
| strictly     | [ bool](#bool)     | If true, the minimum value is exclusive |

### NotNullTest

(synq.datachecks.testsuggestions.v1.NotNullTest)

| Field         | Type                       | Description                                   |
| ------------- | -------------------------- | --------------------------------------------- |
| column\_names | [repeated string](#string) | List of column names to check for NULL values |

### RejectedValuesTest

(synq.datachecks.testsuggestions.v1.RejectedValuesTest)

| Field            | Type                       | Description                              |
| ---------------- | -------------------------- | ---------------------------------------- |
| column\_name     | [ string](#string)         | Name of the column to validate           |
| rejected\_values | [repeated string](#string) | List of disallowed values for the column |

### RelativeTimeTest

(synq.datachecks.testsuggestions.v1.RelativeTimeTest)

| Field                  | Type               | Description                                                        |
| ---------------------- | ------------------ | ------------------------------------------------------------------ |
| column\_name           | [ string](#string) | Name of the first time column to compare                           |
| relative\_column\_name | [ string](#string) | Name of the second time column that should be later than the first |

### RowCountTest

(synq.datachecks.testsuggestions.v1.RowCountTest)

### TestSuggestion

(synq.datachecks.testsuggestions.v1.TestSuggestion)

Test types that can be suggested

| Field                                                                                                                 | Type                                       | Description                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| identifier                                                                                                            | [ Identifier](#identifier)                 | none                                                                                                                                   |
| explanation                                                                                                           | [ string](#string)                         | none                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_entity\_synq\_path.entity\_synq\_path | [optional string](#string)                 | Read-only path of matched entity. This is a unique path that can be used to access the entity in the Coalesce Quality UI.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_id.id                                 | [optional string](#string)                 | Read-only Coalesce Quality ID of matched entity. This is a unique ID that can be used to access the entity in the Coalesce Quality UI. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.not\_null\_test                    | [ NotNullTest](#notnulltest)               | Checks if specified columns contain no NULL values (e.g., user\_id should never be null)                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.empty\_test                        | [ EmptyTest](#emptytest)                   | Checks if specified columns contain empty values (e.g., description field can be empty)                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.accepted\_values\_test             | [ AcceptedValuesTest](#acceptedvaluestest) | Validates that column values are within an allowed set (e.g., status in \['active', 'inactive', 'pending'])                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.rejected\_values\_test             | [ RejectedValuesTest](#rejectedvaluestest) | Validates that column values are not in a forbidden set (e.g., country not in \['UNKNOWN', 'TEST'])                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.unique\_test                       | [ UniqueTest](#uniquetest)                 | Ensures specified columns form a unique key combination (e.g., order\_id is unique)                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.freshness\_test                    | [ FreshnessTest](#freshnesstest)           | Checks if data is up-to-date based on a time column (e.g., latest event\_timestamp within 24h)                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.row\_count\_test                   | [ RowCountTest](#rowcounttest)             | Deprecated: Validates the total number of rows in a table (e.g., orders table should have records)                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_max\_test                     | [ MinMaxTest](#minmaxtest)                 | Validates numeric values are within specified range (e.g., price between 0 and 1000)                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.relative\_time\_test               | [ RelativeTimeTest](#relativetimetest)     | Compares time-based columns for logical order (e.g., start\_date before end\_date)                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.business\_rule\_test               | [ BusinessRuleTest](#businessruletest)     | Custom SQL-based business logic validation (e.g., total\_amount = subtotal + tax)                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_value\_test                   | [ MinValueTest](#minvaluetest)             | Validates numeric values are greater than or equal to a minimum value (e.g., price >= 0)                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.max\_value\_test                   | [ MaxValueTest](#maxvaluetest)             | Validates numeric values are less than or equal to a maximum value (e.g., price \<= 1000)                                              |

### UniqueTest

(synq.datachecks.testsuggestions.v1.UniqueTest)

| Field                         | Type                       | Description                                                                                                                                   |
| ----------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_names                 | [repeated string](#string) | List of columns that should form a unique combination                                                                                         |
| time\_partition\_column\_name | [ string](#string)         | If provided, the check will be applied to the time window of the time partition column If not provided, the check will be applied to all rows |
| time\_window\_seconds         | [ int64](#int64)           | Time window for uniqueness check (in seconds)                                                                                                 |

### DatacheckResult

(synq.datachecks.v1.DatacheckResult)

Result from a single datacheck execution.

| Field             | Type                                 | Description |
| ----------------- | ------------------------------------ | ----------- |
| status            | [ DatacheckStatus](#datacheckstatus) | none        |
| message           | [ string](#string)                   | none        |
| sql\_test\_result | [ SqlTestResult](#sqltestresult)     | none        |
| monitor\_result   | [ MonitorResult](#monitorresult)     | none        |

### MonitorPrediction

(synq.datachecks.v1.MonitorPrediction)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| status   | [ DatacheckStatus](#datacheckstatus) | none        |
| message  | [ string](#string)                   | none        |
| value    | [ double](#double)                   | none        |
| expected | [ double](#double)                   | none        |
| field    | [ string](#string)                   | none        |
| segment  | [ string](#string)                   | none        |

### MonitorResult

(synq.datachecks.v1.MonitorResult)

Result of a monitor execution.

| Field            | Type                                             | Description                                                           |
| ---------------- | ------------------------------------------------ | --------------------------------------------------------------------- |
| monitor\_id      | [ string](#string)                               | The monitor ID that was executed.                                     |
| monitor\_name    | [ string](#string)                               | none                                                                  |
| monitor\_path    | [ string](#string)                               | none                                                                  |
| metrics\_version | [ int32](#int32)                                 | none                                                                  |
| entity\_id       | [ Identifier](#identifier)                       | The entity that was monitored.                                        |
| execution\_id    | [ string](#string)                               | Execution ID that can be used to retrieve detailed audit information. |
| executed\_at     | [ Timestamp](#timestamp)                         | Timestamp when the monitor was executed.                              |
| predictions      | [repeated MonitorPrediction](#monitorprediction) | Individual segment predictions.                                       |

### SqlTestResult

(synq.datachecks.v1.SqlTestResult)

Result of a SQL test execution.

| Field          | Type                               | Description                                                                                                      |
| -------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| sql\_test\_id  | [ string](#string)                 | The SQL test ID that was executed.                                                                               |
| entity\_ids    | [repeated Identifier](#identifier) | The entities that the test was executed on.                                                                      |
| rows\_count    | [ int32](#int32)                   | Number of rows returned by the test query. For a passing test, this should typically be 0 (no violations found). |
| execution\_id  | [ string](#string)                 | Execution ID that can be used to retrieve detailed audit information.                                            |
| executed\_at   | [ Timestamp](#timestamp)           | Timestamp when the test was executed.                                                                            |
| error\_message | [ string](#string)                 | Optional error message if the execution failed.                                                                  |
| result\_data   | [ string](#string)                 | Optional result data or sample rows from the test execution.                                                     |

### TriggerDatachecksRequest

(synq.datachecks.v1.TriggerDatachecksRequest)

| Field       | Type                               | Description                                           |
| ----------- | ---------------------------------- | ----------------------------------------------------- |
| entity\_ids | [repeated Identifier](#identifier) | List of entity identifiers to trigger datachecks for. |

### TriggerDatachecksResponse

(synq.datachecks.v1.TriggerDatachecksResponse)

| Field   | Type                                         | Description                            |
| ------- | -------------------------------------------- | -------------------------------------- |
| results | [repeated DatacheckResult](#datacheckresult) | Results from all datacheck executions. |

### RuleTest

(synq.datachecks.sqltests.v1.RuleTest)

RuleTest is a SQL test template deployed by a SqlTestDeploymentRule onto every
table or view the rule's selection matches. It carries the same test kinds as
SqlTest.template, but — unlike Template — has no anchor entity: the anchor is
whichever table or view the rule matched, filled in separately for each
deployed test.

| Field                                                                                                     | Type                                       | Description                                                                                                                                                                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                      | [ string](#string)                         | Human friendly name for this test. Required (non-empty) for business\_rule\_test and business\_query\_test — for those two kinds, name is the test's identity key across rule redeployments, so a renamed test is treated as a different test. Optional for every other kind: leave it unset and a name is generated. |
| description                                                                                               | [ string](#string)                         | Description of purpose and motivation, copied onto every test this rule deploys.                                                                                                                                                                                                                                      |
| severity                                                                                                  | [ Severity](#severity)                     | Overrides the rule's config-level severity for this test only. Leave unset to use the config-level severity.                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.not\_null\_test        | [ NotNullTest](#notnulltest)               | Checks if specified columns contain no NULL values (e.g., user\_id should never be null)                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.empty\_test            | [ EmptyTest](#emptytest)                   | Checks if specified columns contain empty values (e.g., description field can be empty)                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.accepted\_values\_test | [ AcceptedValuesTest](#acceptedvaluestest) | Validates that column values are within an allowed set (e.g., status in \['active', 'inactive', 'pending'])                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.rejected\_values\_test | [ RejectedValuesTest](#rejectedvaluestest) | Validates that column values are not in a forbidden set (e.g., country not in \['UNKNOWN', 'TEST'])                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.unique\_test           | [ UniqueTest](#uniquetest)                 | Ensures specified columns form a unique key combination (e.g., order\_id is unique)                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.freshness\_test        | [ FreshnessTest](#freshnesstest)           | Checks if data is up-to-date based on a time column (e.g., latest event\_timestamp within 24h)                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_max\_test         | [ MinMaxTest](#minmaxtest)                 | Validates numeric values are within specified range (e.g., price between 0 and 1000)                                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.relative\_time\_test   | [ RelativeTimeTest](#relativetimetest)     | Compares time-based columns for logical order (e.g., start\_date before end\_date)                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.business\_rule\_test   | [ BusinessRuleTest](#businessruletest)     | Per-row boolean predicate; rows matching are reported as failures (e.g., total\_amount != subtotal + tax)                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_value\_test       | [ MinValueTest](#minvaluetest)             | Validates numeric values are greater than or equal to a minimum value (e.g., price ≥ 0)                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.max\_value\_test       | [ MaxValueTest](#maxvaluetest)             | Validates numeric values are less than or equal to a maximum value (e.g., price ≤ 1000)                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.relationships\_test    | [ RelationshipsTest](#relationshipstest)   | Validates referential integrity between source and reference tables                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.business\_query\_test  | [ BusinessQueryTest](#businessquerytest)   | Full SELECT whose result rows are reported as failures; supports GROUP BY, JOINs, etc.                                                                                                                                                                                                                                |

### SqlTestDeploymentChange

(synq.datachecks.sqltests.v1.SqlTestDeploymentChange)

SqlTestDeploymentChange describes one test's planned or applied change for a
single table or view within a SqlTestsDeploymentOverview.

| Field           | Type               | Description                                                                                                                      |
| --------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| table\_path     | [ string](#string) | Synq path of the table or view the test targets or would target.                                                                 |
| sql\_test\_path | [ string](#string) | Synq path of the SqlTest, when it already exists (create-side changes may leave this empty until the test is actually deployed). |
| test\_name      | [ string](#string) | Name of the test, resolved from its RuleTest.name (or the generated name for non-business test kinds).                           |

### SqlTestDeploymentRule

(synq.datachecks.sqltests.v1.SqlTestDeploymentRule)

SqlTestDeploymentRule dynamically deploys SQL test templates onto every table
or view its selection matches, keeping them in sync as tables and columns
change. Use it instead of authoring one SqlTest per table when the same set
of checks should apply to many tables (e.g. "not\_null(email) on every table
that has an email column").

| Field                                                                                                          | Type                                                             | Description                                                                                                                         |
| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                             | [ string](#string)                                               | Unique identifier for this rule.                                                                                                    |
| title                                                                                                          | [ string](#string)                                               | Human friendly name for this rule.                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.query\_config             | [ SqlTestsQueryConfig](#sqltestsqueryconfig)                     | Deploys tests onto every match of a query; the match set is resynced over time.                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_query\_config  | [ SqlTestsExclusiveQueryConfig](#sqltestsexclusivequeryconfig)   | Deploys tests onto every match of a query; this rule exclusively owns the match set.                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.static\_config            | [ SqlTestsStaticConfig](#sqltestsstaticconfig)                   | Deploys tests onto a single fixed table or view.                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_static\_config | [ SqlTestsExclusiveStaticConfig](#sqltestsexclusivestaticconfig) | Exclusively owns a single fixed table or view.                                                                                      |
| source                                                                                                         | [ Source](#source)                                               | none                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id          | [optional string](#string)                                       | Config ID this rule was authored from, when deployed via configuration as code. Unset for rules authored directly through this API. |

### SqlTestDeploymentRuleView

(synq.datachecks.sqltests.v1.SqlTestDeploymentRuleView)

SqlTestDeploymentRuleView is a SqlTestDeploymentRule together with a summary
of how many tests it currently has deployed.

| Field                                                                                                          | Type                                                             | Description                                                                          |
| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| id                                                                                                             | [ string](#string)                                               | none                                                                                 |
| title                                                                                                          | [ string](#string)                                               | none                                                                                 |
| test\_count                                                                                                    | [ int32](#int32)                                                 | Number of tests currently deployed by this rule, across every matched table or view. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.query\_config             | [ SqlTestsQueryConfig](#sqltestsqueryconfig)                     | none                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_query\_config  | [ SqlTestsExclusiveQueryConfig](#sqltestsexclusivequeryconfig)   | none                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.static\_config            | [ SqlTestsStaticConfig](#sqltestsstaticconfig)                   | none                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.exclusive\_static\_config | [ SqlTestsExclusiveStaticConfig](#sqltestsexclusivestaticconfig) | none                                                                                 |
| source                                                                                                         | [ Source](#source)                                               | none                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id          | [optional string](#string)                                       | none                                                                                 |

### SqlTestsDeploymentOverview

(synq.datachecks.sqltests.v1.SqlTestsDeploymentOverview)

SqlTestsDeploymentOverview previews or reports the effect of deploying a
SqlTestDeploymentRule, per test rather than per table — a table with three
tests deployed appears as three entries, one for each test.

| Field             | Type                                                         | Description                                                                                                     |
| ----------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| tests\_to\_create | [repeated SqlTestDeploymentChange](#sqltestdeploymentchange) | Tests that would be newly created by this deploy.                                                               |
| tests\_to\_update | [repeated SqlTestDeploymentChange](#sqltestdeploymentchange) | Tests that already exist and would be updated (e.g. a changed severity or template) by this deploy.             |
| tests\_to\_delete | [repeated SqlTestDeploymentChange](#sqltestdeploymentchange) | Tests that would be deleted by this deploy, because their table or view no longer matches the rule's selection. |
| tests\_to\_keep   | [repeated SqlTestDeploymentChange](#sqltestdeploymentchange) | Tests that already exist, still match, and would be left unchanged.                                             |
| skipped\_tables   | [repeated SkippedTable](#skippedtable)                       | Tables or views this rule matched but could not deploy tests onto.                                              |

### SqlTestsDeploymentOverview\.SkippedTable

(synq.datachecks.sqltests.v1.SqlTestsDeploymentOverview\.SkippedTable)

SkippedTable names a table or view the rule's selection matched, but that
this deploy could not deploy tests onto.

| Field       | Type               | Description                                          |
| ----------- | ------------------ | ---------------------------------------------------- |
| table\_path | [ string](#string) | Synq path of the skipped table or view.              |
| reason      | [ string](#string) | Human-readable reason the table or view was skipped. |

### SqlTestsExclusiveQueryConfig

(synq.datachecks.sqltests.v1.SqlTestsExclusiveQueryConfig)

SqlTestsExclusiveQueryConfig selects tables and views by query and takes
exclusive ownership of the match set: any table or view previously managed by
this rule that no longer matches has its deployed tests removed on the next
sync, with no `keep_removed_tests` opt-out (a rule managing an exclusive set
never "keeps" a table that stopped matching).

| Field                  | Type                                           | Description                                                                                                                                                                                                                                                                                                                                              |
| ---------------------- | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query                  | [ EntitySelectionQuery](#entityselectionquery) | Structured selection of tables and views this rule exclusively owns.                                                                                                                                                                                                                                                                                     |
| resolver\_ql           | [ string](#string)                             | ResolverQL selection string for the exclusion set. Same semantics as SqlTestsQueryConfig.resolver\_ql: when set on write it takes precedence over `query`; on read it is echoed back VERBATIM for ResolverQL-authored rules and is empty for structured-`query` rules (whose ResolverQL form is in `rendered_resolver_ql`). `query` is always populated. |
| rendered\_resolver\_ql | [ string](#string)                             | Canonical ResolverQL rendering of the exclusion selection. OUTPUT ONLY, populated for every rule, ignored on write.                                                                                                                                                                                                                                      |

### SqlTestsExclusiveStaticConfig

(synq.datachecks.sqltests.v1.SqlTestsExclusiveStaticConfig)

SqlTestsExclusiveStaticConfig marks a single fixed path as exclusively owned by
this rule — used to carve out a per-table override from a broader query rule
(see SqlTestDeploymentRule precedence).

| Field | Type               | Description                                                |
| ----- | ------------------ | ---------------------------------------------------------- |
| path  | [ string](#string) | Synq path of the table or view this rule exclusively owns. |

### SqlTestsQueryConfig

(synq.datachecks.sqltests.v1.SqlTestsQueryConfig)

SqlTestsQueryConfig selects tables and views by query, deploying every test in
`tests` onto each match. As the matched set changes over time (new tables,
dropped columns, …), a periodic sync keeps deployed tests in step.

| Field                  | Type                                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query                  | [ EntitySelectionQuery](#entityselectionquery) | Structured selection of tables and views to deploy tests onto.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| resolver\_ql           | [ string](#string)                             | ResolverQL selection string — an advanced, more expressive alternative to `query`. ResolverQL is a superset of the structured `query`: use it for selections `query` cannot express (e.g. lineage walks, column predicates). When set (non-empty) on write, `resolver_ql` is the source of truth and the structured `query` is ignored. On read it is echoed back VERBATIM (exactly as written, not normalized) for rules authored via ResolverQL, and is empty for rules authored via the structured `query` — so writing a read response back unchanged preserves the rule's authored form. To read the ResolverQL form of a structured rule, use `rendered_resolver_ql`. `query` is always populated regardless. |
| rendered\_resolver\_ql | [ string](#string)                             | Canonical ResolverQL rendering of this rule's selection, populated for every rule regardless of how it was authored. OUTPUT ONLY — it is ignored on write; set `resolver_ql` to author a selection in ResolverQL.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| tests                  | [repeated RuleTest](#ruletest)                 | Tests deployed onto every table or view this rule's selection matches.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| recurrence\_rule       | [ string](#string)                             | [Recurrence rule](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) for the execution schedule applied to every test this rule deploys. Empty means on-demand — deployed tests are never scheduled to run automatically. When set, it must carry an inline `DTSTART:` naming the first occurrence, e.g. "DTSTART:20260101T000000Z\nRRULE:FREQ=DAILY".                                                                                                                                                                                                                                                                                                                                          |
| timezone               | [ string](#string)                             | IANA timezone name (e.g., "Europe/Prague", "America/New\_York") used to interpret recurrence\_rule. Empty defaults to UTC.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| severity               | [ Severity](#severity)                         | Severity applied to every test this rule deploys, unless a RuleTest overrides it. Required — must be set to a value other than unspecified.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| save\_failures         | [ bool](#bool)                                 | Applied to every test this rule deploys. Toggles saving of failure runs.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| keep\_removed\_tests   | [ bool](#bool)                                 | When a previously matched table or view stops matching this rule's selection, its deployed tests are deleted by default. Set true to keep them as-is instead — they remain rule-managed but are no longer resynced.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

### SqlTestsStaticConfig

(synq.datachecks.sqltests.v1.SqlTestsStaticConfig)

SqlTestsStaticConfig deploys tests onto a single, fixed table or view. Unlike
the query-based configs, a static rule never resyncs against a changing
match set — it pins one path.

| Field            | Type                           | Description                                                                                                                                                                                                                                                                                                      |
| ---------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| path             | [ string](#string)             | Synq path of the table or view this rule deploys tests onto.                                                                                                                                                                                                                                                     |
| tests            | [repeated RuleTest](#ruletest) | Tests deployed onto the table or view at `path`.                                                                                                                                                                                                                                                                 |
| recurrence\_rule | [ string](#string)             | [Recurrence rule](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) for the execution schedule applied to every test this rule deploys. Empty means on-demand. When set, it must carry an inline `DTSTART:` naming the first occurrence, e.g. "DTSTART:20260101T000000Z\nRRULE:FREQ=DAILY". |
| timezone         | [ string](#string)             | IANA timezone name used to interpret recurrence\_rule. Empty defaults to UTC.                                                                                                                                                                                                                                    |
| severity         | [ Severity](#severity)         | Severity applied to every test this rule deploys, unless a RuleTest overrides it. Required — must be set to a value other than unspecified.                                                                                                                                                                      |
| save\_failures   | [ bool](#bool)                 | Applied to every test this rule deploys. Toggles saving of failure runs.                                                                                                                                                                                                                                         |

### BatchDeleteSqlTestsRequest

(synq.datachecks.sqltests.v1.BatchDeleteSqlTestsRequest)

| Field | Type                       | Description                    |
| ----- | -------------------------- | ------------------------------ |
| ids   | [repeated string](#string) | IDs of the SqlTests to delete. |

### BatchDeleteSqlTestsResponse

(synq.datachecks.sqltests.v1.BatchDeleteSqlTestsResponse)

| Field  | Type                                 | Description                                                                                                                                                                                                                                     |
| ------ | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| errors | [repeated DeleteError](#deleteerror) | IDs that were not deleted, with the reason for each. Empty when everything in the request was deleted. Every other ID in the request is deleted regardless, so a caller reconciling a set can act on what failed without retrying what did not. |

### BatchDeleteSqlTestsResponse.DeleteError

(synq.datachecks.sqltests.v1.BatchDeleteSqlTestsResponse.DeleteError)

Details of a single ID that could not be deleted.

| Field  | Type               | Description                                                                                                                                                                         |
| ------ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id     | [ string](#string) | The ID from the request that was not deleted, echoed back as it was sent.                                                                                                           |
| reason | [ string](#string) | Why it was not deleted. A test deployed by a SqlTestDeploymentRule cannot be deleted directly — delete or narrow the rule instead, or the rule's next sync would recreate the test. |

### BatchGetSqlTestsRequest

(synq.datachecks.sqltests.v1.BatchGetSqlTestsRequest)

| Field | Type                       | Description                   |
| ----- | -------------------------- | ----------------------------- |
| ids   | [repeated string](#string) | IDs of the SqlTests to fetch. |

### BatchGetSqlTestsResponse

(synq.datachecks.sqltests.v1.BatchGetSqlTestsResponse)

| Field      | Type                                | Description |
| ---------- | ----------------------------------- | ----------- |
| sql\_tests | [map SqlTestsEntry](#sqltestsentry) | none        |

### BatchGetSqlTestsResponse.SqlTestsEntry

(synq.datachecks.sqltests.v1.BatchGetSqlTestsResponse.SqlTestsEntry)

| Field | Type                 | Description |
| ----- | -------------------- | ----------- |
| key   | [ string](#string)   | none        |
| value | [ SqlTest](#sqltest) | none        |

### BatchUpsertSqlTestsRequest

(synq.datachecks.sqltests.v1.BatchUpsertSqlTestsRequest)

| Field                     | Type                         | Description                                                                                             |
| ------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------- |
| sql\_tests                | [repeated SqlTest](#sqltest) | List of SqlTests to upsert. The upsert is performed based on the unique path provided for each SqlTest. |
| sql\_test\_ids\_to\_reset | [repeated string](#string)   | List of SqlTest IDs to reset. Some updates might require resetting the SqlTest to a fresh state.        |

### BatchUpsertSqlTestsResponse

(synq.datachecks.sqltests.v1.BatchUpsertSqlTestsResponse)

| Field        | Type                                 | Description                                                                  |
| ------------ | ------------------------------------ | ---------------------------------------------------------------------------- |
| created\_ids | [repeated string](#string)           | IDs for which SqlTests were created without error.                           |
| updated\_ids | [repeated string](#string)           | IDs for which SqlTests were updated without error.                           |
| errors       | [repeated UpsertError](#upserterror) | Errors raised while upsert. This list will be empty if there were no errors. |

### BatchUpsertSqlTestsResponse.UpsertError

(synq.datachecks.sqltests.v1.BatchUpsertSqlTestsResponse.UpsertError)

Details of errors encountered during the upsert operation.

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| id     | [ string](#string) | none        |
| reason | [ string](#string) | none        |

### ConfigsFilter

(synq.datachecks.sqltests.v1.ConfigsFilter)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### GetSqlTestAuditRequest

(synq.datachecks.sqltests.v1.GetSqlTestAuditRequest)

### GetSqlTestAuditResponse

(synq.datachecks.sqltests.v1.GetSqlTestAuditResponse)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| audit | [ SqlTestAudit](#sqltestaudit) | none        |

### ListSqlTestsRequest

(synq.datachecks.sqltests.v1.ListSqlTestsRequest)

| Field                                                                                                 | Type                               | Description                                                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| annotations                                                                                           | [repeated Annotation](#annotation) | Optional annotations to fetch SqlTests for.                                                                                                                                                                          |
| integration\_ids                                                                                      | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| ids                                                                                                   | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| config\_ids                                                                                           | [repeated string](#string)         | none                                                                                                                                                                                                                 |
| configs\_filter                                                                                       | [ ConfigsFilter](#configsfilter)   | Filter SqlTests by config IDs. Pass `ConfigsFilter{ids: ["config1", "config2"]}` to filter by specific configs. If nil, no config\_id filtering is applied. If empty, the one with NULL config\_id will be excluded. |
| sources                                                                                               | [repeated Source](#source)         | none                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | none                                                                                                                                                                                                                 |

### ListSqlTestsResponse

(synq.datachecks.sqltests.v1.ListSqlTestsResponse)

| Field      | Type                         | Description        |
| ---------- | ---------------------------- | ------------------ |
| sql\_tests | [repeated SqlTest](#sqltest) | none               |
| page\_info | [ PageInfo](#pageinfo)       | Paging information |

### BatchDeleteSqlTestDeploymentRulesRequest

(synq.datachecks.sqltests.v1.BatchDeleteSqlTestDeploymentRulesRequest)

| Field | Type                       | Description                                  |
| ----- | -------------------------- | -------------------------------------------- |
| ids   | [repeated string](#string) | IDs of the SqlTestDeploymentRules to delete. |

### BatchDeleteSqlTestDeploymentRulesResponse

(synq.datachecks.sqltests.v1.BatchDeleteSqlTestDeploymentRulesResponse)

### BatchDeploySqlTestDeploymentRulesRequest

(synq.datachecks.sqltests.v1.BatchDeploySqlTestDeploymentRulesRequest)

| Field             | Type                                                     | Description                               |
| ----------------- | -------------------------------------------------------- | ----------------------------------------- |
| deployment\_rules | [repeated SqlTestDeploymentRule](#sqltestdeploymentrule) | List of SqlTestDeploymentRules to deploy. |

### BatchDeploySqlTestDeploymentRulesResponse

(synq.datachecks.sqltests.v1.BatchDeploySqlTestDeploymentRulesResponse)

| Field         | Type                                 | Description                                                       |
| ------------- | ------------------------------------ | ----------------------------------------------------------------- |
| deployed\_ids | [repeated string](#string)           | IDs for which SqlTestDeploymentRules were deployed without error. |
| errors        | [repeated DeployError](#deployerror) | Errors raised while deploying. Empty if there were no errors.     |

### BatchDeploySqlTestDeploymentRulesResponse.DeployError

(synq.datachecks.sqltests.v1.BatchDeploySqlTestDeploymentRulesResponse.DeployError)

| Field  | Type               | Description |
| ------ | ------------------ | ----------- |
| id     | [ string](#string) | none        |
| reason | [ string](#string) | none        |

### BatchGetSqlTestDeploymentRulesRequest

(synq.datachecks.sqltests.v1.BatchGetSqlTestDeploymentRulesRequest)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| ids   | [repeated string](#string) | none        |

### BatchGetSqlTestDeploymentRulesResponse

(synq.datachecks.sqltests.v1.BatchGetSqlTestDeploymentRulesResponse)

| Field             | Type                                              | Description |
| ----------------- | ------------------------------------------------- | ----------- |
| deployment\_rules | [map DeploymentRulesEntry](#deploymentrulesentry) | none        |

### BatchGetSqlTestDeploymentRulesResponse.DeploymentRulesEntry

(synq.datachecks.sqltests.v1.BatchGetSqlTestDeploymentRulesResponse.DeploymentRulesEntry)

| Field | Type                                                     | Description |
| ----- | -------------------------------------------------------- | ----------- |
| key   | [ string](#string)                                       | none        |
| value | [ SqlTestDeploymentRuleView](#sqltestdeploymentruleview) | none        |

### DeleteSqlTestDeploymentRuleRequest

(synq.datachecks.sqltests.v1.DeleteSqlTestDeploymentRuleRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| id    | [ string](#string) | none        |

### DeleteSqlTestDeploymentRuleResponse

(synq.datachecks.sqltests.v1.DeleteSqlTestDeploymentRuleResponse)

### DeploySqlTestDeploymentRuleRequest

(synq.datachecks.sqltests.v1.DeploySqlTestDeploymentRuleRequest)

| Field            | Type                                             | Description |
| ---------------- | ------------------------------------------------ | ----------- |
| deployment\_rule | [ SqlTestDeploymentRule](#sqltestdeploymentrule) | none        |

### DeploySqlTestDeploymentRuleResponse

(synq.datachecks.sqltests.v1.DeploySqlTestDeploymentRuleResponse)

### GetSqlTestDeployDeleteOverviewRequest

(synq.datachecks.sqltests.v1.GetSqlTestDeployDeleteOverviewRequest)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| id    | [ string](#string) | none        |

### GetSqlTestDeployDeleteOverviewResponse

(synq.datachecks.sqltests.v1.GetSqlTestDeployDeleteOverviewResponse)

| Field    | Type                                                       | Description |
| -------- | ---------------------------------------------------------- | ----------- |
| overview | [ SqlTestsDeploymentOverview](#sqltestsdeploymentoverview) | none        |

### GetSqlTestDeployOverviewRequest

(synq.datachecks.sqltests.v1.GetSqlTestDeployOverviewRequest)

| Field            | Type                                             | Description |
| ---------------- | ------------------------------------------------ | ----------- |
| deployment\_rule | [ SqlTestDeploymentRule](#sqltestdeploymentrule) | none        |

### GetSqlTestDeployOverviewResponse

(synq.datachecks.sqltests.v1.GetSqlTestDeployOverviewResponse)

| Field    | Type                                                       | Description |
| -------- | ---------------------------------------------------------- | ----------- |
| overview | [ SqlTestsDeploymentOverview](#sqltestsdeploymentoverview) | none        |

### ListSqlTestDeploymentRulesRequest

(synq.datachecks.sqltests.v1.ListSqlTestDeploymentRulesRequest)

| Field                                                                                                 | Type                                                             | Description                                                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sources                                                                                               | [repeated Source](#source)                                       | none                                                                                                                                                                                                                                                                              |
| configs\_filter                                                                                       | [ ConfigsFilter](#configsfilter)                                 | Filter SqlTestDeploymentRules by config IDs. Pass `ConfigsFilter{ids: ["config1", "config2"]}` to filter by specific configs. If nil, no config\_id filtering is applied. If empty, the one with NULL config\_id will be excluded.                                                |
| rule\_ids                                                                                             | [repeated string](#string)                                       | none                                                                                                                                                                                                                                                                              |
| rule\_types                                                                                           | [repeated SqlTestDeploymentRuleType](#sqltestdeploymentruletype) | Filter by rule type. When empty, rules of every type are returned. When set, only rules whose type is listed are returned. The filter is applied server-side before paging, so every page reflects only the selected types.                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination)                               | Pagination. Omitting this, or sending a zero page\_size, returns every matching rule in one response — there is no server-side default page size. Set page\_size to bound the response; pass page\_info.last\_id from the previous response as the cursor to fetch the next page. |

### ListSqlTestDeploymentRulesResponse

(synq.datachecks.sqltests.v1.ListSqlTestDeploymentRulesResponse)

| Field             | Type                                                             | Description                                                                                                                                                                                                                                                                                          |
| ----------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| deployment\_rules | [repeated SqlTestDeploymentRuleView](#sqltestdeploymentruleview) | none                                                                                                                                                                                                                                                                                                 |
| page\_info        | [ PageInfo](#pageinfo)                                           | Paging information for this response. Always populated. This response carries at most one bounded page of rules, never the full set. The cursor is the paging contract: to retrieve every rule, repeat the request passing page\_info.last\_id as pagination.cursor until last\_id comes back empty. |

### AcceptedValuesTest

(synq.datachecks.sqltests.v1.AcceptedValuesTest)

| Field            | Type                           | Description                                                                                                                                        |
| ---------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name     | [ string](#string)             | Name of the column to validate                                                                                                                     |
| accepted\_values | [repeated SqlValue](#sqlvalue) | List of allowed values for the column                                                                                                              |
| select\_columns  | [repeated string](#string)     | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### BusinessQueryTest

(synq.datachecks.sqltests.v1.BusinessQueryTest)

| Field      | Type               | Description                                                  |
| ---------- | ------------------ | ------------------------------------------------------------ |
| sql\_query | [ string](#string) | Full SELECT statement. Result rows are reported as failures. |

Format: a single SELECT (CTEs allowed); no semicolon. May read any tables the integration has access to. The engine wraps it as `WITH raw_query AS (<sql_query>) SELECT * FROM raw_query`.

Use this when the failure set requires GROUP BY, JOINs, window functions, or other shape that a per-row predicate (BusinessRuleTest) cannot express.

Example: SELECT customer\_id, SUM(amount) AS total FROM orders WHERE status = 'paid' GROUP BY customer\_id HAVING SUM(amount) \< 0

Template.identifier still anchors the test to a primary table for ownership, alerts, and UI grouping.

Note: this test does not expose a `select_columns` option. The author controls the SELECT shape directly in `sql_query`. |

### BusinessRuleTest

(synq.datachecks.sqltests.v1.BusinessRuleTest)

| Field           | Type               | Description                                                                                                                                   |
| --------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| sql\_expression | [ string](#string) | Boolean SQL predicate evaluated per row of the anchor table (Template.identifier); rows where the predicate is TRUE are reported as failures. |

Format: a single boolean expression — no SELECT, WITH, or semicolons. References columns on the anchor table. The engine executes it as `SELECT * FROM <anchor_table> WHERE <sql_expression>`.

Example: "total\_amount != subtotal + tax" reports rows where totals disagree. Use BusinessQueryTest for SELECT / GROUP BY / multi-table logic. |
\| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### CountDistinctTest

(synq.datachecks.sqltests.v1.CountDistinctTest)

Note: this test does not expose a `select_columns` option. The result is
an aggregate count, not a set of failure rows.

| Field         | Type                       | Description                                    |
| ------------- | -------------------------- | ---------------------------------------------- |
| column\_names | [repeated string](#string) | List of columns to count distinct combinations |

### CountDuplicatesTest

(synq.datachecks.sqltests.v1.CountDuplicatesTest)

Note: this test does not expose a `select_columns` option. The result is
an aggregate count, not a set of failure rows.

| Field         | Type                       | Description                                         |
| ------------- | -------------------------- | --------------------------------------------------- |
| column\_names | [repeated string](#string) | List of columns to check for duplicate combinations |

### EmptyTest

(synq.datachecks.sqltests.v1.EmptyTest)

| Field           | Type                       | Description                                                                                                                                        |
| --------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_names   | [repeated string](#string) | List of column names to check for empty values                                                                                                     |
| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### Evaluator

(synq.datachecks.sqltests.v1.Evaluator)

Evaluator is a named condition attached to a SqlTest that produces
an independent pass/fail signal. A single SqlTest may carry multiple
evaluators, each targeting a different concern (nullability, value
ranges, row counts, etc.).

| Field           | Type                   | Description                                                                                                                                                                               |
| --------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id              | [ string](#string)     | Stable identifier for the evaluator, unique within the parent SqlTest. Must contain only ASCII letters, digits, hyphens, or underscores.                                                  |
| name            | [ string](#string)     | Human friendly name.                                                                                                                                                                      |
| sql\_expression | [ string](#string)     | SQL expression evaluated against the test rows. The expression is a FAIL condition: a row is flagged when the expression evaluates to TRUE. NULL evaluates as pass (equivalent to FALSE). |
| severity        | [ Severity](#severity) | Severity routed to alerting when this evaluator fails. Defaults to the parent SqlTest severity when left unspecified.                                                                     |

### EvaluatorResult

(synq.datachecks.sqltests.v1.EvaluatorResult)

EvaluatorResult is the execution outcome of a single Evaluator within a SqlTest run.
Fields id/name/sql\_expression/severity are a snapshot of the evaluator definition
at execution time so historical results survive later edits to the test.

| Field           | Type                                 | Description                                                      |
| --------------- | ------------------------------------ | ---------------------------------------------------------------- |
| id              | [ string](#string)                   | Evaluator id, matching Evaluator.id on the parent SqlTest.       |
| name            | [ string](#string)                   | Human-friendly evaluator name at time of execution.              |
| sql\_expression | [ string](#string)                   | SQL expression that was evaluated.                               |
| severity        | [ Severity](#severity)               | Severity of this evaluator as configured at execution time.      |
| fail\_count     | [ int64](#int64)                     | Number of rows that failed this evaluator's condition.           |
| status          | [ ExecutionStatus](#executionstatus) | Execution outcome for this evaluator.                            |
| message         | [ string](#string)                   | Human-readable result message (e.g. "OK" or "Got 3 failure(s)"). |

### FreshnessTest

(synq.datachecks.sqltests.v1.FreshnessTest)

| Field                         | Type                       | Description                                                                                                                                        |
| ----------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| time\_partition\_column\_name | [ string](#string)         | Name of the timestamp column used for freshness check                                                                                              |
| time\_window\_seconds         | [ int64](#int64)           | Time window for freshness check (in seconds)                                                                                                       |
| select\_columns               | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### InputTable

(synq.datachecks.sqltests.v1.InputTable)

InputTable is a table reference resolved from the SQL expression of a SqlTest.

| Field       | Type               | Description                                                                       |
| ----------- | ------------------ | --------------------------------------------------------------------------------- |
| fqn         | [ Fqn](#fqn)       | Fully-qualified name of the referenced table.                                     |
| table\_path | [ string](#string) | Synq-internal path for the table asset (e.g. "bq-prod::project::dataset::table"). |

### MaxValueTest

(synq.datachecks.sqltests.v1.MaxValueTest)

| Field           | Type                       | Description                                                                                                                                        |
| --------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name    | [ string](#string)         | Name of the numeric column to validate                                                                                                             |
| max\_value      | [ SqlValue](#sqlvalue)     | Maximum allowed value (inclusive)                                                                                                                  |
| strictly        | [ bool](#bool)             | If true, the maximum value is exclusive                                                                                                            |
| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### MinMaxTest

(synq.datachecks.sqltests.v1.MinMaxTest)

| Field           | Type                       | Description                                                                                                                                        |
| --------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name    | [ string](#string)         | Name of the numeric column to validate                                                                                                             |
| min\_value      | [ SqlValue](#sqlvalue)     | Minimum allowed value (inclusive)                                                                                                                  |
| max\_value      | [ SqlValue](#sqlvalue)     | Maximum allowed value (inclusive)                                                                                                                  |
| strictly        | [ bool](#bool)             | If true, bounds are exclusive                                                                                                                      |
| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### MinValueTest

(synq.datachecks.sqltests.v1.MinValueTest)

| Field           | Type                       | Description                                                                                                                                        |
| --------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name    | [ string](#string)         | Name of the numeric column to validate                                                                                                             |
| min\_value      | [ SqlValue](#sqlvalue)     | Minimum allowed value (inclusive)                                                                                                                  |
| strictly        | [ bool](#bool)             | If true, the minimum value is exclusive                                                                                                            |
| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### NotNullTest

(synq.datachecks.sqltests.v1.NotNullTest)

| Field           | Type                       | Description                                                                                                                                        |
| --------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_names   | [repeated string](#string) | List of column names to check for NULL values                                                                                                      |
| select\_columns | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### RejectedValuesTest

(synq.datachecks.sqltests.v1.RejectedValuesTest)

| Field            | Type                           | Description                                                                                                                                        |
| ---------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name     | [ string](#string)             | Name of the column to validate                                                                                                                     |
| rejected\_values | [repeated SqlValue](#sqlvalue) | List of disallowed values for the column                                                                                                           |
| select\_columns  | [repeated string](#string)     | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### RelationshipColumn

(synq.datachecks.sqltests.v1.RelationshipColumn)

| Field     | Type               | Description                        |
| --------- | ------------------ | ---------------------------------- |
| source    | [ string](#string) | Column name in the source table    |
| reference | [ string](#string) | Column name in the reference table |

### RelationshipReference

(synq.datachecks.sqltests.v1.RelationshipReference)

| Field   | Type                                               | Description                                                |
| ------- | -------------------------------------------------- | ---------------------------------------------------------- |
| entity  | [ Identifier](#identifier)                         | The reference entity (table to check foreign keys against) |
| columns | [repeated RelationshipColumn](#relationshipcolumn) | Column mappings between source and reference tables        |

### RelationshipsTest

(synq.datachecks.sqltests.v1.RelationshipsTest)

| Field                   | Type                                                     | Description                                                                                                                                        |
| ----------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| references              | [repeated RelationshipReference](#relationshipreference) | List of reference table relationships to check                                                                                                     |
| ignore\_nulls           | [ bool](#bool)                                           | If true, source rows where all join columns are NULL are excluded from results                                                                     |
| time\_partition\_column | [ string](#string)                                       | Column name used to filter source rows by time (e.g., "created\_at")                                                                               |
| time\_window\_seconds   | [ int64](#int64)                                         | Time window in seconds - only check source rows within this window                                                                                 |
| select\_columns         | [repeated string](#string)                               | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### RelativeTimeTest

(synq.datachecks.sqltests.v1.RelativeTimeTest)

| Field                  | Type                       | Description                                                                                                                                        |
| ---------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_name           | [ string](#string)         | Name of the first time column to compare                                                                                                           |
| relative\_column\_name | [ string](#string)         | Name of the second time column that should be later than the first                                                                                 |
| select\_columns        | [repeated string](#string) | Optional list of columns to include in the SELECT clause of the generated SQL. When empty (default), SELECT \* is used — all columns are returned. |

### SqlTest

(synq.datachecks.sqltests.v1.SqlTest)

The SqlTest is a SQL test that is executed on a Coalesce Quality entity.

| Field                                                                                                 | Type                                               | Description                                                                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| platform                                                                                              | [ DataPlatformIdentifier](#dataplatformidentifier) | Identifier for the data platform which the SqlTest would be executed on.                                                                                                                                                                                                                                                                                    |
| id                                                                                                    | [ string](#string)                                 | Unique resource identifier for the SqlTest. This is externally maintained and can be used to fetch/update/delete this test.                                                                                                                                                                                                                                 |
| name                                                                                                  | [ string](#string)                                 | Human friendly name.                                                                                                                                                                                                                                                                                                                                        |
| description                                                                                           | [ string](#string)                                 | Description of purpose and motivation.                                                                                                                                                                                                                                                                                                                      |
| severity                                                                                              | [ Severity](#severity)                             | none                                                                                                                                                                                                                                                                                                                                                        |
| sql\_expression                                                                                       | [ string](#string)                                 | A valid SQL expression which is the test.                                                                                                                                                                                                                                                                                                                   |
| recurrence\_rule                                                                                      | [ string](#string)                                 | [Recurrence rule](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) for the execution schedule of the SqlTest.                                                                                                                                                                                                                         |
| annotations                                                                                           | [repeated Annotation](#annotation)                 | Annotations for the given SqlTest.These help filter the SqlTests for later operations like listing by API, selection in UI, analytics, etc.                                                                                                                                                                                                                 |
| save\_failures                                                                                        | [ bool](#bool)                                     | Boolean flag to to toggle saving of failure runs.                                                                                                                                                                                                                                                                                                           |
| template                                                                                              | [ Template](#template)                             | Template for the SqlTest. required when sql\_expression is not provided                                                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_config\_id.config\_id | [optional string](#string)                         | Config ID for the SqlTest.                                                                                                                                                                                                                                                                                                                                  |
| source                                                                                                | [ Source](#source)                                 | none                                                                                                                                                                                                                                                                                                                                                        |
| timezone                                                                                              | [ string](#string)                                 | IANA timezone name (e.g., "Europe/Prague", "America/New\_York"). Used to interpret the recurrence\_rule in the given timezone. If empty, defaults to UTC.                                                                                                                                                                                                   |
| evaluators                                                                                            | [repeated Evaluator](#evaluator)                   | Named evaluators attached to this test. Each evaluator has its own SQL boolean expression and severity. When present, the test outcome is determined by the worst severity among failing evaluators; tests with no evaluators fall back to the single-expression pass/fail rule.                                                                            |
| input\_tables                                                                                         | [repeated InputTable](#inputtable)                 | Tables referenced by the SQL expression, resolved at upsert time.                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category     | [optional string](#string)                         | Technical category this test declares for itself — what kind of check it is mechanically (e.g. "nullness", "uniqueness"). It is the test's own declaration, not an administrative override: it is authoritative over any categorisation rule the workspace would otherwise apply, and is itself overridden by an explicit per-check category an admin sets. |

The value is free-form and workspace-defined — whatever vocabulary your categorisation rules already use. It is displayed with underscores turned into spaces, so `snake_case` reads well.

Send the whole test on every upsert: leaving this out is the same as sending it empty, and both mean the test declares no technical category. A test then falls back to its `quality.check_category` annotation, which remains accepted and keeps working — this field simply outranks it. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | Governance category this test declares for itself — what the check is for, the data quality dimension governance reports on (e.g. "completeness"). Resolves independently of `category` — setting one never suppresses the other — and follows the same precedence, the same free-form vocabulary and the same full-state upsert rule described above. Its annotation fallback is `quality.governance_category`. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deployment\_rule\_id.deployment\_rule\_id | [optional string](#string) | ID of the SqlTestDeploymentRule that deployed this test, when it was created by a deployment rule rather than authored directly. OUTPUT ONLY. A test with this set is rule-managed: direct edits through this API are rejected. |

### SqlTestAudit

(synq.datachecks.sqltests.v1.SqlTestAudit)

| Field           | Type                                         | Description                                                                                                                                                                                                           |
| --------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| execution\_id   | [ string](#string)                           | none                                                                                                                                                                                                                  |
| rows\_count     | [ int32](#int32)                             | none                                                                                                                                                                                                                  |
| result          | [ string](#string)                           | JSON array of failing-row objects. Each object contains the original SELECT-list columns plus an `_failed_evaluators` array of evaluator IDs that flagged that row (only present when the SqlTest has evaluators).    |
| created\_at     | [ Timestamp](#timestamp)                     | none                                                                                                                                                                                                                  |
| evaluators      | [repeated EvaluatorResult](#evaluatorresult) | Per-evaluator metadata for the run that produced this audit. Empty when the SqlTest has no evaluators. Use to resolve the evaluator IDs found in each row's `_failed_evaluators` array to their names and severities. |
| sql\_test\_path | [ string](#string)                           | Path of the SqlTest that produced this audit.                                                                                                                                                                         |
| status          | [ ExecutionStatus](#executionstatus)         | Overall run status of the SqlTest execution that produced this audit.                                                                                                                                                 |
| status\_message | [ string](#string)                           | Short human-readable status message describing the overall run outcome.                                                                                                                                               |

### SqlValue

(synq.datachecks.sqltests.v1.SqlValue)

Represents a value that can be either a literal (to be quoted in SQL) or a SQL expression (to be used as plain text).

| Field           | Type               | Description                                                                          |
| --------------- | ------------------ | ------------------------------------------------------------------------------------ |
| string\_literal | [ string](#string) | Literal value that should be quoted in SQL (e.g., '2025-05-12', 'active')            |
| expression      | [ string](#string) | SQL expression, numbers to be used as plain text (e.g., NOW(), COUNT(\*), true, 1.1) |

### Template

(synq.datachecks.sqltests.v1.Template)

| Field                                                                                                     | Type                                       | Description                                                                                                               |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| identifier                                                                                                | [ Identifier](#identifier)                 | Read-only path of matched entity. This is a unique path that can be used to access the entity in the Coalesce Quality UI. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.not\_null\_test        | [ NotNullTest](#notnulltest)               | Checks if specified columns contain no NULL values (e.g., user\_id should never be null)                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.empty\_test            | [ EmptyTest](#emptytest)                   | Checks if specified columns contain empty values (e.g., description field can be empty)                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.accepted\_values\_test | [ AcceptedValuesTest](#acceptedvaluestest) | Validates that column values are within an allowed set (e.g., status in \['active', 'inactive', 'pending'])               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.rejected\_values\_test | [ RejectedValuesTest](#rejectedvaluestest) | Validates that column values are not in a forbidden set (e.g., country not in \['UNKNOWN', 'TEST'])                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.unique\_test           | [ UniqueTest](#uniquetest)                 | Ensures specified columns form a unique key combination (e.g., order\_id is unique)                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.freshness\_test        | [ FreshnessTest](#freshnesstest)           | Checks if data is up-to-date based on a time column (e.g., latest event\_timestamp within 24h)                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_max\_test         | [ MinMaxTest](#minmaxtest)                 | Validates numeric values are within specified range (e.g., price between 0 and 1000)                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.relative\_time\_test   | [ RelativeTimeTest](#relativetimetest)     | Compares time-based columns for logical order (e.g., start\_date before end\_date)                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.business\_rule\_test   | [ BusinessRuleTest](#businessruletest)     | Per-row boolean predicate; rows matching are reported as failures (e.g., total\_amount != subtotal + tax)                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.min\_value\_test       | [ MinValueTest](#minvaluetest)             | Validates numeric values are greater than or equal to a minimum value (e.g., price >= 0)                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.max\_value\_test       | [ MaxValueTest](#maxvaluetest)             | Validates numeric values are less than or equal to a maximum value (e.g., price \<= 1000)                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.relationships\_test    | [ RelationshipsTest](#relationshipstest)   | Validates referential integrity between source and reference tables                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) test.business\_query\_test  | [ BusinessQueryTest](#businessquerytest)   | Full SELECT whose result rows are reported as failures; supports GROUP BY, JOINs, etc.                                    |

### UniqueTest

(synq.datachecks.sqltests.v1.UniqueTest)

Note: this test does not expose a `select_columns` option. The SELECT shape
is fixed by the aggregation (DISTINCT columns + duplicate count); failure
rows are the duplicate keys, not raw table rows.

| Field                         | Type                       | Description                                                                                                                                   |
| ----------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| column\_names                 | [repeated string](#string) | List of columns that should form a unique combination                                                                                         |
| time\_partition\_column\_name | [ string](#string)         | If provided, the check will be applied to the time window of the time partition column If not provided, the check will be applied to all rows |
| time\_window\_seconds         | [ int64](#int64)           | Time window for uniqueness check (in seconds)                                                                                                 |

### Integration

(synq.extensions.atlan.integrations.v1.Integration)

| Field                                                                                                   | Type                             | Description                                                                                      |
| ------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------ |
| workspace                                                                                               | [ string](#string)               | none                                                                                             |
| id                                                                                                      | [ string](#string)               | ID for the integration. Unique for a workspace.                                                  |
| atlan\_tenant\_url                                                                                      | [ string](#string)               | none                                                                                             |
| atlan\_api\_token                                                                                       | [ string](#string)               | none                                                                                             |
| is\_valid                                                                                               | [ bool](#bool)                   | Whether the integration is valid or not. Set on `upsert` as a result of connection to atlan api. |
| is\_active                                                                                              | [ bool](#bool)                   | Whether the integration is active or not. Only valid integrations can be activated.              |
| created\_at                                                                                             | [ Timestamp](#timestamp)         | none                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp) | none                                                                                             |
| updated\_at                                                                                             | [ Timestamp](#timestamp)         | none                                                                                             |

### ActivateRequest

(synq.extensions.atlan.integrations.v1.ActivateRequest)

| Field    | Type           | Description |
| -------- | -------------- | ----------- |
| activate | [ bool](#bool) | none        |

### ActivateResponse

(synq.extensions.atlan.integrations.v1.ActivateResponse)

### GetRequest

(synq.extensions.atlan.integrations.v1.GetRequest)

### GetResponse

(synq.extensions.atlan.integrations.v1.GetResponse)

| Field       | Type                         | Description |
| ----------- | ---------------------------- | ----------- |
| integration | [ Integration](#integration) | none        |

### PingRequest

(synq.extensions.atlan.integrations.v1.PingRequest)

| Field              | Type               | Description |
| ------------------ | ------------------ | ----------- |
| atlan\_tenant\_url | [ string](#string) | none        |
| atlan\_api\_token  | [ string](#string) | none        |

### PingResponse

(synq.extensions.atlan.integrations.v1.PingResponse)

| Field   | Type           | Description |
| ------- | -------------- | ----------- |
| success | [ bool](#bool) | none        |

### RemoveRequest

(synq.extensions.atlan.integrations.v1.RemoveRequest)

### RemoveResponse

(synq.extensions.atlan.integrations.v1.RemoveResponse)

### UpsertRequest

(synq.extensions.atlan.integrations.v1.UpsertRequest)

| Field              | Type               | Description |
| ------------------ | ------------------ | ----------- |
| atlan\_tenant\_url | [ string](#string) | none        |
| atlan\_api\_token  | [ string](#string) | none        |

### UpsertResponse

(synq.extensions.atlan.integrations.v1.UpsertResponse)

| Field       | Type                         | Description |
| ----------- | ---------------------------- | ----------- |
| integration | [ Integration](#integration) | none        |

### FetchRunsRequest

(synq.extensions.atlan.workflows.v1.FetchRunsRequest)

| Field | Type             | Description |
| ----- | ---------------- | ----------- |
| from  | [ int32](#int32) | none        |
| limit | [ int32](#int32) | none        |

### FetchRunsResponse

(synq.extensions.atlan.workflows.v1.FetchRunsResponse)

| Field          | Type                                 | Description |
| -------------- | ------------------------------------ | ----------- |
| workflow\_runs | [repeated WorkflowRun](#workflowrun) | none        |

### GetConnectionMappingsRequest

(synq.extensions.atlan.workflows.v1.GetConnectionMappingsRequest)

### GetConnectionMappingsResponse

(synq.extensions.atlan.workflows.v1.GetConnectionMappingsResponse)

| Field    | Type                                             | Description |
| -------- | ------------------------------------------------ | ----------- |
| mappings | [repeated ConnectionMapping](#connectionmapping) | none        |

### GetDomainMappingsRequest

(synq.extensions.atlan.workflows.v1.GetDomainMappingsRequest)

### GetDomainMappingsResponse

(synq.extensions.atlan.workflows.v1.GetDomainMappingsResponse)

| Field    | Type                                     | Description |
| -------- | ---------------------------------------- | ----------- |
| mappings | [repeated DomainMapping](#domainmapping) | none        |

### GetMappingTogglesRequest

(synq.extensions.atlan.workflows.v1.GetMappingTogglesRequest)

### GetMappingTogglesResponse

(synq.extensions.atlan.workflows.v1.GetMappingTogglesResponse)

| Field   | Type                                     | Description |
| ------- | ---------------------------------------- | ----------- |
| toggles | [repeated MappingToggle](#mappingtoggle) | none        |

### GetProductMappingsRequest

(synq.extensions.atlan.workflows.v1.GetProductMappingsRequest)

### GetProductMappingsResponse

(synq.extensions.atlan.workflows.v1.GetProductMappingsResponse)

| Field    | Type                                       | Description |
| -------- | ------------------------------------------ | ----------- |
| mappings | [repeated ProductMapping](#productmapping) | none        |

### RemoveConnectionMappingsRequest

(synq.extensions.atlan.workflows.v1.RemoveConnectionMappingsRequest)

| Field                               | Type                       | Description |
| ----------------------------------- | -------------------------- | ----------- |
| atlan\_connection\_qualified\_names | [repeated string](#string) | none        |

### RemoveConnectionMappingsResponse

(synq.extensions.atlan.workflows.v1.RemoveConnectionMappingsResponse)

### SetConnectionMappingsRequest

(synq.extensions.atlan.workflows.v1.SetConnectionMappingsRequest)

| Field    | Type                                             | Description |
| -------- | ------------------------------------------------ | ----------- |
| mappings | [repeated ConnectionMapping](#connectionmapping) | none        |

### SetConnectionMappingsResponse

(synq.extensions.atlan.workflows.v1.SetConnectionMappingsResponse)

### SetMappingTogglesRequest

(synq.extensions.atlan.workflows.v1.SetMappingTogglesRequest)

| Field   | Type                                     | Description |
| ------- | ---------------------------------------- | ----------- |
| toggles | [repeated MappingToggle](#mappingtoggle) | none        |

### SetMappingTogglesResponse

(synq.extensions.atlan.workflows.v1.SetMappingTogglesResponse)

### SynchronizeRequest

(synq.extensions.atlan.workflows.v1.SynchronizeRequest)

| Field   | Type           | Description |
| ------- | -------------- | ----------- |
| use\_v2 | [ bool](#bool) | none        |

### SynchronizeResponse

(synq.extensions.atlan.workflows.v1.SynchronizeResponse)

| Field         | Type                         | Description |
| ------------- | ---------------------------- | ----------- |
| workflow\_run | [ WorkflowRun](#workflowrun) | none        |
| has\_errors   | [ bool](#bool)               | none        |

### CommandResult

(synq.extensions.atlan.workflows.v1.CommandResult)

| Field                                                                                       | Type                       | Description |
| ------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| command                                                                                     | [ string](#string)         | none        |
| status                                                                                      | [ Status](#status)         | none        |
| logs                                                                                        | [repeated string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error.error | [optional string](#string) | none        |

### Log

(synq.extensions.atlan.workflows.v1.Log)

| Field     | Type                                | Description |
| --------- | ----------------------------------- | ----------- |
| message   | [ string](#string)                  | none        |
| timestamp | [ Timestamp](#timestamp)            | none        |
| status    | [ Status](#status)                  | none        |
| metadata  | [map MetadataEntry](#metadataentry) | none        |

### Log.MetadataEntry

(synq.extensions.atlan.workflows.v1.Log.MetadataEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### WorkflowRun

(synq.extensions.atlan.workflows.v1.WorkflowRun)

| Field       | Type                                     | Description                  |
| ----------- | ---------------------------------------- | ---------------------------- |
| workspace   | [ string](#string)                       | none                         |
| results     | [repeated CommandResult](#commandresult) | Deprecated: Use Log instead. |
| status      | [ Status](#status)                       | none                         |
| started\_at | [ Timestamp](#timestamp)                 | none                         |
| ended\_at   | [ Timestamp](#timestamp)                 | none                         |
| logs        | [repeated Log](#log)                     | none                         |

### DomainMappingToggle

(synq.extensions.atlan.workflows.v1.DomainMappingToggle)

| Field                          | Type               | Description |
| ------------------------------ | ------------------ | ----------- |
| atlan\_domain\_qualified\_name | [ string](#string) | none        |

### MappingToggle

(synq.extensions.atlan.workflows.v1.MappingToggle)

| Field                                                                                                         | Type                                                     | Description |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mapping.product\_mapping        | [ ProductMappingToggle](#productmappingtoggle)           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mapping.domain\_mapping         | [ DomainMappingToggle](#domainmappingtoggle)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mapping.product\_owner\_mapping | [ ProductOwnerMappingToggle](#productownermappingtoggle) | none        |
| enabled                                                                                                       | [ bool](#bool)                                           | none        |

### ProductMappingToggle

(synq.extensions.atlan.workflows.v1.ProductMappingToggle)

| Field                           | Type               | Description |
| ------------------------------- | ------------------ | ----------- |
| atlan\_product\_qualified\_name | [ string](#string) | none        |

### ProductOwnerMappingToggle

(synq.extensions.atlan.workflows.v1.ProductOwnerMappingToggle)

| Field                           | Type               | Description |
| ------------------------------- | ------------------ | ----------- |
| atlan\_product\_qualified\_name | [ string](#string) | none        |

### ConnectionMapping

(synq.extensions.atlan.workflows.v1.ConnectionMapping)

| Field                              | Type                                               | Description |
| ---------------------------------- | -------------------------------------------------- | ----------- |
| atlan\_connection\_qualified\_name | [ string](#string)                                 | none        |
| synq\_data\_platform\_identifier   | [ DataPlatformIdentifier](#dataplatformidentifier) | none        |

### DomainMapping

(synq.extensions.atlan.workflows.v1.DomainMapping)

| Field                          | Type               | Description |
| ------------------------------ | ------------------ | ----------- |
| atlan\_domain\_qualified\_name | [ string](#string) | none        |
| synq\_domain\_id               | [ string](#string) | none        |

### ProductMapping

(synq.extensions.atlan.workflows.v1.ProductMapping)

| Field                               | Type                                             | Description |
| ----------------------------------- | ------------------------------------------------ | ----------- |
| atlan\_dataproduct\_qualified\_name | [ string](#string)                               | none        |
| synq\_dataproduct\_identifier       | [ DataproductIdentifier](#dataproductidentifier) | none        |

### GetAtlanConnectionsRequest

(synq.extensions.atlan.provider.v1.GetAtlanConnectionsRequest)

### GetAtlanConnectionsResponse

(synq.extensions.atlan.provider.v1.GetAtlanConnectionsResponse)

| Field       | Type                                         | Description |
| ----------- | -------------------------------------------- | ----------- |
| connections | [repeated AtlanConnection](#atlanconnection) | none        |

### GetAtlanDataProductsRequest

(synq.extensions.atlan.provider.v1.GetAtlanDataProductsRequest)

### GetAtlanDataProductsResponse

(synq.extensions.atlan.provider.v1.GetAtlanDataProductsResponse)

| Field          | Type                                           | Description |
| -------------- | ---------------------------------------------- | ----------- |
| data\_products | [repeated AtlanDataProduct](#atlandataproduct) | none        |

### GetAtlanDomainsRequest

(synq.extensions.atlan.provider.v1.GetAtlanDomainsRequest)

### GetAtlanDomainsResponse

(synq.extensions.atlan.provider.v1.GetAtlanDomainsResponse)

| Field   | Type                                         | Description |
| ------- | -------------------------------------------- | ----------- |
| domains | [repeated AtlanDataDomain](#atlandatadomain) | none        |

### AtlanConnection

(synq.extensions.atlan.provider.v1.AtlanConnection)

| Field           | Type               | Description |
| --------------- | ------------------ | ----------- |
| name            | [ string](#string) | none        |
| qualified\_name | [ string](#string) | none        |

### AtlanDataDomain

(synq.extensions.atlan.provider.v1.AtlanDataDomain)

| Field                                                                                         | Type                                         | Description |
| --------------------------------------------------------------------------------------------- | -------------------------------------------- | ----------- |
| name                                                                                          | [ string](#string)                           | none        |
| qualified\_name                                                                               | [ string](#string)                           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent.parent | [optional AtlanDataDomain](#atlandatadomain) | none        |

### AtlanDataProduct

(synq.extensions.atlan.provider.v1.AtlanDataProduct)

| Field                                                                                         | Type                                         | Description                                         |
| --------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------- |
| name                                                                                          | [ string](#string)                           | none                                                |
| qualified\_name                                                                               | [ string](#string)                           | none                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_domain.domain | [optional AtlanDataDomain](#atlandatadomain) | none                                                |
| owner\_users                                                                                  | [ Emails](#emails)                           | emails for the owner users                          |
| owner\_groups                                                                                 | [map OwnerGroupsEntry](#ownergroupsentry)    | emails for the owner groups mapped against group ID |

### AtlanDataProduct.Emails

(synq.extensions.atlan.provider.v1.AtlanDataProduct.Emails)

| Field  | Type                       | Description |
| ------ | -------------------------- | ----------- |
| emails | [repeated string](#string) | none        |

### AtlanDataProduct.OwnerGroupsEntry

(synq.extensions.atlan.provider.v1.AtlanDataProduct.OwnerGroupsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Emails](#emails) | none        |

### FixedQuantumGrid

(synq.schedule.v1.FixedQuantumGrid)

FixedQuantumGrid snaps onto a fixed-size grid anchored at the Unix epoch
(1970-01-01T00:00:00Z): \[epoch, epoch+quantum, epoch+2\*quantum, ...].

| Field   | Type                   | Description                            |
| ------- | ---------------------- | -------------------------------------- |
| quantum | [ Duration](#duration) | Spacing between grid points, e.g. 10m. |

### IntegrationAnchorGrid

(synq.schedule.v1.IntegrationAnchorGrid)

IntegrationAnchorGrid snaps onto the shared, stable grid an integration's
periodic warehouse scrape already fires on. Aligning to it lets a run reuse
the same warehouse wake as the scrape.

The integration is resolved in the caller's own workspace (taken from the
authenticated identity, never from the request), and the caller must be
authorized to read it — a token without integration read access is rejected.

| Field                                                                                         | Type                           | Description                                                                                                                                                                                          |
| --------------------------------------------------------------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| integration\_id                                                                               | [ string](#string)             | The integration whose scrape grid to align to.                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_period.period | [optional Duration](#duration) | Spacing between grid points. When unset, the integration's configured scrape cadence is used — this is what actually resumes the warehouse once per tick. Set it only to override for unusual cases. |

### PreviewScheduleParams

(synq.schedule.v1.PreviewScheduleParams)

Parameters for evaluating a single schedule.

| Field                                                                                       | Type                                   | Description                                                                                                                                                                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| schedule                                                                                    | [ Schedule](#schedule)                 | The schedule to evaluate.                                                                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_after.after | [optional Timestamp](#timestamp)       | Starting point for computing occurrences. Defaults to now if not set.                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_limit.limit | [optional int32](#int32)               | Number of occurrences to return. Defaults to 7, maximum 100.                                                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_snap.snap   | [optional ScheduleSnap](#schedulesnap) | Optional. When set, each computed occurrence is mapped to the nearest matching grid point before being returned, so the job co-fires with existing activity (e.g. a warehouse that is already awake) instead of triggering its own resume. When unset, occurrences are returned exactly as the schedule expression produces them. |

### PreviewScheduleResult

(synq.schedule.v1.PreviewScheduleResult)

Result for a single schedule evaluation.

| Field       | Type                             | Description                                                                                       |
| ----------- | -------------------------------- | ------------------------------------------------------------------------------------------------- |
| occurrences | [repeated Timestamp](#timestamp) | The next occurrences in chronological order. Empty if error is set.                               |
| error       | [ string](#string)               | Error message if the schedule expression is invalid or cannot be evaluated. Empty on success.     |
| snap\_info  | [repeated SnapInfo](#snapinfo)   | Per-occurrence snap outcome, index-aligned with `occurrences`. Empty when snap was not requested. |

### PreviewSchedulesRequest

(synq.schedule.v1.PreviewSchedulesRequest)

| Field     | Type                                                     | Description                                                     |
| --------- | -------------------------------------------------------- | --------------------------------------------------------------- |
| schedules | [repeated PreviewScheduleParams](#previewscheduleparams) | Schedules to evaluate. An empty list returns an empty response. |

### PreviewSchedulesResponse

(synq.schedule.v1.PreviewSchedulesResponse)

| Field   | Type                                                     | Description                                      |
| ------- | -------------------------------------------------------- | ------------------------------------------------ |
| results | [repeated PreviewScheduleResult](#previewscheduleresult) | Results matching the request schedules by index. |

### ScheduleSnap

(synq.schedule.v1.ScheduleSnap)

ScheduleSnap maps each schedule occurrence onto a grid so runs line up with
activity that is already happening, avoiding a separate warehouse resume.
Pick one grid source and, optionally, how far an occurrence may move.

| Field                                                                                                  | Type                                             | Description                                                                                                                                                                                                                                                                                     |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) grid.integration\_anchor | [ IntegrationAnchorGrid](#integrationanchorgrid) | Snap onto the shared warehouse-scrape grid for an integration, so the run co-fires with the periodic scrape and reuses the same warehouse wake instead of paying for another resume.                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) grid.fixed\_quantum      | [ FixedQuantumGrid](#fixedquantumgrid)           | Snap onto a fixed-quantum grid (e.g. every 10 minutes from the Unix epoch, UTC). Useful for tidy round-minute fire times without coupling to integration activity.                                                                                                                              |
| tolerance                                                                                              | [ Duration](#duration)                           | How far an occurrence may be moved to land on the grid. If the nearest eligible grid point is farther away than this, the occurrence is returned unmoved and flagged as not snapped (see SnapInfo). Unset or zero means an occurrence snaps only when it already lands exactly on a grid point. |
| direction                                                                                              | [ SnapDirection](#snapdirection)                 | Direction an occurrence is allowed to move. Unspecified behaves as NEAREST.                                                                                                                                                                                                                     |

### SnapInfo

(synq.schedule.v1.SnapInfo)

SnapInfo records, for one occurrence, whether snapping moved it onto the grid.

| Field    | Type                     | Description                                                                                                                                                                                              |
| -------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| original | [ Timestamp](#timestamp) | The occurrence as the schedule expression produced it, before snapping.                                                                                                                                  |
| snapped  | [ bool](#bool)           | True if the occurrence was moved onto the grid. False if the nearest grid point was farther than the tolerance (or none was available), in which case the aligned `occurrences` entry equals `original`. |

### CronSchedule

(synq.schedule.v1.CronSchedule)

CronSchedule uses standard cron expression syntax.

| Field      | Type               | Description                                        |
| ---------- | ------------------ | -------------------------------------------------- |
| expression | [ string](#string) | Standard cron expression (e.g. "0 \*/6 \* \* \*"). |

### ICalSchedule

(synq.schedule.v1.ICalSchedule)

ICalSchedule uses RFC 5545 RRULE recurrence rules.

| Field                                                                                           | Type                             | Description                                                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| recurrence\_rule                                                                                | [ string](#string)               | RFC 5545 RRULE recurrence rule (e.g. "FREQ=MONTHLY;BYDAY=TH;BYSETPOS=-1"). DTSTART should be set via the dtstart field below rather than inline in the rule.                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dtstart.dtstart | [optional Timestamp](#timestamp) | Anchor time for the recurrence rule. Wall-clock time interpreted in the schedule's timezone. Defines when the schedule starts and aligns occurrences. If not set and no DTSTART is present in the recurrence\_rule, defaults to now(). |

### Schedule

(synq.schedule.v1.Schedule)

Schedule defines a recurring schedule with timezone context.

| Field                                                                                   | Type                           | Description                                               |
| --------------------------------------------------------------------------------------- | ------------------------------ | --------------------------------------------------------- |
| timezone                                                                                | [ string](#string)             | IANA timezone, e.g. "Europe/Warsaw", "America/New\_York". |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.cron | [ CronSchedule](#cronschedule) | none                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.ical | [ ICalSchedule](#icalschedule) | none                                                      |

### CommitDiff

(synq.git.commits.v1.CommitDiff)

| Field       | Type                           | Description |
| ----------- | ------------------------------ | ----------- |
| commit\_sha | [ string](#string)             | none        |
| file\_diffs | [repeated FileDiff](#filediff) | none        |

### FileDiff

(synq.git.commits.v1.FileDiff)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| file\_path | [ string](#string) | none        |
| diff       | [ string](#string) | none        |

### GetDiffByChangeIdRequest

(synq.git.commits.v1.GetDiffByChangeIdRequest)

| Field            | Type                       | Description |
| ---------------- | -------------------------- | ----------- |
| change\_id       | [ string](#string)         | none        |
| limit\_to\_files | [repeated string](#string) | none        |

### GetDiffByChangeIdResponse

(synq.git.commits.v1.GetDiffByChangeIdResponse)

| Field                                                                                                     | Type                               | Description |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_commit\_diff.commit\_diff | [optional CommitDiff](#commitdiff) | none        |

### GetDiffByCommitRequest

(synq.git.commits.v1.GetDiffByCommitRequest)

| Field            | Type                       | Description                                                                                                                                                                                                                                                           |
| ---------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| commit\_sha      | [ string](#string)         | Commit SHA. Accepts either the full 40-char hex hash or any unique hex prefix of at least 7 characters (server resolves the prefix against stored commits, like `git rev-parse <prefix>`). Ambiguous or unmatched prefixes return an empty diff rather than an error. |
| limit\_to\_files | [repeated string](#string) | none                                                                                                                                                                                                                                                                  |

### GetDiffByCommitResponse

(synq.git.commits.v1.GetDiffByCommitResponse)

| Field                                                                                                     | Type                               | Description |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_commit\_diff.commit\_diff | [optional CommitDiff](#commitdiff) | none        |

### Callback

(synq.webhooks.v1.Callback)

| Field                                                                                                | Type                             | Description |
| ---------------------------------------------------------------------------------------------------- | -------------------------------- | ----------- |
| url                                                                                                  | [ string](#string)               | none        |
| action\_name                                                                                         | [ string](#string)               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.issues\_command | [ IssuesCommand](#issuescommand) | none        |

### FlatEvent

(synq.webhooks.v1.FlatEvent)

A webhook event in the flat format — an experimental, opt-in alternative to
`Event` that carries the same information in a flatter shape.

Instead of nesting the payload under a per-event-type field (`issue_created`,
`issue_updated`, `incident_open`, …), the payload is carried by a single
top-level field — `issue`, `incident`, or `ping` — and `event_type` says
which one is set and why. A receiver can then read a value the same way on
every event, e.g. `issue.owners[0].title` on any issue event, instead of a
different path per event type.

Exactly one of `issue`, `incident`, or `ping` is set, matching `event_type`.
Select this format per webhook integration; the default is the nested `Event`.
Payload signing is identical — see `Event` for the signature scheme.

Experimental: this shape may change while we gather feedback.

| Field       | Type                                 | Description                                                         |
| ----------- | ------------------------------------ | ------------------------------------------------------------------- |
| workspace   | [ string](#string)                   | none                                                                |
| event\_id   | [ string](#string)                   | none                                                                |
| event\_time | [ Timestamp](#timestamp)             | none                                                                |
| event\_type | [ EventType](#eventtype)             | Which event occurred, and which payload field below is set.         |
| issue       | [ IssueSummary](#issuesummary)       | Issue payload. Set on every `EVENT_TYPE_ISSUE_*` event.             |
| incident    | [ IncidentSummary](#incidentsummary) | Incident payload. Set on every `EVENT_TYPE_INCIDENT_*` event.       |
| ping        | [ Ping](#ping)                       | Test payload. Set on `EVENT_TYPE_PING` (sent during webhook setup). |
| callbacks   | [repeated Callback](#callback)       | none                                                                |

### Event

(synq.webhooks.v1.Event)

A webhook event delivered to a customer-configured endpoint.

Payload signing: every outgoing request is signed so the receiver can verify
it originated from Coalesce Quality and was not tampered with or replayed. Two
headers are sent on every delivery:

X-Coalesce-Timestamp: \<unix seconds when the delivery was signed>
X-Coalesce-Signature: v1=\<hex-encoded HMAC-SHA256>

The signature is computed as:

signed\_payload = "\{X-Coalesce-Timestamp}." + \<raw request body bytes>
signature      = hex( HMAC\_SHA256(key = signing\_secret, msg = signed\_payload) )

where signing\_secret is the per-integration secret shown (read-only) in the
webhook integration settings. To verify:

1. Read X-Coalesce-Timestamp and the raw request body.
2. Recompute the signature with your copy of the signing secret and compare
   it against the v1=... value in X-Coalesce-Signature using a constant-time
   comparison.
3. Optionally reject deliveries whose timestamp is outside your tolerance
   window (retries reuse the original signing timestamp, so allow for the
   retry backoff window — up to \~30 minutes).

The v1= prefix identifies the signature scheme; future schemes may add
additional space-separated values to the header.

| Field                                                                                                     | Type                                       | Description |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------- |
| workspace                                                                                                 | [ string](#string)                         | none        |
| event\_id                                                                                                 | [ string](#string)                         | none        |
| event\_time                                                                                               | [ Timestamp](#timestamp)                   | none        |
| event\_type                                                                                               | [ EventType](#eventtype)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.ping                   | [ Ping](#ping)                             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.issue\_created         | [ IssueCreated](#issuecreated)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.issue\_updated         | [ IssueUpdated](#issueupdated)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.issue\_status\_updated | [ IssueStatusUpdated](#issuestatusupdated) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.issue\_closed          | [ IssueClosed](#issueclosed)               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.incident\_open         | [ IncidentOpen](#incidentopen)             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.incident\_closed       | [ IncidentClosed](#incidentclosed)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.incident\_cancelled    | [ IncidentCancelled](#incidentcancelled)   | none        |
| callbacks                                                                                                 | [repeated Callback](#callback)             | none        |

### IncidentCancelled

(synq.webhooks.v1.IncidentCancelled)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| incident | [ IncidentSummary](#incidentsummary) | none        |

### IncidentClosed

(synq.webhooks.v1.IncidentClosed)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| incident | [ IncidentSummary](#incidentsummary) | none        |

### IncidentOpen

(synq.webhooks.v1.IncidentOpen)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| incident | [ IncidentSummary](#incidentsummary) | none        |

### IncidentSummary

(synq.webhooks.v1.IncidentSummary)

| Field                                                                                               | Type                             | Description |
| --------------------------------------------------------------------------------------------------- | -------------------------------- | ----------- |
| incident\_id                                                                                        | [ string](#string)               | none        |
| incident\_url                                                                                       | [ string](#string)               | none        |
| title                                                                                               | [ string](#string)               | none        |
| description                                                                                         | [ string](#string)               | none        |
| description\_html                                                                                   | [ string](#string)               | none        |
| started\_at                                                                                         | [ Timestamp](#timestamp)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ended\_at.ended\_at | [optional Timestamp](#timestamp) | none        |

### IssueClosed

(synq.webhooks.v1.IssueClosed)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| issue | [ IssueSummary](#issuesummary) | none        |

### IssueCreated

(synq.webhooks.v1.IssueCreated)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| issue | [ IssueSummary](#issuesummary) | none        |

### IssueStatusUpdated

(synq.webhooks.v1.IssueStatusUpdated)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| issue | [ IssueSummary](#issuesummary) | none        |

### IssueSummary

(synq.webhooks.v1.IssueSummary)

| Field                                                                                                       | Type                                 | Description                                                                                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| issue\_id                                                                                                   | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| issue\_group\_id                                                                                            | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| issue\_url                                                                                                  | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| title                                                                                                       | [ string](#string)                   | Summary of the issue, what happened and where.                                                                                                                                                                                                                                                                    |
| description                                                                                                 | [ string](#string)                   | Detailed description of the issue. In the Markdown format.                                                                                                                                                                                                                                                        |
| description\_html                                                                                           | [ string](#string)                   | Detailed description of the issue. In the HTML format.                                                                                                                                                                                                                                                            |
| trigger\_entity                                                                                             | [ IssueEntity](#issueentity)         | Entity which triggered the issue.                                                                                                                                                                                                                                                                                 |
| directly\_affected\_entities                                                                                | [repeated IssueEntity](#issueentity) | Entities directly affected by the issue, not considering downstream ones.                                                                                                                                                                                                                                         |
| monitored\_entities                                                                                         | [repeated IssueEntity](#issueentity) | The primary entities being monitored that are associated with this issue, for example the dbt model or dbt Cloud job that a failing test is attached to.                                                                                                                                                          |
| started\_at                                                                                                 | [ Timestamp](#timestamp)             | Time when the issue was triggered.                                                                                                                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ended\_at.ended\_at         | [optional Timestamp](#timestamp)     | Time when the issue was closed.                                                                                                                                                                                                                                                                                   |
| trigger\_run\_id                                                                                            | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| trigger\_name                                                                                               | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| trigger\_message                                                                                            | [ string](#string)                   | none                                                                                                                                                                                                                                                                                                              |
| status                                                                                                      | [ IssueStatus](#issuestatus)         | none                                                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_status\_actor.status\_actor | [optional Actor](#actor)             | The user who set the current status, when the transition was human-initiated (e.g. someone pressing Expected / Fixed / No action needed / Investigating in the app or via the public API). This is the same actor exposed by the Issues API as `Issue.latest_status_actor`, so the two feeds can be joined on it. |

Set only when an actor is known: it is populated on `issue_status_updated` events and left unset for system-driven transitions with no human actor (e.g. a status implied by a monitor run). Consumers must treat it as optional and tolerate its absence.

Carries the strongest identity the caller proved — a Coalesce Quality email, Slack user id, or PagerDuty user id — alongside a display `name`. |
\| owners | [repeated Owner](#owner) | Owners of the entities this issue is about.

Covers only the direct owners of the affected entities, not the owners of downstream entities. Empty when the affected entities have no owner assigned. Ordered as shown in the app. |

### IssueSummary.IssueEntity

(synq.webhooks.v1.IssueSummary.IssueEntity)

| Field                                                                                         | Type                       | Description |
| --------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| name                                                                                          | [ string](#string)         | none        |
| type\_name                                                                                    | [ string](#string)         | none        |
| identifier                                                                                    | [ Identifier](#identifier) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_folder.folder | [optional string](#string) | none        |
| entity\_url                                                                                   | [ string](#string)         | none        |

### IssueSummary.Owner

(synq.webhooks.v1.IssueSummary.Owner)

An owner (person or team) responsible for an entity, as assigned in
Coalesce Quality (natively or synced from a catalog).

| Field | Type               | Description                                                                                                                                                  |
| ----- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id    | [ string](#string) | Identifier of the owner within the workspace. Matches the id on the Owners API, so callers can fetch the full owner record (contacts, source) from that API. |
| title | [ string](#string) | Display name of the owner, e.g. a team or person name.                                                                                                       |
| url   | [ string](#string) | Deep link to the owner in the Coalesce Quality app.                                                                                                          |

### IssueUpdated

(synq.webhooks.v1.IssueUpdated)

| Field | Type                           | Description |
| ----- | ------------------------------ | ----------- |
| issue | [ IssueSummary](#issuesummary) | none        |

### Ping

(synq.webhooks.v1.Ping)

Test event sent during a webhook setup.

| Field   | Type               | Description |
| ------- | ------------------ | ----------- |
| message | [ string](#string) | none        |

### PageInfo

(synq.v1.PageInfo)

| Field        | Type               | Description                                                                                                                                                                                                                        |
| ------------ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| total\_count | [ int32](#int32)   | Total number of items matching the request. May not be available for cursor-based pagination where the total is unknown or expensive to compute. Deprecated: most of the APIs which require pagination don't know the total count. |
| count        | [ int32](#int32)   | Number of items returned in this response.                                                                                                                                                                                         |
| last\_id     | [ string](#string) | Opaque cursor token for fetching the next page of results. Pass this value as the cursor in the next Pagination request to continue pagination. Empty if there are no more pages.                                                  |

### Pagination

(synq.v1.Pagination)

| Field                                                                                                 | Type                       | Description                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cursor.cursor         | [optional string](#string) | Opaque cursor token for the next page of results. If not provided, returns the first page. This is an encoded token that should be passed as-is from the previous PageInfo.last\_id. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_page\_size.page\_size | [optional int32](#int32)   | Maximum number of items to return in a single page. If not provided, defaults vary per API.                                                                                          |

### ScopeAuthorization

(synq.v1.ScopeAuthorization)

| Field  | Type                     | Description |
| ------ | ------------------------ | ----------- |
| scopes | [repeated Scope](#scope) | none        |

### BatchGetRequest

(synq.dataproducts.v2.BatchGetRequest)

| Field               | Type                       | Description                                                                                                                                         |
| ------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| ids                 | [repeated string](#string) | Ids to fetch (1–200, unique). Each accepts either the bare UUID or the `entity_id` form (`dataproduct-<uuid>`); the prefix is stripped server-side. |
| include\_deleted    | [ bool](#bool)             | Include soft-deleted products.                                                                                                                      |
| exclude\_definition | [ bool](#bool)             | Omit the (potentially large) membership definition from each product.                                                                               |

### BatchGetResponse

(synq.dataproducts.v2.BatchGetResponse)

| Field        | Type                                        | Description                                                                                |
| ------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------ |
| dataproducts | [map DataproductsEntry](#dataproductsentry) | Products keyed by id. Ids that do not exist (or are deleted, unless requested) are absent. |

### BatchGetResponse.DataproductsEntry

(synq.dataproducts.v2.BatchGetResponse.DataproductsEntry)

| Field | Type                         | Description |
| ----- | ---------------------------- | ----------- |
| key   | [ string](#string)           | none        |
| value | [ Dataproduct](#dataproduct) | none        |

### DeleteRequest

(synq.dataproducts.v2.DeleteRequest)

| Field                                                                                     | Type                       | Description                                                                                                                          |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the product to delete. Accepts the bare UUID or the `dataproduct-<uuid>` entity\_id form (the prefix is stripped server-side). |
| purge                                                                                     | [ bool](#bool)             | Hard-delete instead of soft-delete, releasing the id for reuse.                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                               |

### DeleteResponse

(synq.dataproducts.v2.DeleteResponse)

### ListMembersRequest

(synq.dataproducts.v2.ListMembersRequest)

| Field      | Type                       | Description                                                                                                                                      |
| ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id         | [ string](#string)         | Id of the product whose members to list. Accepts the bare UUID or the `dataproduct-<uuid>` entity\_id form (the prefix is stripped server-side). |
| pagination | [ Pagination](#pagination) | Pagination.                                                                                                                                      |

### ListMembersResponse

(synq.dataproducts.v2.ListMembersResponse)

| Field       | Type                       | Description                                                           |
| ----------- | -------------------------- | --------------------------------------------------------------------- |
| entity\_ids | [repeated string](#string) | Opaque entity ids of the assets that currently belong to the product. |
| page\_info  | [ PageInfo](#pageinfo)     | Pagination cursor for the next page.                                  |

### ListRequest

(synq.dataproducts.v2.ListRequest)

| Field                                                                                         | Type                           | Description                                                 |
| --------------------------------------------------------------------------------------------- | ------------------------------ | ----------------------------------------------------------- |
| pagination                                                                                    | [ Pagination](#pagination)     | Pagination.                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_folder.folder | [optional string](#string)     | Restrict to a single folder.                                |
| priorities                                                                                    | [repeated Priority](#priority) | Restrict to these priorities. Empty returns all priorities. |
| include\_deleted                                                                              | [ bool](#bool)                 | Include soft-deleted products.                              |
| exclude\_definition                                                                           | [ bool](#bool)                 | Omit the membership definition from each product.           |

### ListResponse

(synq.dataproducts.v2.ListResponse)

| Field        | Type                                 | Description                          |
| ------------ | ------------------------------------ | ------------------------------------ |
| dataproducts | [repeated Dataproduct](#dataproduct) | The matching products.               |
| page\_info   | [ PageInfo](#pageinfo)               | Pagination cursor for the next page. |

### RemoveDefinitionPartRequest

(synq.dataproducts.v2.RemoveDefinitionPartRequest)

| Field                                                                                     | Type                       | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the product. Accepts the bare UUID or the `dataproduct-<uuid>` entity\_id form (the prefix is stripped server-side).                       |
| part\_id                                                                                  | [ string](#string)         | Id of the part to remove.                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                                           |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user. |

### RemoveDefinitionPartResponse

(synq.dataproducts.v2.RemoveDefinitionPartResponse)

| Field       | Type                         | Description                                |
| ----------- | ---------------------------- | ------------------------------------------ |
| dataproduct | [ Dataproduct](#dataproduct) | The stored product after the part removal. |

### SetDefinitionRequest

(synq.dataproducts.v2.SetDefinitionRequest)

| Field                                                                                     | Type                                             | Description                                                                                                                                            |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)                               | Id of the product whose definition to replace. Accepts the bare UUID or the `dataproduct-<uuid>` entity\_id form (the prefix is stripped server-side). |
| definition                                                                                | [ DataproductDefinition](#dataproductdefinition) | The new membership definition (replaces the existing one entirely).                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string)                       | Optional optimistic-concurrency guard.                                                                                                                 |
| actor                                                                                     | [ Actor](#actor)                                 | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user.       |

### SetDefinitionResponse

(synq.dataproducts.v2.SetDefinitionResponse)

| Field       | Type                         | Description                                    |
| ----------- | ---------------------------- | ---------------------------------------------- |
| dataproduct | [ Dataproduct](#dataproduct) | The stored product after the definition write. |

### UpsertDefinitionPartRequest

(synq.dataproducts.v2.UpsertDefinitionPartRequest)

| Field                                                                                     | Type                       | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the product. Accepts the bare UUID or the `dataproduct-<uuid>` entity\_id form (the prefix is stripped server-side).                       |
| part                                                                                      | [ Part](#part)             | The part to add or replace (matched by its part id).                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                                           |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user. |

### UpsertDefinitionPartResponse

(synq.dataproducts.v2.UpsertDefinitionPartResponse)

| Field       | Type                         | Description                              |
| ----------- | ---------------------------- | ---------------------------------------- |
| dataproduct | [ Dataproduct](#dataproduct) | The stored product after the part write. |

### UpsertRequest

(synq.dataproducts.v2.UpsertRequest)

| Field                                                                                                   | Type                                                     | Description                                                                                                                                                                                                                                                                                           |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                                       | Opaque id of the product. Accepts either the bare UUID or the `entity_id` form this API returns (`dataproduct-<uuid>`) — the prefix is stripped server-side, so the value you read back from any API can be passed straight in. The same id updates the same product; a new id creates a new product. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title             | [optional string](#string)                               | Title. Required when creating; omit to keep the existing title on update.                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                               | Description. Omit to keep the existing description.                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_folder.folder           | [optional string](#string)                               | Folder. Omit to keep the existing folder; pass an empty string to clear it.                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_priority.priority       | [optional Priority](#priority)                           | Priority. Omit to keep the existing priority.                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source.source           | [optional Source](#source)                               | Source. Omit to keep the existing source (defaults to SOURCE\_SYNQ on create).                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_definition.definition   | [optional DataproductDefinition](#dataproductdefinition) | Membership definition. Omit to keep the existing definition; pass a present (possibly empty) definition to replace it.                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag               | [optional string](#string)                               | Optional optimistic-concurrency guard. When set, the update fails with a conflict if the product was modified since this etag was read.                                                                                                                                                               |
| actor                                                                                                   | [ Actor](#actor)                                         | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user.                                                                                                                                                      |

### UpsertResponse

(synq.dataproducts.v2.UpsertResponse)

| Field       | Type                         | Description                          |
| ----------- | ---------------------------- | ------------------------------------ |
| dataproduct | [ Dataproduct](#dataproduct) | The stored product after the upsert. |

### DataproductDefinition

(synq.dataproducts.v2.DataproductDefinition)

The membership of a data product: which assets belong to it. A definition is
an ordered list of parts; an asset is a member if it matches ANY part (the
parts are OR'd together).

A data product is a LEAF in the reference graph: its membership is defined
only by asset-level predicates, static asset ids and lineage of those — never
by referencing another data product or domain. The `in_dataproduct` /
`in_domain` query operands are therefore rejected anywhere in a data product
definition (see DataproductQuery). This keeps membership resolution finite:
data products can never take part in a reference cycle.

| Field | Type                   | Description                                                               |
| ----- | ---------------------- | ------------------------------------------------------------------------- |
| parts | [repeated Part](#part) | The parts of the definition. An asset is a member if it matches any part. |

### DataproductDefinition.Part

(synq.dataproducts.v2.DataproductDefinition.Part)

A single piece of a data product definition: either a pinned asset or a
selection query.

| Field                                                                                         | Type                                   | Description                                                                                                                        |
| --------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                            | [ string](#string)                     | Stable id of this part (a UUID). Supplied by the caller for idempotent part upserts; the server mints one if left empty on create. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.entity\_id | [ string](#string)                     | Pin a single asset by its opaque entity id (as returned by resolve / listing APIs). Never constructed by hand.                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query      | [ DataproductQuery](#dataproductquery) | Select assets by a query.                                                                                                          |

### DataproductQuery

(synq.dataproducts.v2.DataproductQuery)

The selection query behind a data product part, expressed for the public API.

On write, provide the query in ONE of two forms:

* `public_query` — a structured query (the same shape used elsewhere for
  asset selection), convenient to build from a filter UI; or
* `resolver_ql` — the resolver query language, a compact text form that is
  the canonical way to author selections as code.
  When both are set, `resolver_ql` wins. The server compiles the query and
  stores it canonically; the raw text is not preserved verbatim.

On read, the server returns `rendered_resolver_ql` (the stored query rendered
back to canonical resolver query language) and, best-effort, `public_query`
(the structured representation). `resolver_ql` is not echoed back — read
`rendered_resolver_ql`.

Leaf rule: a data product may not reference another data product or domain.
The `in_dataproduct`, `in_domain` and `unsupported` operands are rejected at
the top level here (CEL) and, for nested sub-queries, by a server-side walk.

| Field                  | Type               | Description                                                                                                                                                                      |
| ---------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| resolver\_ql           | [ string](#string) | WRITE (option A). The query in resolver query language.                                                                                                                          |
| rendered\_resolver\_ql | [ string](#string) | READ, output-only. The stored query rendered back to canonical resolver query language. Deterministically derived; does not preserve original hand-typed formatting or comments. |
| public\_query          | [ Query](#query)   | WRITE (option B) and READ. On write, the structured query to store (used when `resolver_ql` is empty). On read, a best-effort structured representation of the stored query.     |

### Dataproduct

(synq.dataproducts.v2.Dataproduct)

A data product: a named, owned grouping of data assets that share a purpose,
with a membership definition, a priority and an optional folder.

| Field                                                                                                   | Type                                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                               | Opaque id of the data product (a UUID). Supplied by the caller on create, which makes Upsert idempotent.                                                                                                                                                                                                                                                                                                                                                                                      |
| entity\_id                                                                                              | [ string](#string)                               | Stable, opaque platform identifier of this data product (of the form "dataproduct-\<uuid>"). Output-only — the server derives it; never construct it by hand. This is the value other SYNQ APIs accept as an entity reference for this product (lineage, entities, alerts), so read it here and pass it there to point at the same product without needing to know how it is formed. `synq.owners.v1.OwnershipSelection.dataproduct_id` accepts this `entity_id` directly (or the bare `id`). |
| title                                                                                                   | [ string](#string)                               | Human-readable title.                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| description                                                                                             | [ string](#string)                               | Optional longer description.                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| folder                                                                                                  | [ string](#string)                               | Optional free-text folder used to group products in the UI.                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| priority                                                                                                | [ Priority](#priority)                           | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| source                                                                                                  | [ Source](#source)                               | none                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| definition                                                                                              | [ DataproductDefinition](#dataproductdefinition) | The membership definition. Omitted when a read requests `exclude_definition`.                                                                                                                                                                                                                                                                                                                                                                                                                 |
| etag                                                                                                    | [ string](#string)                               | Entity tag for optimistic concurrency: pass back on Upsert / Delete / definition writes to guard against overwriting a concurrent change. Form: `W/"<id>-<version>"`. Opaque — do not parse.                                                                                                                                                                                                                                                                                                  |
| created\_by                                                                                             | [ Actor](#actor)                                 | Who created the data product. Output-only.                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| updated\_by                                                                                             | [ Actor](#actor)                                 | Who last edited the data product. Output-only.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| created\_at                                                                                             | [ Timestamp](#timestamp)                         | When the data product was created. Output-only.                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| updated\_at                                                                                             | [ Timestamp](#timestamp)                         | When the data product was last updated. Output-only.                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp)                 | When the data product was soft-deleted, if it has been. Output-only.                                                                                                                                                                                                                                                                                                                                                                                                                          |

### DeleteRequest

(synq.dataproducts.v1.DeleteRequest)

| Field      | Type                                             | Description |
| ---------- | ------------------------------------------------ | ----------- |
| identifier | [ DataproductIdentifier](#dataproductidentifier) | none        |

### DeleteResponse

(synq.dataproducts.v1.DeleteResponse)

### GetRequest

(synq.dataproducts.v1.GetRequest)

| Field       | Type                                                     | Description |
| ----------- | -------------------------------------------------------- | ----------- |
| identifiers | [repeated DataproductIdentifier](#dataproductidentifier) | none        |

### GetResponse

(synq.dataproducts.v1.GetResponse)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| products | [repeated Dataproduct](#dataproduct) | none        |

### ListRequest

(synq.dataproducts.v1.ListRequest)

| Field               | Type           | Description |
| ------------------- | -------------- | ----------- |
| include\_deleted    | [ bool](#bool) | none        |
| exclude\_definition | [ bool](#bool) | none        |

### ListResponse

(synq.dataproducts.v1.ListResponse)

| Field    | Type                                 | Description |
| -------- | ------------------------------------ | ----------- |
| products | [repeated Dataproduct](#dataproduct) | none        |

### RemoveDefinitionPartRequest

(synq.dataproducts.v1.RemoveDefinitionPartRequest)

| Field               | Type                                             | Description |
| ------------------- | ------------------------------------------------ | ----------- |
| product\_identifier | [ DataproductIdentifier](#dataproductidentifier) | none        |
| part\_id            | [ string](#string)                               | none        |

### RemoveDefinitionPartResponse

(synq.dataproducts.v1.RemoveDefinitionPartResponse)

### SetDefinitionRequest

(synq.dataproducts.v1.SetDefinitionRequest)

| Field               | Type                                             | Description |
| ------------------- | ------------------------------------------------ | ----------- |
| product\_identifier | [ DataproductIdentifier](#dataproductidentifier) | none        |
| definition          | [ DataproductDefinition](#dataproductdefinition) | none        |

### SetDefinitionResponse

(synq.dataproducts.v1.SetDefinitionResponse)

### UpsertDefinitionPartRequest

(synq.dataproducts.v1.UpsertDefinitionPartRequest)

| Field               | Type                                             | Description |
| ------------------- | ------------------------------------------------ | ----------- |
| product\_identifier | [ DataproductIdentifier](#dataproductidentifier) | none        |
| part                | [ Part](#part)                                   | none        |

### UpsertDefinitionPartResponse

(synq.dataproducts.v1.UpsertDefinitionPartResponse)

### UpsertRequest

(synq.dataproducts.v1.UpsertRequest)

| Field                                                                                                 | Type                                                     | Description |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_identifier.identifier | [optional DataproductIdentifier](#dataproductidentifier) | none        |
| title                                                                                                 | [ string](#string)                                       | none        |
| description                                                                                           | [ string](#string)                                       | none        |
| folder                                                                                                | [ string](#string)                                       | none        |
| priority                                                                                              | [ Priority](#priority)                                   | none        |
| source                                                                                                | [ Source](#source)                                       | none        |

### UpsertResponse

(synq.dataproducts.v1.UpsertResponse)

| Field      | Type                                             | Description                                      |
| ---------- | ------------------------------------------------ | ------------------------------------------------ |
| identifier | [ DataproductIdentifier](#dataproductidentifier) | identifier of the updated or created dataproduct |

### AssetSelectionQuery

(synq.dataproducts.v1.AssetSelectionQuery)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| parts   | [repeated QueryPart](#querypart) | none        |
| operand | [ QueryOperand](#queryoperand)   | none        |

### AssetSelectionQuery.QueryPart

(synq.dataproducts.v1.AssetSelectionQuery.QueryPart)

| Field                                                                                                            | Type                                                 | Description |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier\_list              | [ IdentifierList](#identifierlist)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_name\_search            | [ WithNameSearch](#withnamesearch)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_type                    | [ WithType](#withtype)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_annotation              | [ WithAnnotation](#withannotation)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_data\_platform            | [ InDataPlatform](#indataplatform)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_folder                    | [ InFolder](#infolder)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_data\_platform\_type    | [ WithDataPlatformType](#withdataplatformtype)       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identities\_of                | [ IdentitiesOf](#identitiesof)                       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_default\_visible\_types | [ WithDefaultVisibleTypes](#withdefaultvisibletypes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query                         | [ AssetSelectionQuery](#assetselectionquery)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.unsupported                   | [ Unsupported](#unsupported)                         | none        |

### DataproductDefinition

(synq.dataproducts.v1.DataproductDefinition)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| parts | [repeated Part](#part) | none        |

### DataproductDefinition.Part

(synq.dataproducts.v1.DataproductDefinition.Part)

| Field                                                                                         | Type                                         | Description     |
| --------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------- |
| id                                                                                            | [ string](#string)                           | part identifier |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier | [ Identifier](#identifier)                   | none            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query      | [ AssetSelectionQuery](#assetselectionquery) | none            |

### Dataproduct

(synq.dataproducts.v1.Dataproduct)

| Field                                                                                                   | Type                                             | Description                                        |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -------------------------------------------------- |
| identifier                                                                                              | [ DataproductIdentifier](#dataproductidentifier) | none                                               |
| definition                                                                                              | [ DataproductDefinition](#dataproductdefinition) | none                                               |
| title                                                                                                   | [ string](#string)                               | none                                               |
| description                                                                                             | [ string](#string)                               | none                                               |
| folder                                                                                                  | [ string](#string)                               | none                                               |
| priority                                                                                                | [ Priority](#priority)                           | none                                               |
| created\_at                                                                                             | [ Timestamp](#timestamp)                         | none                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp)                 | none                                               |
| source                                                                                                  | [ Source](#source)                               | Source for creation and management of dataproduct. |

### AcceptPromptSuggestionRequest

(synq.agent.sre.v1.AcceptPromptSuggestionRequest)

| Field                                                                                                       | Type                       | Description                                                                                                                                                                                                                   |
| ----------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                          | [ string](#string)         | none                                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_edited\_value.edited\_value | [optional string](#string) | If set, the user edited the suggestion before accepting. The server records both `suggested_value` (unchanged) and `applied_value` (= `edited_value`). Hard-capped at 16384 bytes to match the SRE agent prompt field limits. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_note.note                   | [optional string](#string) | Optional short free-text note recorded with the decision. Capped at 512 bytes — it is a one-line annotation for the audit trail, not a place to restate the prompt.                                                           |

### AcceptPromptSuggestionResponse

(synq.agent.sre.v1.AcceptPromptSuggestionResponse)

| Field      | Type                                   | Description |
| ---------- | -------------------------------------- | ----------- |
| suggestion | [ PromptSuggestion](#promptsuggestion) | none        |

### AgentTask

(synq.agent.sre.v1.AgentTask)

| Field                                                                                                     | Type                                   | Description                                                                                                         |
| --------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| task\_id                                                                                                  | [ string](#string)                     | none                                                                                                                |
| created\_at                                                                                               | [ Timestamp](#timestamp)               | none                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deadline\_at.deadline\_at | [optional Timestamp](#timestamp)       | Deadline after which the task should not be processed. If set, the agent should skip or abort tasks past this time. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) task.triage                 | [ TriageTask](#triagetask)             | none                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) task.suggest\_tests         | [ SuggestTestsTask](#suggestteststask) | none                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) task.evaluate               | [ EvaluateTask](#evaluatetask)         | none                                                                                                                |

### AgentTaskResponse

(synq.agent.sre.v1.AgentTaskResponse)

| Field                                                                                                   | Type                                   | Description                        |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------- |
| task\_id                                                                                                | [ string](#string)                     | none                               |
| message                                                                                                 | [ string](#string)                     | Human visible message              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error.error             | [optional string](#string)             | Error message indicating a problem |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) result.evaluate\_response | [ EvaluateResponse](#evaluateresponse) | none                               |

### ConnectRequest

(synq.agent.sre.v1.ConnectRequest)

| Field                                                                                                | Type                                     | Description |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) message.hello          | [ Hello](#hello)                         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) message.task\_response | [ AgentTaskResponse](#agenttaskresponse) | none        |

### ConnectResponse

(synq.agent.sre.v1.ConnectResponse)

| Field | Type                             | Description |
| ----- | -------------------------------- | ----------- |
| tasks | [repeated AgentTask](#agenttask) | none        |

### DismissPromptSuggestionRequest

(synq.agent.sre.v1.DismissPromptSuggestionRequest)

| Field                                                                                         | Type                       | Description                                                                                                                     |
| --------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                            | [ string](#string)         | none                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reason.reason | [optional string](#string) | Optional short free-text reason recorded with the decision. Capped at 512 bytes — a one-line justification for the audit trail. |

### DismissPromptSuggestionResponse

(synq.agent.sre.v1.DismissPromptSuggestionResponse)

| Field      | Type                                   | Description |
| ---------- | -------------------------------------- | ----------- |
| suggestion | [ PromptSuggestion](#promptsuggestion) | none        |

### DwhConnection

(synq.agent.sre.v1.DwhConnection)

| Field                  | Type                                    | Description                                                                      |
| ---------------------- | --------------------------------------- | -------------------------------------------------------------------------------- |
| connection\_id         | [ string](#string)                      | This will be connection in the agent or integration\_id when managed             |
| instance               | [ string](#string)                      | What is the instance of this, e.g. BigQuery project or Databricks workspace      |
| type                   | [ string](#string)                      | Type of the DWH connection                                                       |
| databases              | [repeated string](#string)              | Databases in this instance, this would be BigQuery dataset or Databricks catalog |
| parameters             | [map ParametersEntry](#parametersentry) | Extra parameters present on the connection                                       |
| agent\_access\_enabled | [ bool](#bool)                          | Indicates that Coalesce Quality managed agent can access this connection         |

### DwhConnection.ParametersEntry

(synq.agent.sre.v1.DwhConnection.ParametersEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### EvaluateTask

(synq.agent.sre.v1.EvaluateTask)

Task to evaluate an LLM request on the agent side (for self-hosted agents).

| Field   | Type                                 | Description                                                    |
| ------- | ------------------------------------ | -------------------------------------------------------------- |
| request | [ EvaluateRequest](#evaluaterequest) | The evaluate request to be processed by the agent's local LLM. |

### GetConfigRequest

(synq.agent.sre.v1.GetConfigRequest)

### GetConfigResponse

(synq.agent.sre.v1.GetConfigResponse)

| Field                           | Type                                     | Description                                                                                                                                                                               |
| ------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| workspace                       | [ string](#string)                       | Workspace to which agent is authenticated                                                                                                                                                 |
| triage\_system\_prompt          | [ string](#string)                       | Extra instructions used while triaging and concluding issues.                                                                                                                             |
| tester\_system\_prompt          | [ string](#string)                       | Extra instructions used while suggesting tests.                                                                                                                                           |
| workspace\_system\_prompt       | [ string](#string)                       | Extra instructions describing workspace to which agent is connected.                                                                                                                      |
| synq\_dwh\_connections          | [repeated DwhConnection](#dwhconnection) | Description of all DWH connections/integrations configured in Coalesce Quality. Will indicate to the agent that it can't access all the data sources if agent has no connections enabled. |
| issue\_grouping\_system\_prompt | [ string](#string)                       | Extra instructions describing how issues should be grouped                                                                                                                                |
| issue\_grouping\_disabled       | [ bool](#bool)                           | Indicates that SRE shouldn't group any issues                                                                                                                                             |

### Hello

(synq.agent.sre.v1.Hello)

| Field          | Type               | Description |
| -------------- | ------------------ | ----------- |
| name           | [ string](#string) | none        |
| build\_version | [ string](#string) | none        |

### ListPromptSuggestionsRequest

(synq.agent.sre.v1.ListPromptSuggestionsRequest)

| Field    | Type                                                       | Description                 |
| -------- | ---------------------------------------------------------- | --------------------------- |
| fields   | [repeated PromptField](#promptfield)                       | Empty = include all fields. |
| statuses | [repeated PromptSuggestionStatus](#promptsuggestionstatus) | Empty = pending only.       |

### ListPromptSuggestionsResponse

(synq.agent.sre.v1.ListPromptSuggestionsResponse)

| Field       | Type                                           | Description |
| ----------- | ---------------------------------------------- | ----------- |
| suggestions | [repeated PromptSuggestion](#promptsuggestion) | none        |

### PromptSuggestion

(synq.agent.sre.v1.PromptSuggestion)

| Field            | Type                                               | Description                                                                                                                                                                                                  |
| ---------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id               | [ string](#string)                                 | Server-assigned UUID.                                                                                                                                                                                        |
| workspace        | [ string](#string)                                 | Workspace the suggestion belongs to. Always populated, always matches the caller's workspace for customer-facing reads.                                                                                      |
| field            | [ PromptField](#promptfield)                       | none                                                                                                                                                                                                         |
| status           | [ PromptSuggestionStatus](#promptsuggestionstatus) | none                                                                                                                                                                                                         |
| baseline\_value  | [ string](#string)                                 | Value of the targeted prompt field as it was at the moment the suggestion was produced. Used to detect drift on Accept.                                                                                      |
| suggested\_value | [ string](#string)                                 | Value proposed by the analyser. A full replacement for the targeted prompt; diffed against `baseline_value` in the review UI (see the producer guidance on `RecordPromptSuggestionRequest.suggested_value`). |
| rationale        | [ string](#string)                                 | Short markdown explanation produced by the analyser (≤ 2048 bytes), rendered as a "why" callout above the diff in the review UI.                                                                             |
| evidence\_json   | [ bytes](#bytes)                                   | Opaque JSON encoded by the producer (e.g. references to source entities and incidents). Returned only to producer-scoped callers; customer reads see an empty value.                                         |
| source           | [ string](#string)                                 | Producer identifier + version, e.g. `"offline_audit_v1"`.                                                                                                                                                    |
| produced\_at     | [ Timestamp](#timestamp)                           | none                                                                                                                                                                                                         |
| reviewed\_by     | [ string](#string)                                 | Identity of whoever reviewed the suggestion (derived from the JWT actor). Empty while the suggestion is pending.                                                                                             |
| reviewed\_at     | [ Timestamp](#timestamp)                           | none                                                                                                                                                                                                         |
| decision\_note   | [ string](#string)                                 | Optional short reason on dismiss, or note on accept (≤ 512 bytes). A one-line annotation captured for the audit trail.                                                                                       |
| applied\_value   | [ string](#string)                                 | Value actually written to the prompt field. Differs from `suggested_value` when the user edited before accepting.                                                                                            |

### RecordPromptSuggestionRequest

(synq.agent.sre.v1.RecordPromptSuggestionRequest)

| Field                                                                                                             | Type                         | Description                                                                                                                        |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| field                                                                                                             | [ PromptField](#promptfield) | Targets the workspace from the JWT (back-office producers select the workspace via the standard x-synq-workspace-override header). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suggested\_value.suggested\_value | [optional string](#string)   | Full replacement value for the targeted prompt field, hard-capped at 16384 bytes to match the SRE agent prompt field limit.        |

Explicit-presence (`optional`) so the field can carry an empty string with meaning. An empty value is a deliberate proposal to REMOVE the prompt entirely (clear the override back to the built-in default), distinct from omitting the field. Use this when a customised prompt is judged counter-productive and the workspace is better off with no override at all.

`required` is intentionally NOT set: that rule rejects the empty string, which would make a removal proposal un-expressible. Presence (the field must be set at all) is enforced by the handler via a nil check, so an omitted field is still rejected while an explicit "" is accepted.

Producer guidance — propose the *smallest* change that achieves the goal. Start from the current prompt value and append, delete, or rewrite only the relevant section; do not regenerate the whole prompt from scratch. The reviewer is shown a Current-vs-Suggested diff, so a surgical edit is far easier to approve than a wholesale rewrite that rewords every line.

Keep individual lines short and break content into paragraphs separated by newlines instead of collapsing everything onto one long line. The review UI diffs line by line, so well-broken text produces a readable, minimal diff; a single monster line shows up as one giant replaced block. |
\| rationale | [ string](#string) | Short markdown explanation of why the change is proposed, capped at 2048 bytes. Shown to the reviewer as a "why" callout above the diff, so keep it to a few tight sentences or bullet points — it justifies the change, it does not restate the prompt. As with `suggested_value`, prefer short lines / paragraphs over one long line. |
\| evidence\_json | [ bytes](#bytes) | Opaque JSON: structured pointers the analyser used to produce the suggestion (top entities, sample issues, etc.). Stored verbatim for traceability. |
\| source | [ string](#string) | Producer identifier + version, e.g. `"offline_audit_v1"`. A short slug, not free text — capped at 128 bytes. |

### RecordPromptSuggestionResponse

(synq.agent.sre.v1.RecordPromptSuggestionResponse)

| Field      | Type                                   | Description                                                             |
| ---------- | -------------------------------------- | ----------------------------------------------------------------------- |
| suggestion | [ PromptSuggestion](#promptsuggestion) | Empty when the live baseline already matches `suggested_value` (no-op). |

### SuggestTestsTask

(synq.agent.sre.v1.SuggestTestsTask)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| entity\_ids | [repeated Identifier](#identifier) | none        |

### TriageTask

(synq.agent.sre.v1.TriageTask)

| Field      | Type                       | Description |
| ---------- | -------------------------- | ----------- |
| issue\_ids | [repeated string](#string) | none        |

### BatchLatestConclusionsRequest

(synq.agent.sre.v1.BatchLatestConclusionsRequest)

| Field      | Type                       | Description                                                       |
| ---------- | -------------------------- | ----------------------------------------------------------------- |
| issue\_ids | [repeated string](#string) | List of issue IDs for which latest conclusion should be returned. |

### BatchLatestConclusionsResponse

(synq.agent.sre.v1.BatchLatestConclusionsResponse)

| Field       | Type                                                                 | Description |
| ----------- | -------------------------------------------------------------------- | ----------- |
| conclusions | [repeated IssueConclusionWithEvidence](#issueconclusionwithevidence) | none        |

### BatchTriageStateRequest

(synq.agent.sre.v1.BatchTriageStateRequest)

| Field      | Type                       | Description                                                   |
| ---------- | -------------------------- | ------------------------------------------------------------- |
| issue\_ids | [repeated string](#string) | List of issue IDs for which triage status should be returned. |

### BatchTriageStateResponse

(synq.agent.sre.v1.BatchTriageStateResponse)

| Field  | Type                            | Description |
| ------ | ------------------------------- | ----------- |
| states | [map StatesEntry](#statesentry) | none        |

### BatchTriageStateResponse.StatesEntry

(synq.agent.sre.v1.BatchTriageStateResponse.StatesEntry)

| Field | Type                                   | Description |
| ----- | -------------------------------------- | ----------- |
| key   | [ string](#string)                     | none        |
| value | [ IssueTriageState](#issuetriagestate) | none        |

### ConcludeRequest

(synq.agent.sre.v1.ConcludeRequest)

Request to conclude the triage investigation for one or more issues.

| Field       | Type                                   | Description                                                                                                                                                                             |
| ----------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| session\_id | [ string](#string)                     | Unique identifier of the triaging session, used to group related operations.                                                                                                            |
| conclusion  | [ IssueConclusion](#issueconclusion)   | IssueConclusion represents the final determination made by the LLM agent about an issue. Each conclusion type must be supported by appropriate evidence collected during investigation. |
| evidence    | [repeated EvidenceItem](#evidenceitem) | Collection of evidence items supporting the conclusion. Evidences previously recorded should not be added here.                                                                         |

### ConcludeResponse

(synq.agent.sre.v1.ConcludeResponse)

Response for the Conclude operation. Empty as the operation is fire-and-forget.

### ListTriageStateRequest

(synq.agent.sre.v1.ListTriageStateRequest)

| Field    | Type                                             | Description |
| -------- | ------------------------------------------------ | ----------- |
| statuses | [repeated IssueTriageStatus](#issuetriagestatus) | none        |

### ListTriageStateResponse

(synq.agent.sre.v1.ListTriageStateResponse)

| Field  | Type                                           | Description |
| ------ | ---------------------------------------------- | ----------- |
| states | [repeated IssueTriageState](#issuetriagestate) | none        |

### MarkAsInProgressRequest

(synq.agent.sre.v1.MarkAsInProgressRequest)

| Field      | Type                       | Description                                   |
| ---------- | -------------------------- | --------------------------------------------- |
| issue\_ids | [repeated string](#string) | List of issue IDs for which work has started. |

### MarkAsInProgressResponse

(synq.agent.sre.v1.MarkAsInProgressResponse)

| Field              | Type                       | Description |
| ------------------ | -------------------------- | ----------- |
| marked\_issue\_ids | [repeated string](#string) | none        |

### MarkFailedRequest

(synq.agent.sre.v1.MarkFailedRequest)

| Field          | Type                       | Description                                  |
| -------------- | -------------------------- | -------------------------------------------- |
| issue\_ids     | [repeated string](#string) | List of issue IDs for which work has failed. |
| error\_message | [ string](#string)         | none                                         |

### MarkFailedResponse

(synq.agent.sre.v1.MarkFailedResponse)

| Field              | Type                       | Description |
| ------------------ | -------------------------- | ----------- |
| marked\_issue\_ids | [repeated string](#string) | none        |

### RecordEvidenceRequest

(synq.agent.sre.v1.RecordEvidenceRequest)

Request to record evidence collected during the triage investigation.

| Field       | Type                                   | Description                                                                                                          |
| ----------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| session\_id | [ string](#string)                     | Unique identifier of the triaging session, used to group related operations.                                         |
| evidence    | [repeated EvidenceItem](#evidenceitem) | Collection of structured evidence items collected during the investigation. Must contain at least one evidence item. |

### RecordEvidenceResponse

(synq.agent.sre.v1.RecordEvidenceResponse)

Response for the RecordEvidence operation. Empty as the operation is fire-and-forget.

### IssueTriageState

(synq.agent.sre.v1.IssueTriageState)

IssueTriageState represents the current state of an issue in the SRE agent's investigation workflow.
This state is used to track the progress of automated triage and coordinate between different parts of the system.

| Field                                                                                                             | Type                                             | Description                                                                                                 |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| issue\_id                                                                                                         | [ string](#string)                               | Unique identifier of the issue being investigated by the SRE agent                                          |
| status                                                                                                            | [ IssueTriageStatus](#issuetriagestatus)         | Current status of the issue in the triage workflow, indicating the stage of investigation                   |
| last\_updated\_at                                                                                                 | [ Timestamp](#timestamp)                         | Timestamp indicating when the issue triage state was last updated                                           |
| failure\_category                                                                                                 | [ TriageFailureCategory](#triagefailurecategory) | Structured failure category for the frontend to render appropriate messages, only set when status is FAILED |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_failure\_details.failure\_details | [optional string](#string)                       | Raw error details for debugging, only set when status is FAILED. Visible to Coalesce Quality admins.        |

### EvaluateRequest

(synq.agent.sre.v1.EvaluateRequest)

Request to evaluate an LLM request with structured output.

| Field          | Type                         | Description                                                                                                                           |
| -------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| output\_schema | [ Struct](#struct)           | JSON schema defining the structure of the expected output. The LLM will produce output conforming to this schema.                     |
| system\_prompt | [ string](#string)           | Main system prompt providing instructions to the LLM. This should be constant as it will be cached for efficiency.                    |
| messages       | [repeated Message](#message) | History of messages in the conversation. Must contain at least one message. The last message is used as the final request to the LLM. |
| model\_type    | [ ModelType](#modeltype)     | Type of model to use for the evaluation. Defaults to MODEL\_TYPE\_SUMMARY if not specified or set to MODEL\_TYPE\_UNSPECIFIED.        |

### EvaluateResponse

(synq.agent.sre.v1.EvaluateResponse)

Response from the LLM evaluation.

| Field   | Type                                       | Description                                                       |
| ------- | ------------------------------------------ | ----------------------------------------------------------------- |
| output  | [ Struct](#struct)                         | Structured output from the LLM conforming to the provided schema. |
| metrics | [ LlmResponseMetrics](#llmresponsemetrics) | Metrics about the LLM response.                                   |

### LlmResponseMetrics

(synq.agent.sre.v1.LlmResponseMetrics)

Metrics about the LLM response.

| Field                | Type               | Description                                          |
| -------------------- | ------------------ | ---------------------------------------------------- |
| input\_tokens        | [ int32](#int32)   | Number of tokens in the input prompt and messages.   |
| output\_tokens       | [ int32](#int32)   | Number of tokens in the generated output.            |
| total\_tokens        | [ int32](#int32)   | Total number of tokens used (input + output).        |
| latency\_ms          | [ int64](#int64)   | Time taken to generate the response in milliseconds. |
| model                | [ string](#string) | Model identifier used for the evaluation.            |
| cache\_write\_tokens | [ int32](#int32)   | Number of tokens written to the prompt cache.        |
| cache\_read\_tokens  | [ int32](#int32)   | Number of tokens read from the prompt cache.         |

### Message

(synq.agent.sre.v1.Message)

A single message in the conversation history.

| Field   | Type                         | Description                 |
| ------- | ---------------------------- | --------------------------- |
| role    | [ MessageRole](#messagerole) | Role of the message author. |
| content | [ string](#string)           | Content of the message.     |

### Config

(synq.agent.sre.v1.Config)

Config represents the main configuration for the SRE agent

| Field       | Type                                      | Description                             |
| ----------- | ----------------------------------------- | --------------------------------------- |
| synq        | [ SYNQ](#synq)                            | Coalesce Quality platform configuration |
| connections | [map ConnectionsEntry](#connectionsentry) | Map of connection configurations        |
| llm         | [ LlmConfig](#llmconfig)                  | none                                    |

### Config.ConnectionsEntry

(synq.agent.sre.v1.Config.ConnectionsEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ Connection](#connection) | none        |

### AddToIncidentConclusion

(synq.agent.sre.v1.AddToIncidentConclusion)

AddToIncidentConclusion indicates that the issue should be added to an existing incident.
This conclusion should be supported by evidence showing the connection to the existing incident.

| Field        | Type               | Description                                                     |
| ------------ | ------------------ | --------------------------------------------------------------- |
| incident\_id | [ string](#string) | ID of the existing incident that this issue should be added to. |

### DeclareIncidentConclusion

(synq.agent.sre.v1.DeclareIncidentConclusion)

DeclareIncidentConclusion indicates that the issue requires immediate attention as an incident.
This conclusion should be supported by evidence showing significant impact or risk.

| Field       | Type               | Description                                                                                                                                                     |
| ----------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| title       | [ string](#string) | Suggested title for the incident that will be created. Should be clear and concise to quickly communicate the situation.                                        |
| description | [ string](#string) | Detailed description of the incident situation, including: - What is happening - Potential impact - Affected systems or services - Any immediate actions needed |

### IssueConclusion

(synq.agent.sre.v1.IssueConclusion)

IssueConclusion represents the final determination made by the LLM agent about an issue.
Each conclusion type must be supported by appropriate evidence collected during investigation.

| Field                                                                                                                | Type                                                                 | Description                                                                                                          |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| conclusion\_id                                                                                                       | [ string](#string)                                                   | Unique identifier of the conclusion.                                                                                 |
| issue\_ids                                                                                                           | [repeated string](#string)                                           | List of issue IDs that should be concluded with the specified conclusion.                                            |
| title                                                                                                                | [ string](#string)                                                   | Brief, single-line description summarizing the triage conclusion. Max 5 words.                                       |
| summary                                                                                                              | [ string](#string)                                                   | Detailed markdown-formatted description explaining the conclusion and the reasoning based on all collected evidence. |
| concluded\_at                                                                                                        | [ Timestamp](#timestamp)                                             | Timestamp when the conclusion was made.                                                                              |
| is\_final\_conclusion                                                                                                | [ bool](#bool)                                                       | Indicates that this is final conclusion and SRE agent won't change it unless new evidence is provided to change it.  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.set\_expected               | [ SetExpectedConclusion](#setexpectedconclusion)                     | Conclusion that the issue is expected behavior.                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.set\_no\_action\_needed     | [ SetNoActionNeededConclusion](#setnoactionneededconclusion)         | Conclusion that no action is needed as the issue will resolve itself.                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.set\_fixed                  | [ SetFixedConclusion](#setfixedconclusion)                           | Conclusion that the issue has been fixed and can be closed.                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.declare\_incident           | [ DeclareIncidentConclusion](#declareincidentconclusion)             | Conclusion that the issue requires incident declaration.                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.add\_to\_incident           | [ AddToIncidentConclusion](#addtoincidentconclusion)                 | Conclusion that the issue should be added to an existing incident.                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.request\_for\_human\_review | [ RequestForHumanReviewConclusion](#requestforhumanreviewconclusion) | Conclusion that human review is needed for further investigation.                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) conclusion.unexplained                 | [ UnexplainedConclusion](#unexplainedconclusion)                     | Conclusion that the issue cannot be explained and needs urgent human attention.                                      |

### IssueConclusionWithEvidence

(synq.agent.sre.v1.IssueConclusionWithEvidence)

| Field                                                                                                         | Type                                               | Description                                                                              |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| conclusion                                                                                                    | [ IssueConclusion](#issueconclusion)               | IssueConclusion represents the final determination made by the LLM agent about an issue. |
| original\_issue\_ids                                                                                          | [repeated string](#string)                         | List of issues for which original conclusion was created.                                |
| evidence                                                                                                      | [repeated EvidenceItem](#evidenceitem)             | Collection of structured evidence items collected during the investigation.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user\_feedback.user\_feedback | [optional ConclusionFeedback](#conclusionfeedback) | Optional feedback given by the user on the SRE generated conclusion.                     |

### RequestForHumanReviewConclusion

(synq.agent.sre.v1.RequestForHumanReviewConclusion)

RequestForHumanReviewConclusion indicates that the issue needs human review.
This conclusion should be used when:

* The agent has collected some evidence but cannot make a definitive conclusion
* The issue requires human judgment or expertise
* The impact is unclear or needs human assessment

### SetExpectedConclusion

(synq.agent.sre.v1.SetExpectedConclusion)

SetExpectedConclusion indicates that the issue is expected behavior and no action is needed.
This conclusion should be supported by evidence showing this is normal operation.

### SetFixedConclusion

(synq.agent.sre.v1.SetFixedConclusion)

SetFixedConclusion indicates that the issue has already been resolved and can be closed.
This conclusion should be supported by evidence showing the fix has been applied and verified.

### SetNoActionNeededConclusion

(synq.agent.sre.v1.SetNoActionNeededConclusion)

SetNoActionNeededConclusion indicates that the issue will resolve itself without intervention.
This conclusion should be supported by evidence showing the issue is temporary or self-healing.

### UnexplainedConclusion

(synq.agent.sre.v1.UnexplainedConclusion)

UnexplainedConclusion indicates that the agent was unable to collect sufficient evidence
to understand or explain the issue. This conclusion requires high-priority human review
as it may indicate a serious or complex problem that needs immediate attention.

### AcceptFeedback

(synq.agent.sre.v1.AcceptFeedback)

### ConclusionFeedback

(synq.agent.sre.v1.ConclusionFeedback)

| Field                                                                                           | Type                                   | Description |
| ----------------------------------------------------------------------------------------------- | -------------------------------------- | ----------- |
| user                                                                                            | [ string](#string)                     | none        |
| feedback\_at                                                                                    | [ Timestamp](#timestamp)               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feedback.accept   | [ AcceptFeedback](#acceptfeedback)     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feedback.dismiss  | [ DismissFeedback](#dismissfeedback)   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) feedback.retriage | [ ReTriageFeedback](#retriagefeedback) | none        |

### DismissFeedback

(synq.agent.sre.v1.DismissFeedback)

| Field                                                                                           | Type                       | Description |
| ----------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_comment.comment | [optional string](#string) | none        |

### ReTriageFeedback

(synq.agent.sre.v1.ReTriageFeedback)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| instruction | [ string](#string) | none        |

### BatchSuggestionStatesRequest

(synq.agent.sre.v1.BatchSuggestionStatesRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### BatchSuggestionStatesResponse

(synq.agent.sre.v1.BatchSuggestionStatesResponse)

| Field                    | Type                                                 | Description |
| ------------------------ | ---------------------------------------------------- | ----------- |
| test\_suggestion\_states | [repeated TestSuggestionState](#testsuggestionstate) | none        |

### GetActiveSuggestionStatesForRequest

(synq.agent.sre.v1.GetActiveSuggestionStatesForRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### GetActiveSuggestionStatesForResponse

(synq.agent.sre.v1.GetActiveSuggestionStatesForResponse)

| Field                    | Type                                                 | Description |
| ------------------------ | ---------------------------------------------------- | ----------- |
| test\_suggestion\_states | [repeated TestSuggestionState](#testsuggestionstate) | none        |

### ListSuggestionStatesRequest

(synq.agent.sre.v1.ListSuggestionStatesRequest)

| Field    | Type                                                   | Description |
| -------- | ------------------------------------------------------ | ----------- |
| statuses | [repeated TestSuggestionStatus](#testsuggestionstatus) | none        |

### ListSuggestionStatesResponse

(synq.agent.sre.v1.ListSuggestionStatesResponse)

| Field                    | Type                                                 | Description |
| ------------------------ | ---------------------------------------------------- | ----------- |
| test\_suggestion\_states | [repeated TestSuggestionState](#testsuggestionstate) | none        |

### MarkAsCancelledRequest

(synq.agent.sre.v1.MarkAsCancelledRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsCancelledResponse

(synq.agent.sre.v1.MarkAsCancelledResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsCompletedRequest

(synq.agent.sre.v1.MarkAsCompletedRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsCompletedResponse

(synq.agent.sre.v1.MarkAsCompletedResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsFailedRequest

(synq.agent.sre.v1.MarkAsFailedRequest)

| Field          | Type                               | Description |
| -------------- | ---------------------------------- | ----------- |
| identifiers    | [repeated Identifier](#identifier) | none        |
| error\_message | [ string](#string)                 | none        |

### MarkAsFailedResponse

(synq.agent.sre.v1.MarkAsFailedResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsRunningRequest

(synq.agent.sre.v1.MarkAsRunningRequest)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### MarkAsRunningResponse

(synq.agent.sre.v1.MarkAsRunningResponse)

| Field       | Type                               | Description |
| ----------- | ---------------------------------- | ----------- |
| identifiers | [repeated Identifier](#identifier) | none        |

### SuggestForRequest

(synq.agent.sre.v1.SuggestForRequest)

| Field        | Type                               | Description |
| ------------ | ---------------------------------- | ----------- |
| identifiers  | [repeated Identifier](#identifier) | none        |
| user\_prompt | [ string](#string)                 | none        |

### SuggestForResponse

(synq.agent.sre.v1.SuggestForResponse)

### LlmConfig

(synq.agent.sre.v1.LlmConfig)

| Field                          | Type                     | Description                                            |
| ------------------------------ | ------------------------ | ------------------------------------------------------ |
| openai                         | [ OpenAIApi](#openaiapi) | none                                                   |
| triage\_parallelism            | [ int32](#int32)         | How many Issue triages can run in parallel             |
| test\_suggestions\_parallelism | [ int32](#int32)         | How many test suggestions can be processed in parallel |

### OpenAIApi

(synq.agent.sre.v1.OpenAIApi)

| Field           | Type               | Description                                                                                       |
| --------------- | ------------------ | ------------------------------------------------------------------------------------------------- |
| base\_url       | [ string](#string) | Base URL of the OpenAPI compatible endpoint                                                       |
| api\_key        | [ string](#string) | API key to use for the interaction with the API                                                   |
| thinking\_model | [ string](#string) | Model to use for complex operations                                                               |
| summary\_model  | [ string](#string) | Model to use for simpler operations, e.g. summary generation or improving the format of messages. |

### SubmitFeatureRequestRequest

(synq.agent.sre.v1.SubmitFeatureRequestRequest)

Request to submit a feature request. Should only be used as a last resort when no
existing tool can handle the user's request.

| Field       | Type               | Description                                                                                                                                                                                                                      |
| ----------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| description | [ string](#string) | A clear description of what the user needs, including context about what they were trying to accomplish and why the current tools are insufficient. This should only be populated when no existing tool can fulfill the request. |

### SubmitFeatureRequestResponse

(synq.agent.sre.v1.SubmitFeatureRequestResponse)

Response for the SubmitFeatureRequest operation.

### AnalysisEvidence

(synq.agent.sre.v1.AnalysisEvidence)

AnalysisEvidence contains detailed analysis of the issue based on collected data.
This should only be used as a last resort when no other more specialized evidence types
(history, root cause, related issues, or changes) could be collected.
It provides a comprehensive understanding of the problem and its implications.

| Field        | Type                       | Description                                                                                                                                                  |
| ------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| analysis     | [ string](#string)         | Detailed analysis of the issue, including observations, patterns, and potential implications. This should provide clear reasoning for the conclusions drawn. |
| sql\_queries | [repeated string](#string) | SQL queries which were executed to investigate the issue and collect the evidence.                                                                           |

### ChangeEvidence

(synq.agent.sre.v1.ChangeEvidence)

ChangeEvidence documents recent changes that may have contributed to the issue.
This helps in understanding if the issue is related to recent modifications.

| Field                 | Type                               | Description                                                                                                                        |
| --------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| entities              | [repeated Identifier](#identifier) | List of entities (e.g., services, configurations) that have recently changed and may be related to the current issue.              |
| entities\_synq\_paths | [repeated string](#string)         | Read-only list of paths matching entities. This is a unique path that can be used to access the entity in the Coalesce Quality UI. |
| change\_description   | [ string](#string)                 | Detailed description of the changes that were detected and their potential impact on the current issue.                            |
| change\_ids           | [repeated string](#string)         | When available identifiers of specific change IDs                                                                                  |

### CodeChange

(synq.agent.sre.v1.CodeChange)

CodeChange represents a specific change in a file within a commit.

| Field               | Type               | Description                                      |
| ------------------- | ------------------ | ------------------------------------------------ |
| file\_path          | [ string](#string) | Path to the file that was changed.               |
| start\_line         | [ int32](#int32)   | Starting line number of the change (inclusive).  |
| end\_line           | [ int32](#int32)   | Ending line number of the change (inclusive).    |
| change\_description | [ string](#string) | Description of what was changed in this section. |

### CommitEvidence

(synq.agent.sre.v1.CommitEvidence)

CommitEvidence documents code changes that may have contributed to the issue.
This helps in understanding if the issue is related to recent code modifications.

| Field                   | Type                               | Description                                              |
| ----------------------- | ---------------------------------- | -------------------------------------------------------- |
| change\_id              | [ string](#string)                 | ID of the change that introduced the code modifications. |
| relevant\_code\_changes | [repeated CodeChange](#codechange) | List of relevant code changes in the commit.             |

### DataQueryEvidenceItem

(synq.agent.sre.v1.DataQueryEvidenceItem)

DataQueryEvidenceItem represents a single SQL query and its analysis.

| Field          | Type               | Description                                                                                                                                                                                                                             |
| -------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query\_id      | [ string](#string) | DEPRECATED: Previously held the SQL query string despite being named query\_id. Use the `sql` field instead. Kept for backward compatibility — readers should prefer `sql` when present, falling back to `query_id` for older evidence. |
| data\_analysis | [ string](#string) | Analysis specific to this query's results and their implications.                                                                                                                                                                       |
| sql            | [ string](#string) | The SQL query that was executed.                                                                                                                                                                                                        |

### DataQueryEvidenceV2

(synq.agent.sre.v1.DataQueryEvidenceV2)

DataQueryEvidenceV2 contains SQL queries and their analysis results with query IDs.
This helps in understanding the issue through data analysis with query tracking.

| Field | Type                                                     | Description                                                                     |
| ----- | -------------------------------------------------------- | ------------------------------------------------------------------------------- |
| items | [repeated DataQueryEvidenceItem](#dataqueryevidenceitem) | List of data query evidence items, each containing a query ID and its analysis. |

### EvidenceItem

(synq.agent.sre.v1.EvidenceItem)

EvidenceItem represents a single piece of evidence collected during the triage investigation.
Each evidence item must have a title and one of the specific evidence types.

| Field                                                                                                        | Type                                                         | Description                                                                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| evidence\_id                                                                                                 | [ string](#string)                                           | Unique identifier of the evidence item.                                                                                                                                                                                           |
| issue\_ids                                                                                                   | [repeated string](#string)                                   | List of issue IDs that should be annotated with the provided evidence. Each ID must be a valid UUID.                                                                                                                              |
| title                                                                                                        | [ string](#string)                                           | Brief, descriptive title summarizing the type of evidence collected. This helps in quickly understanding the nature of the evidence.                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.issue\_history        | [ HistoryEvidence](#historyevidence)                         | Historical evidence showing similar past issues that may help understand the current situation.                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.root\_cause           | [ RootCauseEvidence](#rootcauseevidence)                     | Evidence pointing to the likely root cause of the issue.                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.related\_issue        | [ RelatedIssueEvidence](#relatedissueevidence)               | Evidence showing related issues that may be connected to the current investigation.                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.change                | [ ChangeEvidence](#changeevidence)                           | Evidence of recent changes that may have contributed to the issue.                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.analysis              | [ AnalysisEvidence](#analysisevidence)                       | Evidence containing detailed analysis of the issue. DEPRECATED: This type will be gradually retired in favor of more specific evidence types like DataQueryEvidenceV2 and OtherEvidence. Please use those types for new evidence. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.commit                | [ CommitEvidence](#commitevidence)                           | Evidence containing code changes and commit information.                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.data\_query\_v2       | [ DataQueryEvidenceV2](#dataqueryevidencev2)                 | Evidence containing SQL queries and data analysis results with query IDs.                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.other                 | [ OtherEvidence](#otherevidence)                             | Evidence containing general analysis that doesn't fit into other specialized types.                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.impacted\_dataproduct | [ ImpactedDataproductEvidence](#impacteddataproductevidence) | Evidence of impact on important dataproduct                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) evidence.impacted\_owner       | [ ImpactedOwnerEvidence](#impactedownerevidence)             | Evidence of serious impact on business owner                                                                                                                                                                                      |

### HistoryEvidence

(synq.agent.sre.v1.HistoryEvidence)

HistoryEvidence represents historical context from similar past issues.
This helps in understanding if the current issue is recurring or has known patterns.

| Field      | Type                       | Description                                                                                                                               |
| ---------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| issue\_ids | [repeated string](#string) | List of issue IDs that are similar to the currently triaged issue. These historical issues can provide insights into resolution patterns. |

### ImpactedDataproductEvidence

(synq.agent.sre.v1.ImpactedDataproductEvidence)

ImpactedDataproduct documents Data Products that are significantly affected by the issue.
This helps in understanding the business impact and prioritizing resolution efforts.

| Field            | Type                       | Description                                                                                                                                  |
| ---------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| impact\_reason   | [ string](#string)         | Detailed explanation of how and why the dataproduct is impacted by the issue. This should provide clear reasoning for the impact assessment. |
| dataproduct\_ids | [repeated string](#string) | List of dataproduct IDs that are affected by the issue. These IDs should reference existing dataproducts in the system.                      |

### ImpactedOwnerEvidence

(synq.agent.sre.v1.ImpactedOwnerEvidence)

ImpactedOwner documents business owners or teams that are seriously affected by the issue.
This helps in understanding stakeholder impact and communication requirements.

| Field          | Type                       | Description                                                                                                                            |
| -------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| impact\_reason | [ string](#string)         | Detailed explanation of how and why the owner is impacted by the issue. This should provide clear reasoning for the impact assessment. |
| owner\_ids     | [repeated string](#string) | List of owner IDs that are affected by the issue. These IDs should reference existing owners or teams in the system.                   |

### OtherEvidence

(synq.agent.sre.v1.OtherEvidence)

OtherEvidence contains general analysis that doesn't fit into other specialized evidence types.
This should be used when the analysis doesn't involve SQL queries, code changes, or other
specialized evidence types.

| Field    | Type               | Description                                                                                                                                                  |
| -------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| analysis | [ string](#string) | Detailed analysis of the issue, including observations, patterns, and potential implications. This should provide clear reasoning for the conclusions drawn. |

### RelatedIssueEvidence

(synq.agent.sre.v1.RelatedIssueEvidence)

RelatedIssueEvidence identifies other issues that may be connected to the current investigation.
This helps in understanding broader context and potential dependencies.

| Field      | Type                       | Description                                                                                                                                        |
| ---------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| issue\_ids | [repeated string](#string) | List of issue IDs that are related to the current investigation. These issues may be symptoms of the same underlying problem or have dependencies. |

### RootCauseEvidence

(synq.agent.sre.v1.RootCauseEvidence)

RootCauseEvidence identifies the likely root cause of the issue being investigated.
This helps in understanding the fundamental reason behind the problem.

| Field                                                                                               | Type                       | Description                                                                 |
| --------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_issue\_id.issue\_id | [optional string](#string) | ID of the issue that is believed to be the root cause of the current issue. |
| entity\_ids                                                                                         | [repeated string](#string) | IDs of entities that are identified as the root cause.                      |
| execution\_ids                                                                                      | [repeated string](#string) | IDs of executions that are identified as the root cause.                    |
| analysis                                                                                            | [ string](#string)         | Analysis text describing the root cause.                                    |

### TestSuggestionState

(synq.agent.sre.v1.TestSuggestionState)

| Field                                                                                                                 | Type                                           | Description |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------- |
| workspace                                                                                                             | [ string](#string)                             | none        |
| path                                                                                                                  | [ string](#string)                             | none        |
| identifier                                                                                                            | [ Identifier](#identifier)                     | none        |
| status                                                                                                                | [ TestSuggestionStatus](#testsuggestionstatus) | none        |
| created\_at                                                                                                           | [ Timestamp](#timestamp)                       | none        |
| scheduled\_at                                                                                                         | [ Timestamp](#timestamp)                       | none        |
| updated\_at                                                                                                           | [ Timestamp](#timestamp)                       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_user\_prompt.last\_user\_prompt | [optional string](#string)                     | none        |

### AggregateDrillTarget

(synq.agent.recon.v1.AggregateDrillTarget)

AggregateDrillTarget specifies how to extend or drill deeper into aggregate results.

| Field                                                                                                                     | Type                                         | Description                                                                                                                             |
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| groups                                                                                                                    | [repeated GroupTarget](#grouptarget)         | Specific group key values to drill into. When empty, all mismatched groups from the parent audit are drilled.                           |
| additional\_group\_columns                                                                                                | [repeated string](#string)                   | Additional group columns to add to the drill-down hierarchy. Appended after the existing group\_columns from the reconciliation config. |
| additional\_measures                                                                                                      | [repeated Measure](#measure)                 | Additional measures to compute that weren't in the original config.                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_threshold\_overrides.threshold\_overrides | [optional ThresholdConfig](#thresholdconfig) | Override thresholds for this drill pass.                                                                                                |

### BisectionDrillTarget

(synq.agent.recon.v1.BisectionDrillTarget)

BisectionDrillTarget specifies which mismatch leaves to drill deeper into.

| Field                                                                                                                           | Type                                                 | Description                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| segments                                                                                                                        | [repeated SegmentTarget](#segmenttarget)             | Specific segments to drill into. Each segment is identified by its boundaries. When empty, all mismatch leaves from the parent audit are drilled. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_factor.factor                                   | [optional int32](#int32)                             | Override the bisection factor for this drill pass.                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_threshold.threshold                             | [optional int32](#int32)                             | Override the row count threshold for this drill pass.                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_mismatch\_detail\_level.mismatch\_detail\_level | [optional MismatchDetailLevel](#mismatchdetaillevel) | Override the reporting level for this drill pass.                                                                                                 |

### GroupTarget

(synq.agent.recon.v1.GroupTarget)

GroupTarget identifies a specific group to drill into by its key values.

| Field | Type               | Description                                                       |
| ----- | ------------------ | ----------------------------------------------------------------- |
| key   | [ Struct](#struct) | Group key values that identify this group (column name -> value). |

### ReconciliationFilter

(synq.agent.recon.v1.ReconciliationFilter)

ReconciliationFilter controls which reconciliations are included or excluded.

| Field   | Type                       | Description                                                                |
| ------- | -------------------------- | -------------------------------------------------------------------------- |
| include | [repeated string](#string) | Run only these reconciliations (by name). Mutually exclusive with exclude. |
| exclude | [repeated string](#string) | Skip these reconciliations (by name). Mutually exclusive with include.     |

### ReconciliationOverride

(synq.agent.recon.v1.ReconciliationOverride)

ReconciliationOverride provides per-reconciliation instructions for a run.
Used to drill into specific mismatches, adjust config, or extend comparisons.

| Field                                                                                                 | Type                                           | Description                                                                  |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------- |
| name                                                                                                  | [ string](#string)                             | Name of the reconciliation this override applies to.                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.bisection\_drill | [ BisectionDrillTarget](#bisectiondrilltarget) | Drill into specific bisection mismatch leaves from a prior run.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.aggregate\_drill | [ AggregateDrillTarget](#aggregatedrilltarget) | Drill into specific aggregate groups or add new dimensions from a prior run. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) action.rerun            | [ RerunAction](#rerunaction)                   | Re-run the reconciliation from scratch, optionally with config changes.      |

### ReconciliationRunRequest

(synq.agent.recon.v1.ReconciliationRunRequest)

ReconciliationRunRequest describes what to execute in a reconciliation run.
It can start a fresh run, continue from a previous audit, or drill deeper
into specific mismatches found in a prior run.

| Field                                                                                                       | Type                                                       | Description                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite.suite                 | [optional ReconciliationSuite](#reconciliationsuite)       | Suite to execute. Required for fresh runs. When continuing from a parent audit, can be omitted to reuse the parent's suite. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_audit.parent\_audit | [optional AuditLog](#auditlog)                             | Parent audit log to continue from. When set, this run resumes or drills deeper into the parent's results.                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_filter.filter               | [optional ReconciliationFilter](#reconciliationfilter)     | Filter which reconciliations to execute. When empty, all reconciliations in the suite are executed.                         |
| variable\_overrides                                                                                         | [map VariableOverridesEntry](#variableoverridesentry)      | Variable overrides applied on top of suite-level variables.                                                                 |
| overrides                                                                                                   | [repeated ReconciliationOverride](#reconciliationoverride) | Per-reconciliation drill-down and override instructions.                                                                    |

### ReconciliationRunRequest.VariableOverridesEntry

(synq.agent.recon.v1.ReconciliationRunRequest.VariableOverridesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### RerunAction

(synq.agent.recon.v1.RerunAction)

RerunAction re-runs a reconciliation from scratch with optional config overrides.

| Field                                                                                                           | Type                                                 | Description                                |
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_mode.mode                       | [optional ReconciliationMode](#reconciliationmode)   | Override the comparison mode.              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_bisection.bisection             | [optional BisectionConfig](#bisectionconfig)         | Override the bisection configuration.      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reporting.reporting             | [optional ReportingConfig](#reportingconfig)         | Override the reporting configuration.      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_aggregate.aggregate             | [optional AggregateConfig](#aggregateconfig)         | Override the aggregate configuration.      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error\_handling.error\_handling | [optional ErrorHandlingConfig](#errorhandlingconfig) | Override the error handling configuration. |

### SegmentTarget

(synq.agent.recon.v1.SegmentTarget)

SegmentTarget identifies a specific segment to drill into.

| Field                                                                                             | Type                     | Description                                     |
| ------------------------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_min\_key.min\_key | [optional Value](#value) | Minimum key (inclusive). Unset means unbounded. |

The encoding matches SegmentInfo in the audit log, and is deliberately not self-describing: a numeric key appears as a JSON number when it fits the exact double range and as a JSON string above it, while a textual key always appears as a JSON string. A composite key is a JSON list, one element per key column. Only the key column's own type distinguishes the cases, so the runner types these bounds after resolving the query shape. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_max\_key.max\_key | [optional Value](#value) | Maximum key (exclusive). Unset means unbounded. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_time\_bucket.time\_bucket | [optional string](#string) | Time bucket (for time-based segmentation). |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_seed\_depth.seed\_depth | [optional int32](#int32) | Depth this segment sat at in the run being resumed.

Carried so a resumed drill reports true absolute depth and can budget its own depth limit as "this many further levels" rather than re-spending a budget the previous run already consumed. |

### AggregateDrillChild

(synq.agent.recon.v1.AggregateDrillChild)

AggregateDrillChild represents a single divergent group within a drill-down level.

| Field                 | Type                                                 | Description                                      |
| --------------------- | ---------------------------------------------------- | ------------------------------------------------ |
| key                   | [ Struct](#struct)                                   | Group key values (column name -> value).         |
| type                  | [ AggregateDivergenceType](#aggregatedivergencetype) | Type of divergence.                              |
| source\_values        | [map SourceValuesEntry](#sourcevaluesentry)          | Source measure values (measure key -> value).    |
| target\_values        | [map TargetValuesEntry](#targetvaluesentry)          | Target measure values (measure key -> value).    |
| differences           | [ MeasureDifferences](#measuredifferences)           | All difference variants computed for this group. |
| threshold\_evaluation | [ ThresholdEvaluation](#thresholdevaluation)         | Threshold evaluation results for this group.     |
| source\_query         | [ string](#string)                                   | Investigation query for source data.             |
| target\_query         | [ string](#string)                                   | Investigation query for target data.             |
| drill\_down           | [ AggregateDrillNode](#aggregatedrillnode)           | Further drill-down into this divergent group.    |

### AggregateDrillChild.SourceValuesEntry

(synq.agent.recon.v1.AggregateDrillChild.SourceValuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### AggregateDrillChild.TargetValuesEntry

(synq.agent.recon.v1.AggregateDrillChild.TargetValuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### AggregateDrillNode

(synq.agent.recon.v1.AggregateDrillNode)

AggregateDrillNode represents a node in the hierarchical aggregate drill-down tree.

| Field           | Type                                                 | Description                                        |
| --------------- | ---------------------------------------------------- | -------------------------------------------------- |
| level           | [ int32](#int32)                                     | Drill-down level (0-based).                        |
| group\_column   | [ string](#string)                                   | Group column used at this level.                   |
| total\_groups   | [ int32](#int32)                                     | Total groups at this level.                        |
| matched\_groups | [ int32](#int32)                                     | Number of matched groups at this level.            |
| children        | [repeated AggregateDrillChild](#aggregatedrillchild) | Divergent children (mismatched or missing groups). |

### AggregateStageResult

(synq.agent.recon.v1.AggregateStageResult)

AggregateStageResult is the result for an aggregate\_check stage.

| Field                      | Type                                       | Description                                                                                                                                                                                                                                                                                                            |
| -------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| total\_groups              | [ int32](#int32)                           | Top-level (first group column) total group count. With a multi-level drill-down this is the number of distinct first-level groups, NOT the number of leaf groups. Invariant: total\_groups == matched\_groups + divergent\_groups.                                                                                     |
| matched\_groups            | [ int32](#int32)                           | Top-level groups that matched — directly, or because their whole subtree resolved. Same level as total\_groups.                                                                                                                                                                                                        |
| mismatch\_groups           | [ int32](#int32)                           | Leaf-level groups with value differences (deepest drill level). NOT comparable to total\_groups: one divergent top-level group can contain many divergent leaves. For a same-level "X of Y diverged" ratio use divergent\_groups / total\_groups; use these leaf counts for detail.                                    |
| missing\_source            | [ int32](#int32)                           | Leaf-level groups present in target but missing in source.                                                                                                                                                                                                                                                             |
| missing\_target            | [ int32](#int32)                           | Leaf-level groups present in source but missing in target.                                                                                                                                                                                                                                                             |
| match                      | [ bool](#bool)                             | Overall match result.                                                                                                                                                                                                                                                                                                  |
| early\_termination\_reason | [ string](#string)                         | Reason if aggregate check terminated early.                                                                                                                                                                                                                                                                            |
| drill\_down                | [ AggregateDrillNode](#aggregatedrillnode) | Hierarchical drill-down tree for aggregate comparison.                                                                                                                                                                                                                                                                 |
| divergent\_groups          | [ int32](#int32)                           | Top-level groups that diverged (counterpart of matched\_groups, same level as total\_groups). This is the same-level numerator for a "divergent\_groups of total\_groups diverged" summary — unlike the leaf-level mismatch\_groups / missing\_\* counts above, which can exceed total\_groups in a multi-level drill. |

### AuditLog

(synq.agent.recon.v1.AuditLog)

AuditLog is the root structure for a reconciliation run audit.
It captures all operations performed during a synq-recon reconciliation run.

| Field                                                                                                                         | Type                                                              | Description                                                                                                                                                                                                                                                                                   |
| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| version                                                                                                                       | [ string](#string)                                                | Schema version. Must be "1".                                                                                                                                                                                                                                                                  |
| invocation\_id                                                                                                                | [ string](#string)                                                | Unique identifier for this invocation/run.                                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_invocation\_id.parent\_invocation\_id | [optional string](#string)                                        | Invocation ID of the parent run this continues from. Set when this run resumes or drills deeper into a previous run's results.                                                                                                                                                                |
| suite\_name                                                                                                                   | [ string](#string)                                                | Suite machine identifier (promoted from suite.name).                                                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_title.suite\_title                     | [optional string](#string)                                        | Human-readable title (promoted from suite.title).                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_description.suite\_description         | [optional string](#string)                                        | Suite description (promoted from suite.description).                                                                                                                                                                                                                                          |
| started\_at                                                                                                                   | [ Timestamp](#timestamp)                                          | When the run started.                                                                                                                                                                                                                                                                         |
| completed\_at                                                                                                                 | [ Timestamp](#timestamp)                                          | When the run completed.                                                                                                                                                                                                                                                                       |
| duration                                                                                                                      | [ Duration](#duration)                                            | Total run duration.                                                                                                                                                                                                                                                                           |
| status                                                                                                                        | [ AuditOutcome](#auditoutcome)                                    | Overall execution status derived from individual reconciliation outcomes.                                                                                                                                                                                                                     |
| summary                                                                                                                       | [ AuditSummary](#auditsummary)                                    | Aggregated counts derived from individual reconciliation results.                                                                                                                                                                                                                             |
| reconciliations                                                                                                               | [repeated ReconciliationAudit](#reconciliationaudit)              | Audit records for each reconciliation executed.                                                                                                                                                                                                                                               |
| meta                                                                                                                          | [ AuditMeta](#auditmeta)                                          | Build and environment metadata for the synq-recon binary.                                                                                                                                                                                                                                     |
| config\_file                                                                                                                  | [ string](#string)                                                | Path to the configuration file used.                                                                                                                                                                                                                                                          |
| suite                                                                                                                         | [ ReconciliationSuite](#reconciliationsuite)                      | Full suite configuration snapshot as executed. Contains all reconciliation definitions, variables, thresholds, etc.                                                                                                                                                                           |
| resolved\_variables                                                                                                           | [map ResolvedVariablesEntry](#resolvedvariablesentry)             | Resolved template variable values used for query interpolation. Contains the actual values after template evaluation (e.g. "\{\{today - 30d}}" resolved to "2026-01-27").                                                                                                                     |
| warnings                                                                                                                      | [repeated string](#string)                                        | Suite-level warnings detected during config validation.                                                                                                                                                                                                                                       |
| total\_stats                                                                                                                  | [ QueryStats](#querystats)                                        | Aggregated query execution statistics across all queries in this run.                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_environment.environment                       | [optional string](#string)                                        | Name of the environment used for this run. Empty for direct/unmanaged runs where no environment was applied.                                                                                                                                                                                  |
| resolved\_table\_references                                                                                                   | [map ResolvedTableReferencesEntry](#resolvedtablereferencesentry) | Effective table references after environment overrides were applied. Keyed by "reconciliation\_name.source" or "reconciliation\_name.target". Only populated when an environment was active and overrides were applied. The suite field (14) still contains the original pre-override config. |

### AuditLog.ResolvedTableReferencesEntry

(synq.agent.recon.v1.AuditLog.ResolvedTableReferencesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### AuditLog.ResolvedVariablesEntry

(synq.agent.recon.v1.AuditLog.ResolvedVariablesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### AuditMeta

(synq.agent.recon.v1.AuditMeta)

AuditMeta holds build and environment metadata for the synq-recon binary.

| Field       | Type               | Description                                       |
| ----------- | ------------------ | ------------------------------------------------- |
| version     | [ string](#string) | Module version or tag (e.g. v1.2.3).              |
| vcs\_commit | [ string](#string) | VCS revision hash.                                |
| vcs\_time   | [ string](#string) | VCS commit timestamp (RFC3339).                   |
| vcs\_dirty  | [ bool](#bool)     | True if the working tree had uncommitted changes. |
| go\_version | [ string](#string) | Go toolchain version used to build the binary.    |

### AuditSummary

(synq.agent.recon.v1.AuditSummary)

AuditSummary holds aggregated counts derived from individual reconciliation results.

| Field                      | Type                       | Description                                                                                                                                                   |
| -------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| overall\_match             | [ bool](#bool)             | True when every reconciliation matched (exactly or within threshold). False when any reconciliation failed or had an exceeding mismatch.                      |
| total                      | [ int32](#int32)           | Total number of reconciliations executed.                                                                                                                     |
| matched                    | [ int32](#int32)           | Number of reconciliations that completed and matched exactly.                                                                                                 |
| matched\_within\_threshold | [ int32](#int32)           | Number of reconciliations that had differences within configured thresholds. These are warning-level outcomes — data differs but within acceptable tolerance. |
| mismatched                 | [ int32](#int32)           | Number of reconciliations that completed but found data differences exceeding thresholds (or no thresholds configured).                                       |
| failed                     | [ int32](#int32)           | Number of reconciliations that encountered an infrastructure error.                                                                                           |
| errors                     | [repeated string](#string) | Error messages collected from failed reconciliations.                                                                                                         |

### BisectionStageResult

(synq.agent.recon.v1.BisectionStageResult)

BisectionStageResult is the result for a bisection\_drill stage.

| Field                      | Type                                               | Description                                                 |
| -------------------------- | -------------------------------------------------- | ----------------------------------------------------------- |
| total\_segments            | [ int32](#int32)                                   | Total number of segments processed.                         |
| mismatch\_count            | [ int32](#int32)                                   | Number of mismatched leaf segments.                         |
| error\_count               | [ int32](#int32)                                   | Number of segments that encountered errors.                 |
| max\_depth                 | [ int32](#int32)                                   | Maximum depth reached in the segment tree.                  |
| early\_termination\_reason | [ string](#string)                                 | Reason if bisection terminated early.                       |
| statistics                 | [ BisectionStatistics](#bisectionstatistics)       | Detailed tree statistics.                                   |
| mismatch\_leaves           | [repeated MismatchLeafDetail](#mismatchleafdetail) | Details for each mismatched leaf segment.                   |
| investigation\_queries     | [repeated InvestigationQuery](#investigationquery) | Merged investigation queries for adjacent mismatch regions. |

### BisectionStatistics

(synq.agent.recon.v1.BisectionStatistics)

BisectionStatistics holds statistics about the bisection segment tree.

| Field                  | Type                                                  | Description                                        |
| ---------------------- | ----------------------------------------------------- | -------------------------------------------------- |
| total\_nodes           | [ int32](#int32)                                      | none                                               |
| matched\_nodes         | [ int32](#int32)                                      | none                                               |
| mismatched\_nodes      | [ int32](#int32)                                      | none                                               |
| leaf\_nodes            | [ int32](#int32)                                      | none                                               |
| intermediate\_nodes    | [ int32](#int32)                                      | none                                               |
| matched\_leaves        | [ int32](#int32)                                      | none                                               |
| mismatched\_leaves     | [ int32](#int32)                                      | none                                               |
| depth\_distribution    | [map DepthDistributionEntry](#depthdistributionentry) | Number of segments at each depth level.            |
| mismatch\_by\_depth    | [map MismatchByDepthEntry](#mismatchbydepthentry)     | Number of mismatched segments at each depth level. |
| per\_depth             | [map PerDepthEntry](#perdepthentry)                   | Detailed per-depth statistics.                     |
| total\_source\_rows    | [ int64](#int64)                                      | none                                               |
| total\_target\_rows    | [ int64](#int64)                                      | none                                               |
| mismatch\_source\_rows | [ int64](#int64)                                      | none                                               |
| mismatch\_target\_rows | [ int64](#int64)                                      | none                                               |

### BisectionStatistics.DepthDistributionEntry

(synq.agent.recon.v1.BisectionStatistics.DepthDistributionEntry)

| Field | Type             | Description |
| ----- | ---------------- | ----------- |
| key   | [ int32](#int32) | none        |
| value | [ int32](#int32) | none        |

### BisectionStatistics.MismatchByDepthEntry

(synq.agent.recon.v1.BisectionStatistics.MismatchByDepthEntry)

| Field | Type             | Description |
| ----- | ---------------- | ----------- |
| key   | [ int32](#int32) | none        |
| value | [ int32](#int32) | none        |

### BisectionStatistics.PerDepthEntry

(synq.agent.recon.v1.BisectionStatistics.PerDepthEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ DepthStats](#depthstats) | none        |

### CutoffResult

(synq.agent.recon.v1.CutoffResult)

CutoffResult captures the runtime resolution of a cutoff filter.
Stored in the audit log to provide full transparency into how the cutoff
was derived and applied.

| Field             | Type               | Description                                                                                                   |
| ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------- |
| source\_watermark | [ string](#string) | Watermark value derived from the source dataset. Empty when cutoff was configured for target-only derivation. |
| target\_watermark | [ string](#string) | Watermark value derived from the target dataset. Empty when cutoff was configured for source-only derivation. |
| cutoff\_value     | [ string](#string) | Final cutoff value after combining source/target watermarks and applying truncation and offset transforms.    |
| source\_where     | [ string](#string) | WHERE clause applied to the source query.                                                                     |
| target\_where     | [ string](#string) | WHERE clause applied to the target query.                                                                     |

### DatasetInfo

(synq.agent.recon.v1.DatasetInfo)

DatasetInfo captures runtime information about a source or target dataset.

| Field      | Type               | Description                                                          |
| ---------- | ------------------ | -------------------------------------------------------------------- |
| connection | [ string](#string) | Connection name used.                                                |
| dialect    | [ string](#string) | Database dialect detected at runtime (e.g. "postgres", "snowflake"). |
| query      | [ string](#string) | Resolved SQL query actually executed (after variable interpolation). |

### DepthStats

(synq.agent.recon.v1.DepthStats)

DepthStats holds per-depth-level statistics for the bisection tree.

| Field                | Type             | Description |
| -------------------- | ---------------- | ----------- |
| total\_rows          | [ int64](#int64) | none        |
| mismatched\_rows     | [ int64](#int64) | none        |
| segments             | [ int32](#int32) | none        |
| mismatched\_segments | [ int32](#int32) | none        |

### DiffQueries

(synq.agent.recon.v1.DiffQueries)

DiffQueries holds investigation queries for a mismatch leaf.

| Field        | Type               | Description                                                |
| ------------ | ------------------ | ---------------------------------------------------------- |
| source\_rows | [ string](#string) | SQL query to retrieve source rows in the mismatch segment. |
| target\_rows | [ string](#string) | SQL query to retrieve target rows in the mismatch segment. |

### InvestigationQuery

(synq.agent.recon.v1.InvestigationQuery)

InvestigationQuery represents a merged diff query covering one or more
adjacent mismatch leaves.

| Field           | Type               | Description                                      |
| --------------- | ------------------ | ------------------------------------------------ |
| min\_key        | [ Value](#value)   | Minimum key (inclusive).                         |
| max\_key        | [ Value](#value)   | Maximum key (exclusive).                         |
| time\_bucket    | [ string](#string) | Time bucket label (for time-based segmentation). |
| leaves\_covered | [ int32](#int32)   | Number of mismatch leaves covered by this query. |
| source\_query   | [ string](#string) | SQL query to retrieve source rows.               |
| target\_query   | [ string](#string) | SQL query to retrieve target rows.               |

### MeasureDifferences

(synq.agent.recon.v1.MeasureDifferences)

MeasureDifferences holds all difference variants for measure comparisons.

| Field           | Type                                        | Description                                                                         |                 |     |        |   |        |    |
| --------------- | ------------------------------------------- | ----------------------------------------------------------------------------------- | --------------- | --- | ------ | - | ------ | -- |
| relative        | [map RelativeEntry](#relativeentry)         | Relative difference per measure (target - source). Positive means target is larger. |                 |     |        |   |        |    |
| absolute        | [map AbsoluteEntry](#absoluteentry)         | Absolute difference per measure:                                                    | target - source | .   |        |   |        |    |
| pct\_vs\_source | [map PctVsSourceEntry](#pctvssourceentry)   | Percentage difference relative to source:                                           | diff            | /   | source | . |        |    |
| pct\_vs\_target | [map PctVsTargetEntry](#pctvstargetentry)   | Percentage difference relative to target:                                           | diff            | /   | target | . |        |    |
| pct\_symmetric  | [map PctSymmetricEntry](#pctsymmetricentry) | Symmetric percentage difference: 2\*                                                | diff            | / ( | source | + | target | ). |

### MeasureDifferences.AbsoluteEntry

(synq.agent.recon.v1.MeasureDifferences.AbsoluteEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### MeasureDifferences.PctSymmetricEntry

(synq.agent.recon.v1.MeasureDifferences.PctSymmetricEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### MeasureDifferences.PctVsSourceEntry

(synq.agent.recon.v1.MeasureDifferences.PctVsSourceEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### MeasureDifferences.PctVsTargetEntry

(synq.agent.recon.v1.MeasureDifferences.PctVsTargetEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### MeasureDifferences.RelativeEntry

(synq.agent.recon.v1.MeasureDifferences.RelativeEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ double](#double) | none        |

### MeasureVerdict

(synq.agent.recon.v1.MeasureVerdict)

MeasureVerdict captures the threshold evaluation result for a single measure.

| Field                        | Type                                           | Description                                                                      |
| ---------------------------- | ---------------------------------------------- | -------------------------------------------------------------------------------- |
| exceeded                     | [ bool](#bool)                                 | True when the measure difference exceeds all configured thresholds.              |
| reason                       | [ MeasureVerdictReason](#measureverdictreason) | Explains why the measure was considered within or outside thresholds.            |
| effective\_absolute          | [ double](#double)                             | Absolute threshold applied to this measure (may differ via per\_measure config). |
| effective\_percentage        | [ double](#double)                             | Percentage threshold applied to this measure.                                    |
| effective\_percentage\_basis | [ string](#string)                             | Percentage basis applied to this measure, as a PercentageBasis value name.       |

### MismatchLeafDetail

(synq.agent.recon.v1.MismatchLeafDetail)

MismatchLeafDetail holds detailed information about a single mismatch leaf.

| Field                | Type                                                 | Description                                                                              |
| -------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| segment              | [ SegmentInfo](#segmentinfo)                         | Segment boundaries.                                                                      |
| source\_count        | [ int64](#int64)                                     | none                                                                                     |
| target\_count        | [ int64](#int64)                                     | none                                                                                     |
| source\_checksum     | [ int64](#int64)                                     | none                                                                                     |
| target\_checksum     | [ int64](#int64)                                     | none                                                                                     |
| count\_difference    | [ int64](#int64)                                     | none                                                                                     |
| mismatch\_types      | [repeated SegmentMismatchType](#segmentmismatchtype) | Types of mismatch detected.                                                              |
| drill\_stop\_reason  | [ DrillStopReason](#drillstopreason)                 | Why bisection stopped at this leaf.                                                      |
| diff\_queries        | [ DiffQueries](#diffqueries)                         | Investigation queries to inspect this mismatch.                                          |
| row\_mismatches      | [repeated RowMismatchDetail](#rowmismatchdetail)     | Per-row mismatch details (when reporting level allows).                                  |
| row\_mismatch\_count | [ int32](#int32)                                     | Total number of row mismatches (may exceed row\_mismatches length due to sample\_limit). |

### Normalization

(synq.agent.recon.v1.Normalization)

Normalization records the column expressions used after cross-DB type alignment.

| Field           | Type                       | Description                                    |
| --------------- | -------------------------- | ---------------------------------------------- |
| source\_columns | [repeated string](#string) | Source column expressions after normalization. |
| target\_columns | [repeated string](#string) | Target column expressions after normalization. |

### QueryRecord

(synq.agent.recon.v1.QueryRecord)

QueryRecord captures a single SQL query execution.

| Field          | Type                       | Description                                              |
| -------------- | -------------------------- | -------------------------------------------------------- |
| id             | [ string](#string)         | Unique query identifier within this run.                 |
| role           | [ QueryRole](#queryrole)   | Whether this query ran against source or target.         |
| connection     | [ string](#string)         | Connection name used.                                    |
| dialect        | [ string](#string)         | Database dialect.                                        |
| sql            | [ string](#string)         | SQL query text.                                          |
| started\_at    | [ Timestamp](#timestamp)   | When the query started.                                  |
| duration       | [ Duration](#duration)     | Query execution duration.                                |
| rows\_returned | [ int32](#int32)           | Number of result rows returned.                          |
| error          | [ string](#string)         | Error message if the query failed.                       |
| retry\_attempt | [ int32](#int32)           | Retry attempt number (0 for first attempt).              |
| stats          | [ QueryStats](#querystats) | Execution statistics collected from the database driver. |

### QueryStats

(synq.agent.recon.v1.QueryStats)

QueryStats holds execution statistics collected from the database driver.
Fields are optional — absent means the metric is not available for the driver.

| Field                                                                                                                 | Type                     | Description                                                                                              |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------- |
| query\_id                                                                                                             | [ string](#string)       | Database-assigned query identifier for auditing. Available for BigQuery (job ID), Snowflake, ClickHouse. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_rows\_read.rows\_read                 | [optional int64](#int64) | Number of rows read/scanned by the query engine.                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_bytes\_read.bytes\_read               | [optional int64](#int64) | Number of bytes read/scanned by the query engine.                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_rows\_produced.rows\_produced         | [optional int64](#int64) | Number of result rows returned to the caller.                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cache\_hit.cache\_hit                 | [optional bool](#bool)   | Whether the query result was served from cache.                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_bytes\_billed.bytes\_billed           | [optional int64](#int64) | Number of bytes billed (BigQuery).                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_slot\_millis.slot\_millis             | [optional int64](#int64) | Slot time consumed (BigQuery).                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_blocks.blocks                         | [optional int64](#int64) | Number of data blocks read (ClickHouse).                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_completed\_splits.completed\_splits   | [optional int64](#int64) | Number of completed splits (Trino).                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cpu\_time\_millis.cpu\_time\_millis   | [optional int64](#int64) | CPU time consumed (Trino).                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_wall\_time\_millis.wall\_time\_millis | [optional int64](#int64) | Wall time reported by the engine (Trino).                                                                |

### QuickCheckStageResult

(synq.agent.recon.v1.QuickCheckStageResult)

QuickCheckStageResult is the result for a quick\_check stage.

| Field             | Type               | Description |
| ----------------- | ------------------ | ----------- |
| source\_count     | [ int64](#int64)   | none        |
| target\_count     | [ int64](#int64)   | none        |
| source\_checksum  | [ int64](#int64)   | none        |
| target\_checksum  | [ int64](#int64)   | none        |
| match             | [ bool](#bool)     | none        |
| count\_difference | [ int64](#int64)   | none        |
| error             | [ string](#string) | none        |

### ReconciliationAudit

(synq.agent.recon.v1.ReconciliationAudit)

ReconciliationAudit captures the configuration and runtime execution data
for a single reconciliation.

| Field                                                                                                         | Type                                             | Description                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| reconciliation                                                                                                | [ Reconciliation](#reconciliation)               | The reconciliation configuration as executed.                                                                                                                                     |
| source                                                                                                        | [ DatasetInfo](#datasetinfo)                     | Runtime dataset information (resolved queries, detected dialects).                                                                                                                |
| target                                                                                                        | [ DatasetInfo](#datasetinfo)                     | none                                                                                                                                                                              |
| original\_source\_query                                                                                       | [ string](#string)                               | Source query before variable interpolation (differs from suite query when variables are used).                                                                                    |
| original\_target\_query                                                                                       | [ string](#string)                               | Target query before variable interpolation.                                                                                                                                       |
| columns                                                                                                       | [repeated string](#string)                       | Column names discovered at runtime via QueryShape.                                                                                                                                |
| normalization                                                                                                 | [ Normalization](#normalization)                 | Column normalization expressions applied after cross-DB type alignment.                                                                                                           |
| stages                                                                                                        | [repeated StageAudit](#stageaudit)               | Execution stages (quick\_check, bisection\_drill, aggregate\_check).                                                                                                              |
| warnings                                                                                                      | [repeated string](#string)                       | Per-reconciliation warnings.                                                                                                                                                      |
| status                                                                                                        | [ ReconciliationOutcome](#reconciliationoutcome) | Outcome status of this reconciliation. Distinguishes infrastructure errors from data mismatches and threshold-based outcomes.                                                     |
| overall\_match                                                                                                | [ bool](#bool)                                   | Whether source and target matched overall. True when data matched exactly or differences were within configured thresholds.                                                       |
| error                                                                                                         | [ string](#string)                               | Error message if the reconciliation failed due to an infrastructure error.                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cutoff\_result.cutoff\_result | [optional CutoffResult](#cutoffresult)           | Cutoff resolution details (when cutoff was configured). Captures the derived watermark values, final cutoff, and WHERE clauses so the run can be fully understood and reproduced. |

### RowMismatchAudit

(synq.agent.recon.v1.RowMismatchAudit)

RowMismatchAudit captures a single row-level mismatch in the segment tree.

| Field                                                                                                               | Type                                        | Description                                     |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ----------------------------------------------- |
| pk                                                                                                                  | [ Value](#value)                            | Primary key value.                              |
| type                                                                                                                | [ RowMismatchType](#rowmismatchtype)        | Type of row mismatch.                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source\_row\_hash.source\_row\_hash | [optional int64](#int64)                    | Source row hash (when available).               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_target\_row\_hash.target\_row\_hash | [optional int64](#int64)                    | Target row hash (when available).               |
| source\_values                                                                                                      | [map SourceValuesEntry](#sourcevaluesentry) | Source column values (detailed reporting only). |
| target\_values                                                                                                      | [map TargetValuesEntry](#targetvaluesentry) | Target column values (detailed reporting only). |

### RowMismatchAudit.SourceValuesEntry

(synq.agent.recon.v1.RowMismatchAudit.SourceValuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### RowMismatchAudit.TargetValuesEntry

(synq.agent.recon.v1.RowMismatchAudit.TargetValuesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### RowMismatchDetail

(synq.agent.recon.v1.RowMismatchDetail)

RowMismatchDetail holds per-row mismatch detail.

| Field                                                                                                               | Type                                 | Description                       |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | --------------------------------- |
| pk                                                                                                                  | [ Value](#value)                     | Primary key value.                |
| type                                                                                                                | [ RowMismatchType](#rowmismatchtype) | Type of row mismatch.             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source\_row\_hash.source\_row\_hash | [optional int64](#int64)             | Source row hash (when available). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_target\_row\_hash.target\_row\_hash | [optional int64](#int64)             | Target row hash (when available). |

### SegmentAuditNode

(synq.agent.recon.v1.SegmentAuditNode)

SegmentAuditNode represents a node in the bisection segment tree.

| Field                       | Type                                           | Description                                                               |
| --------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------- |
| segment                     | [ SegmentInfo](#segmentinfo)                   | Segment boundaries.                                                       |
| source\_count               | [ int64](#int64)                               | none                                                                      |
| target\_count               | [ int64](#int64)                               | none                                                                      |
| source\_checksum            | [ int64](#int64)                               | none                                                                      |
| target\_checksum            | [ int64](#int64)                               | none                                                                      |
| match                       | [ bool](#bool)                                 | Whether source and target matched for this segment.                       |
| is\_leaf                    | [ bool](#bool)                                 | Whether this is a leaf node (no further splitting).                       |
| drill\_stop\_reason         | [ DrillStopReason](#drillstopreason)           | Why bisection stopped at this node.                                       |
| mismatch\_rows\_in\_subtree | [ int64](#int64)                               | Sum of mismatched rows in this subtree.                                   |
| total\_rows\_in\_subtree    | [ int64](#int64)                               | Sum of all rows in this subtree.                                          |
| query\_ids                  | [repeated string](#string)                     | References to QueryRecord.id values for queries that populated this node. |
| children                    | [repeated SegmentAuditNode](#segmentauditnode) | Child segments (empty for leaf nodes).                                    |
| row\_mismatches             | [repeated RowMismatchAudit](#rowmismatchaudit) | Row-level mismatches (only for leaf nodes with detailed reporting).       |

### SegmentInfo

(synq.agent.recon.v1.SegmentInfo)

SegmentInfo identifies a key range segment.

| Field        | Type               | Description                                      |
| ------------ | ------------------ | ------------------------------------------------ |
| min\_key     | [ Value](#value)   | Minimum key (inclusive). Unset means unbounded.  |
| max\_key     | [ Value](#value)   | Maximum key (exclusive). Unset means unbounded.  |
| depth        | [ int32](#int32)   | Depth in the bisection tree.                     |
| index        | [ int32](#int32)   | Index within the depth level.                    |
| time\_bucket | [ string](#string) | Time bucket label (for time-based segmentation). |

### StageAudit

(synq.agent.recon.v1.StageAudit)

StageAudit captures one reconciliation stage execution.

| Field                                                                                                     | Type                                             | Description                                               |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------- |
| stage                                                                                                     | [ StageType](#stagetype)                         | Stage type.                                               |
| started\_at                                                                                               | [ Timestamp](#timestamp)                         | When the stage started.                                   |
| completed\_at                                                                                             | [ Timestamp](#timestamp)                         | When the stage completed.                                 |
| duration                                                                                                  | [ Duration](#duration)                           | Stage duration.                                           |
| queries                                                                                                   | [repeated QueryRecord](#queryrecord)             | SQL queries executed during this stage.                   |
| segment\_tree                                                                                             | [ SegmentAuditNode](#segmentauditnode)           | Bisection segment tree (only for bisection\_drill stage). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) result.quick\_check\_result | [ QuickCheckStageResult](#quickcheckstageresult) | Result for quick\_check stage.                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) result.bisection\_result    | [ BisectionStageResult](#bisectionstageresult)   | Result for bisection\_drill stage.                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) result.aggregate\_result    | [ AggregateStageResult](#aggregatestageresult)   | Result for aggregate\_check stage.                        |

### ThresholdEvaluation

(synq.agent.recon.v1.ThresholdEvaluation)

ThresholdEvaluation captures the effective thresholds applied and per-measure verdicts.

| Field                 | Type                                | Description                                                         |
| --------------------- | ----------------------------------- | ------------------------------------------------------------------- |
| absolute\_threshold   | [ double](#double)                  | Configured maximum absolute difference, or 0 if not set.            |
| percentage\_threshold | [ double](#double)                  | Configured maximum percentage difference, or 0 if not set.          |
| percentage\_basis     | [ string](#string)                  | Which percentage formula was used, as a PercentageBasis value name. |
| measures              | [map MeasuresEntry](#measuresentry) | Per-measure threshold evaluation results.                           |

### ThresholdEvaluation.MeasuresEntry

(synq.agent.recon.v1.ThresholdEvaluation.MeasuresEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ MeasureVerdict](#measureverdict) | none        |

### ColumnThresholdOverride

(synq.agent.recon.v1.ColumnThresholdOverride)

ColumnThresholdOverride associates threshold overrides with a specific
group\_column level in the aggregate drill-down hierarchy.

| Field      | Type                                 | Description                                                                                                                                                                                            |
| ---------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| column     | [ string](#string)                   | Group column name this override applies to. Must match one of the group\_columns in the AggregateConfig.                                                                                               |
| thresholds | [ ThresholdConfig](#thresholdconfig) | Threshold overrides for this group column level. Values here override the parent ThresholdConfig for reconciliation groups at this drill-down level. May include per\_measure for further specificity. |

### MeasureThresholdOverride

(synq.agent.recon.v1.MeasureThresholdOverride)

MeasureThresholdOverride associates threshold overrides with a specific
measure (aggregate function + column combination).

| Field      | Type                                     | Description                                                                                                                                          |
| ---------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| function   | [ AggregateFunction](#aggregatefunction) | Aggregate function this override applies to.                                                                                                         |
| column     | [ string](#string)                       | Column name this override applies to. Together with function, forms the measure key (e.g., SUM + "amount" = "SUM(amount)").                          |
| thresholds | [ ThresholdConfig](#thresholdconfig)     | Threshold overrides for this specific measure. Values here override the parent ThresholdConfig (and any per\_column override) for this measure only. |

### ThresholdConfig

(synq.agent.recon.v1.ThresholdConfig)

ThresholdConfig defines tolerance thresholds for aggregate comparisons.
A difference is reported as a mismatch only when it exceeds ALL configured
thresholds (AND logic: both absolute AND percentage must be exceeded).

Thresholds can be overridden at finer granularity:

* per\_column: override thresholds for a specific group\_column drill-down level.
* per\_measure: override thresholds for a specific measure (e.g., "SUM(amount)").
* Nesting: per\_column entries may contain per\_measure overrides (most specific wins).

When no thresholds are configured at any level, exact match is required.

| Field                                                                                                 | Type                                                           | Description                                                                                                                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_absolute.absolute     | [optional double](#double)                                     | Maximum allowed absolute difference per measure. When set, differences ≤ this value are considered within tolerance. Example: absolute = 0.01 accepts sub-cent rounding differences.                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_percentage.percentage | [optional double](#double)                                     | Maximum allowed percentage difference per measure. Expressed as a decimal fraction: 0.1 = 10%, 0.01 = 1%. The formula used depends on percentage\_basis. When set, differences ≤ this percentage are considered within tolerance.                                                    |
| percentage\_basis                                                                                     | [ PercentageBasis](#percentagebasis)                           | Which percentage formula to use for threshold evaluation. Only relevant when percentage is set.                                                                                                                                                                                      |
| per\_column                                                                                           | [repeated ColumnThresholdOverride](#columnthresholdoverride)   | Per group\_column level threshold overrides. Allows different tolerance for different levels of the drill-down hierarchy. For example, tighter thresholds at the city level than at the region level. Entries may themselves contain per\_measure overrides for maximum specificity. |
| per\_measure                                                                                          | [repeated MeasureThresholdOverride](#measurethresholdoverride) | Per measure threshold overrides. Allows different tolerance for different measures within the same reconciliation. For example, allow 1% tolerance for SUM(amount) but require exact COUNT match.                                                                                    |

### ReconciliationRunState

(synq.agent.recon.v1.ReconciliationRunState)

ReconciliationRunState describes the lifecycle of a single reconciliation
run. Returned by RunStateService.

| Field                                                                                                             | Type                                                                   | Description                                                                                                                                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                         | [ string](#string)                                                     | Suite identifier this run belongs to. For managed suites this is the suite\_name; for ad-hoc suites this is the generated UUID.                                                                                                                                                                                        |
| deployment\_id                                                                                                    | [ string](#string)                                                     | Deployment identifier (UUIDv7) if the run belongs to a promoted deployment. Empty for ad-hoc and legacy managed-suite runs.                                                                                                                                                                                            |
| run\_id                                                                                                           | [ string](#string)                                                     | Stable opaque identifier of this specific run occurrence (UUIDv7).                                                                                                                                                                                                                                                     |
| status                                                                                                            | [ ReconciliationRunStatus](#reconciliationrunstatus)                   | none                                                                                                                                                                                                                                                                                                                   |
| trigger                                                                                                           | [ ReconciliationRunTrigger](#reconciliationruntrigger)                 | none                                                                                                                                                                                                                                                                                                                   |
| scheduled\_at                                                                                                     | [ Timestamp](#timestamp)                                               | When this run was scheduled to start (cron occurrence time, or now() for ad-hoc).                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_at.started\_at           | [optional Timestamp](#timestamp)                                       | When the worker actually picked up the run.                                                                                                                                                                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_finished\_at.finished\_at         | [optional Timestamp](#timestamp)                                       | When the run reached a terminal status (SUCCEEDED / FAILED / CANCELLED).                                                                                                                                                                                                                                               |
| last\_updated\_at                                                                                                 | [ Timestamp](#timestamp)                                               | Last time this row was updated.                                                                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor                       | [optional Actor](#actor)                                               | Actor that initiated the run (user or system). Populated for ADHOC and API triggers.                                                                                                                                                                                                                                   |
| failure\_category                                                                                                 | [ ReconciliationRunFailureCategory](#reconciliationrunfailurecategory) | Set only when status is FAILED.                                                                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_failure\_details.failure\_details | [optional string](#string)                                             | Raw failure detail string. Set only when status is FAILED.                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_invocation\_id.invocation\_id     | [optional string](#string)                                             | Identifier of the audit log this run produced. Empty when the run failed before the worker emitted an audit log (e.g. binding-resolution failure on a misconfigured deployment, or the run was cancelled). When set, pass to AuditLogService.GetAuditLog to retrieve the full per-reconciliation results for this run. |

### CaseCategories

(synq.agent.recon.v1.CaseCategories)

CaseCategories declares the categories for a single reconciliation case,
overriding what the deployment declares. The two dimensions are independent, so
a case can override one and inherit the other.

Per field:

* absent                : inherit the deployment's declaration
* present, empty string : declare nothing for this case, even when the
  deployment declares a value — the category then
  falls to the reserved annotation or the workspace's
  categorisation rules
* present, non-empty    : set this case's category

An entry with neither field set therefore means the same as no entry at all, and
is dropped rather than stored.

| Field                                                                                                                     | Type                       | Description |
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category                         | [optional string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | none        |

### ConnectionMapping

(synq.agent.recon.v1.ConnectionMapping)

Maps a reconciliation-connection name (as referenced in the suite config)
to a concrete SYNQ integration. Used at execution time to resolve DWH
credentials.

Two credential planes are defined on the wire:

* integration\_id: workspace-level integration. Required for deployment
  paths and acceptable for adhoc submission when the caller has
  SCOPE\_INTEGRATION\_EDIT.
* user\_integration\_id: per-user OAuth-backed integration. Accepted
  only on adhoc submission, and only when a user identity is present
  in the calling context. Deployment paths reject this branch
  unconditionally — scheduled runs must be able to fire without any
  particular user being available, so they always run with workspace
  credentials.

Wire-compatible with the previous shape: the original `integration_id`
(field 2) is preserved as one branch of the oneof so existing serialized
rows decode unchanged.

| Field                                                                                                      | Type               | Description                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| connection\_name                                                                                           | [ string](#string) | Connection name as it appears in the suite config (e.g. ReconciliationSuite.reconciliations\[].source.connection).              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) source.integration\_id       | [ string](#string) | Workspace-level integration (credentials owned by the workspace).                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) source.user\_integration\_id | [ string](#string) | Per-user integration ID (user-level credentials). Server requires a user identity in the calling context to accept this branch. |

### ConnectionResolutionFailure

(synq.agent.recon.v1.ConnectionResolutionFailure)

Error-details payload attached to FAILED\_PRECONDITION when a recon
request cannot be honoured because one or more suite connection names
have no usable mapping. The caller should prompt the user to bind every
listed connection and retry.

| Field      | Type                                                   | Description |
| ---------- | ------------------------------------------------------ | ----------- |
| unresolved | [repeated UnresolvedConnection](#unresolvedconnection) | none        |

### GetSuiteDeploymentRequest

(synq.agent.recon.v1.GetSuiteDeploymentRequest)

| Field                                                                                               | Type               | Description |
| --------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.suite\_id      | [ string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.deployment\_id | [ string](#string) | none        |

### GetSuiteDeploymentResponse

(synq.agent.recon.v1.GetSuiteDeploymentResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### ListSuiteDeploymentHistoryRequest

(synq.agent.recon.v1.ListSuiteDeploymentHistoryRequest)

| Field                                                                                                 | Type                               | Description |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.suite\_id        | [ string](#string)                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.deployment\_id   | [ string](#string)                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | none        |

### ListSuiteDeploymentHistoryResponse

(synq.agent.recon.v1.ListSuiteDeploymentHistoryResponse)

| Field      | Type                                                                 | Description |
| ---------- | -------------------------------------------------------------------- | ----------- |
| entries    | [repeated SuiteDeploymentHistoryEntry](#suitedeploymenthistoryentry) | none        |
| page\_info | [ PageInfo](#pageinfo)                                               | none        |

### ListSuiteDeploymentsRequest

(synq.agent.recon.v1.ListSuiteDeploymentsRequest)

| Field                                                                                                                     | Type                               | Description                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination                     | [optional Pagination](#pagination) | none                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_integration\_id.integration\_id           | [optional string](#string)         | Return only deployments wired to this SYNQ integration (match against the deployment's connection\_mappings). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_triggerable\_by\_api.triggerable\_by\_api | [optional bool](#bool)             | Filter by triggerable\_by\_api flag.                                                                          |
| active\_only                                                                                                              | [ bool](#bool)                     | When true (default), only active deployments are returned.                                                    |
| include\_paused                                                                                                           | [ bool](#bool)                     | When false (default), paused deployments are excluded.                                                        |

### ListSuiteDeploymentsResponse

(synq.agent.recon.v1.ListSuiteDeploymentsResponse)

| Field       | Type                                         | Description |
| ----------- | -------------------------------------------- | ----------- |
| deployments | [repeated SuiteDeployment](#suitedeployment) | none        |
| page\_info  | [ PageInfo](#pageinfo)                       | none        |

### PauseDeploymentRequest

(synq.agent.recon.v1.PauseDeploymentRequest)

| Field                                                                                         | Type                             | Description                           |
| --------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------- |
| suite\_id                                                                                     | [ string](#string)               | none                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_until.until   | [optional Timestamp](#timestamp) | Absent = pause indefinitely.          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reason.reason | [optional string](#string)       | none                                  |
| actor                                                                                         | [ Actor](#actor)                 | Actor performing the pause. Required. |

### PauseDeploymentResponse

(synq.agent.recon.v1.PauseDeploymentResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### PromoteSuiteRequest

(synq.agent.recon.v1.PromoteSuiteRequest)

| Field                                                                                                                     | Type                                             | Description                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                                 | [ string](#string)                               | Suite to promote. For managed suites pass the suite name; for ad-hoc pass the UUID suite\_id.                                                                                                                                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_state\_at.state\_at                       | [optional Timestamp](#timestamp)                 | Specific version to promote. Absent = latest.                                                                                                                                                                                                                                                                                                                                                       |
| connection\_mappings                                                                                                      | [repeated ConnectionMapping](#connectionmapping) | Mappings for suite connections that don't already resolve to a workspace integration by name. Connections whose name matches a workspace integration can be omitted; they are resolved automatically. Promotion fails if any connection in the suite cannot be resolved.                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schedule.schedule                         | [optional SuiteSchedule](#suiteschedule)         | Optional cron/iCal schedule. Absent on a re-promote preserves the existing deployment's schedule (cron or iCal) verbatim; absent on a fresh promote means no schedule. To remove a schedule from an existing deployment use UpdateDeploymentSchedule (clear), not a re-promote.                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_triggerable\_by\_api.triggerable\_by\_api | [optional bool](#bool)                           | When true, a TriggerDeployment RPC may execute this deployment on demand. Optional so re-promotes can omit it: an absent value preserves the existing deployment's setting (a fresh promote defaults to false).                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection             | [optional bool](#bool)                           | Whether runs of this deployment drill into mismatched reconciliations after the quick check. Absent preserves the existing deployment's setting on a re-promote, or defaults to true on a fresh promote. Set false for quick-check-only deployments. Each reconciliation's own `bisection.enabled` still controls whether it is eligible to drill.                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout     | [optional Duration](#duration)                   | Maximum wall-clock time for a single run of this deployment. Absent on a fresh promote uses the server default; absent on a re-promote preserves the existing deployment's setting. The server clamps the effective value to a supported range. Set a lower value to bound cost on expensive warehouses, or a higher value for large tables whose drill legitimately needs longer than the default. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary           | [optional string](#string)                       | none                                                                                                                                                                                                                                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deployment\_id.deployment\_id             | [optional string](#string)                       | Optional client-supplied deployment id (UUID). Use this to make PromoteSuite idempotent across retries: if the original request wrote a row but the response was lost, the client re-issues with the same deployment\_id and the second call resolves to the same deployment.                                                                                                                       |

Server semantics: - absent : reuse the existing deployment for this suite\_id, or generate a fresh UUIDv7 - present, no row exists for (workspace, deployment\_id) : adopt as-is - present, row exists with same suite\_id : idempotent retry - present, row exists with different suite\_id : ALREADY\_EXISTS |
\| actor | [ Actor](#actor) | Actor performing the promotion. Required. |
\| deployment\_annotations | [repeated Annotation](#annotation) | Initial deployment-level annotation overlay. Merged with suite-level and case-level annotations from the frozen suite snapshot. Use UpdateDeploymentAnnotations to mutate later without re-promoting. |
\| reconciliation\_failure\_impacts | [map ReconciliationFailureImpactsEntry](#reconciliationfailureimpactsentry) | Per-case override controlling how the tables referenced by each reconciliation case propagate onto runs. Keyed by case `name` from the suite config. When a key is omitted on re-promote, the prior deployment's value is retained — operators only set keys they want to change, and the FE can offer an "apply to all" action by sending the same value under every case name. New cases (not present in any previous deployment of this suite\_id) default to RAISE\_ISSUE\_ON\_TABLES when unset.

Sending RECONCILIATION\_FAILURE\_IMPACT\_UNSPECIFIED for a known case is treated as "no opinion, keep current"; to actively reset to the default, either omit the case or send RAISE\_ISSUE\_ON\_TABLES. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category | [optional string](#string) | Categories to declare for the reconciliation checks this promotion publishes. See SuiteDeployment.category / .governance\_category for what they mean and how they interact with annotations and categorisation rules.

On a re-promote these behave as a patch of the previous deployment's values, per field: - absent : keep whatever the previous deployment declared - present, empty string : clear the declaration, falling back to the reserved annotation or the workspace rules - present, non-empty : set or replace the declaration

So a re-promote that says nothing about categories never silently drops one. Use UpdateDeploymentCategories to change them without re-promoting. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | none |
\| case\_categories | [map CaseCategoriesEntry](#casecategoriesentry) | Initial per-case category overrides, keyed by case `name`. Keys omitted on a re-promote keep the previous deployment's override; see CaseCategories for how a single dimension is inherited or cleared. Overrides for cases the promoted snapshot doesn't contain are rejected with INVALID\_ARGUMENT, so a renamed or deleted case surfaces as an error rather than a silently dead override. |

### PromoteSuiteRequest.CaseCategoriesEntry

(synq.agent.recon.v1.PromoteSuiteRequest.CaseCategoriesEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ CaseCategories](#casecategories) | none        |

### PromoteSuiteRequest.ReconciliationFailureImpactsEntry

(synq.agent.recon.v1.PromoteSuiteRequest.ReconciliationFailureImpactsEntry)

| Field | Type                                                         | Description |
| ----- | ------------------------------------------------------------ | ----------- |
| key   | [ string](#string)                                           | none        |
| value | [ ReconciliationFailureImpact](#reconciliationfailureimpact) | none        |

### PromoteSuiteResponse

(synq.agent.recon.v1.PromoteSuiteResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### ResumeDeploymentRequest

(synq.agent.recon.v1.ResumeDeploymentRequest)

| Field     | Type               | Description                            |
| --------- | ------------------ | -------------------------------------- |
| suite\_id | [ string](#string) | none                                   |
| actor     | [ Actor](#actor)   | Actor performing the resume. Required. |

### ResumeDeploymentResponse

(synq.agent.recon.v1.ResumeDeploymentResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### SuiteDeployment

(synq.agent.recon.v1.SuiteDeployment)

SuiteDeployment is the latest state of a deployment (current row).

| Field                                                                                                                 | Type                                                                 | Description                                                                                                                                                                                                                                                                                                                                            |
| --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| deployment\_id                                                                                                        | [ string](#string)                                                   | Stable platform identity (UUIDv7). Preserved across re-promotes, pause/resume, and unpromote → re-promote cycles. Downstream AssetCommand / RunCommand reference this.                                                                                                                                                                                 |
| suite\_id                                                                                                             | [ string](#string)                                                   | Suite this deployment came from.                                                                                                                                                                                                                                                                                                                       |
| suite\_name                                                                                                           | [ string](#string)                                                   | none                                                                                                                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_title.suite\_title             | [optional string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_description.suite\_description | [optional string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                   |
| active                                                                                                                | [ bool](#bool)                                                       | False after UnpromoteSuite. Scheduler and triggers stop.                                                                                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_paused\_until.paused\_until           | [optional Timestamp](#timestamp)                                     | When set and in the future, scheduled/triggered runs are suppressed. An indefinite pause uses a far-future sentinel timestamp.                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_paused\_reason.paused\_reason         | [optional string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                   |
| suite                                                                                                                 | [ ReconciliationSuite](#reconciliationsuite)                         | Frozen snapshot of the suite config at promote time.                                                                                                                                                                                                                                                                                                   |
| connection\_mappings                                                                                                  | [repeated ConnectionMapping](#connectionmapping)                     | Mapping used at execution time to resolve DWH credentials.                                                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schedule.schedule                     | [optional SuiteSchedule](#suiteschedule)                             | Schedule (if any). Absent = no cron; use triggerable\_by\_api.                                                                                                                                                                                                                                                                                         |
| triggerable\_by\_api                                                                                                  | [ bool](#bool)                                                       | When true, this deployment can be run on demand via TriggerDeployment, in addition to any cron schedule.                                                                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection         | [optional bool](#bool)                                               | When true (the default), runs of this deployment drill into mismatched reconciliations via bisection after the quick check to locate the differing rows; when false, runs stop at the quick check. Each reconciliation's own `bisection.enabled` still controls whether it is eligible to drill, so this acts as the deployment-wide switch on top.    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout | [optional Duration](#duration)                                       | Maximum wall-clock time for a single run of this deployment (the quick check plus any bisection drill). A run that exceeds it is cancelled and marked failed. Absent means the server default applies; the effective value is clamped to a supported range. Lower it to bound cost on expensive warehouses where a deep drill can run for a long time. |
| connection\_names                                                                                                     | [repeated string](#string)                                           | Denormalized summaries so listing callers don't need to parse the snapshot.                                                                                                                                                                                                                                                                            |
| integration\_ids                                                                                                      | [repeated string](#string)                                           | none                                                                                                                                                                                                                                                                                                                                                   |
| reconciliation\_summaries                                                                                             | [repeated ReconciliationConfigSummary](#reconciliationconfigsummary) | none                                                                                                                                                                                                                                                                                                                                                   |
| source\_suite\_type                                                                                                   | [ string](#string)                                                   | Where this deployment's snapshot came from.                                                                                                                                                                                                                                                                                                            |

"managed" or "adhoc" |
\| source\_config\_state\_at | [ Timestamp](#timestamp) | none |
\| state\_at | [ Timestamp](#timestamp) | Most recent event timestamp. |
\| last\_action | [ DeploymentAction](#deploymentaction) | none |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_actor.last\_actor | [optional Actor](#actor) | none |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_last\_change\_summary.last\_change\_summary | [optional string](#string) | none |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_promoted\_at.promoted\_at | [optional Timestamp](#timestamp) | When this deployment reached production, and who put it there — taken from the most recent promotion in its history, not from whatever happened last.

Read these rather than state\_at / last\_actor whenever the question is "when did this go live and on whose authority". Pausing, rescheduling, editing annotations or changing categories all restamp state\_at / last\_actor and leave these two untouched, so a surface that renders the promotion from state\_at reports the wrong time and often the wrong person.

A re-promote is a promotion, so it restamps both. Unpromoting does not clear them: an inactive deployment still reports when it was last live. Both are absent only for a deployment whose history holds no promotion event. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_promoted\_by.promoted\_by | [optional Actor](#actor) | none |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_next\_run\_at.next\_run\_at | [optional Timestamp](#timestamp) | Next cron occurrence computed live from `schedule` at response time. Absent when there's no schedule, when the deployment is inactive/paused, or when the schedule expression no longer yields an upcoming occurrence (e.g. an iCal RRULE that has finished). Use this for "Next run: …" UI hints — it's the authoritative upcoming-tick source, independent of any pre-materialised execution\_jobs / run\_state rows. |
\| deployment\_annotations | [repeated Annotation](#annotation) | Deployment-level annotation overlay. Applied on top of the suite-level and case-level annotations baked into the frozen suite snapshot. The merged, deduplicated list lives on PromotedReconSuiteMetadata / PromotedReconCaseMetadata — this field exposes only the deployment's own overlay so callers can render and edit it independently. |
\| reconciliation\_failure\_impacts | [map ReconciliationFailureImpactsEntry](#reconciliationfailureimpactsentry) | Effective per-case ReconciliationFailureImpact map currently in force for this deployment. Keyed by case `name`. Cases without an entry behave as RAISE\_ISSUE\_ON\_TABLES. Drives whether the runner attaches each case's referenced tables to Run.target (issue-raising) or Run.extra\_references (visibility only) — see PromotedReconCaseMetadata.error\_tables / shown\_tables for the resolved table lists. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category | [optional string](#string) | Technical category declared for every reconciliation check this deployment publishes — the "what kind of check is this, mechanically" dimension the catalog groups and filters checks by (for example "nullness", "uniqueness", "freshness"), which is what lets one category cover the same check written as a dbt test, a SQLMesh audit or a reconciliation.

Declared on the promotion rather than in the suite file, because a reconciliation only becomes a check once it is promoted: the suite file says what to reconcile, the promotion says how it behaves in production — the same reason `schedule` lives here and not in the file.

Absent means this deployment declares no category. The category is then taken from a reserved `quality.check_category` annotation on the suite, the case or the deployment overlay (see deployment\_annotations), and failing that from the workspace's own categorisation rules. Setting this field outranks both.

Free-form: the vocabulary is whatever the workspace already uses, not a fixed enum. Always read and write it together with governance\_category — the two dimensions resolve independently and a surface that exposes one must expose both. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | Governance category declared for every reconciliation check this deployment publishes — the "what is this check for" dimension, orthogonal to `category` (for example "completeness", "accuracy", "timeliness"). It is the dimension a data-governance function tracks coverage against.

Same declaration point, same precedence and same free-form vocabulary as `category`; resolved independently of it, so declaring one never suppresses the other's annotation. |
\| case\_categories | [map CaseCategoriesEntry](#casecategoriesentry) | Per-case overrides of the two fields above, keyed by case `name` from the suite config. Cases without an entry use the deployment-wide declaration.

Worth overriding when the cases of one suite are the same kind of check but serve different governance purposes — a case comparing row counts is about completeness while a case comparing values is about accuracy, and they can carry different governance categories while sharing the deployment's technical one. |

### SuiteDeployment.CaseCategoriesEntry

(synq.agent.recon.v1.SuiteDeployment.CaseCategoriesEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ CaseCategories](#casecategories) | none        |

### SuiteDeployment.ReconciliationFailureImpactsEntry

(synq.agent.recon.v1.SuiteDeployment.ReconciliationFailureImpactsEntry)

| Field | Type                                                         | Description |
| ----- | ------------------------------------------------------------ | ----------- |
| key   | [ string](#string)                                           | none        |
| value | [ ReconciliationFailureImpact](#reconciliationfailureimpact) | none        |

### SuiteDeploymentHistoryEntry

(synq.agent.recon.v1.SuiteDeploymentHistoryEntry)

SuiteDeploymentHistoryEntry is a single event in the deployment's history.

| Field                                                                                                                               | Type                                                                        | Description                                                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| deployment\_id                                                                                                                      | [ string](#string)                                                          | none                                                                                                                                                                                                                                                                              |
| suite\_id                                                                                                                           | [ string](#string)                                                          | none                                                                                                                                                                                                                                                                              |
| state\_at                                                                                                                           | [ Timestamp](#timestamp)                                                    | none                                                                                                                                                                                                                                                                              |
| action                                                                                                                              | [ DeploymentAction](#deploymentaction)                                      | none                                                                                                                                                                                                                                                                              |
| active                                                                                                                              | [ bool](#bool)                                                              | State of the deployment at the moment of this event.                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_paused\_until.paused\_until                         | [optional Timestamp](#timestamp)                                            | none                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_paused\_reason.paused\_reason                       | [optional string](#string)                                                  | none                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schedule.schedule                                   | [optional SuiteSchedule](#suiteschedule)                                    | none                                                                                                                                                                                                                                                                              |
| triggerable\_by\_api                                                                                                                | [ bool](#bool)                                                              | none                                                                                                                                                                                                                                                                              |
| connection\_mappings                                                                                                                | [repeated ConnectionMapping](#connectionmapping)                            | none                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection                       | [optional bool](#bool)                                                      | The run\_bisection setting in force at the time of this event.                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout               | [optional Duration](#duration)                                              | The execution\_timeout in force at the time of this event. Absent means the server default applied.                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite.suite                                         | [optional ReconciliationSuite](#reconciliationsuite)                        | Only filled for PROMOTED / REPROMOTED events (snapshot changes).                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source\_config\_state\_at.source\_config\_state\_at | [optional Timestamp](#timestamp)                                            | none                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_actor.actor                                         | [optional Actor](#actor)                                                    | none                                                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary                     | [optional string](#string)                                                  | none                                                                                                                                                                                                                                                                              |
| deployment\_annotations                                                                                                             | [repeated Annotation](#annotation)                                          | Deployment-level annotation overlay at this point in time. Filled on every history entry (annotation changes carry the full new list, other events carry the snapshot at the time of the event).                                                                                  |
| reconciliation\_failure\_impacts                                                                                                    | [map ReconciliationFailureImpactsEntry](#reconciliationfailureimpactsentry) | Effective per-case ReconciliationFailureImpact map at this point in time. Snapshot semantics — every history entry carries the full map in force right after the event was recorded.                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category                                   | [optional string](#string)                                                  | The declared categories in force at this point in time. Snapshot semantics, like the fields above: every history entry carries the values in force right after the event was recorded, not just the CATEGORIES\_CHANGED ones. Absent means no category was declared at that time. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category           | [optional string](#string)                                                  | none                                                                                                                                                                                                                                                                              |
| case\_categories                                                                                                                    | [map CaseCategoriesEntry](#casecategoriesentry)                             | Per-case category overrides in force at this point in time. Snapshot semantics, like the map above.                                                                                                                                                                               |

### SuiteDeploymentHistoryEntry.CaseCategoriesEntry

(synq.agent.recon.v1.SuiteDeploymentHistoryEntry.CaseCategoriesEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ CaseCategories](#casecategories) | none        |

### SuiteDeploymentHistoryEntry.ReconciliationFailureImpactsEntry

(synq.agent.recon.v1.SuiteDeploymentHistoryEntry.ReconciliationFailureImpactsEntry)

| Field | Type                                                         | Description |
| ----- | ------------------------------------------------------------ | ----------- |
| key   | [ string](#string)                                           | none        |
| value | [ ReconciliationFailureImpact](#reconciliationfailureimpact) | none        |

### TriggerDeploymentRequest

(synq.agent.recon.v1.TriggerDeploymentRequest)

| Field                                                                                                                 | Type                           | Description                                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.suite\_id                        | [ string](#string)             | none                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) lookup.deployment\_id                   | [ string](#string)             | none                                                                                                                                                                                                                                                     |
| actor                                                                                                                 | [ Actor](#actor)               | Actor triggering the run. Required.                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection         | [optional bool](#bool)         | Per-run override for the deployment's stored run\_bisection setting. Unset (the default) inherits the deployment's value, so an on-demand run behaves like a scheduled one. Set false for a cheap quick-check-only run with no bisection drill-down.     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout | [optional Duration](#duration) | Per-run override for the deployment's stored execution\_timeout. Unset (the default) inherits the deployment's value. Set it to bound this one run to a shorter or longer wall-clock budget; the server clamps the effective value to a supported range. |

### TriggerDeploymentResponse

(synq.agent.recon.v1.TriggerDeploymentResponse)

| Field          | Type                     | Description                                                                                                    |
| -------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------- |
| deployment\_id | [ string](#string)       | Identity of the deployment that was triggered (canonical form even when the request used `suite_id`).          |
| run\_id        | [ string](#string)       | Stable opaque identifier of the enqueued run. Pass this to RunStateService to track lifecycle.                 |
| scheduled\_at  | [ Timestamp](#timestamp) | When the run is scheduled to start. For TriggerDeployment this is \~now(); the worker will pick it up shortly. |

### UnpromoteSuiteRequest

(synq.agent.recon.v1.UnpromoteSuiteRequest)

| Field                                                                                         | Type                       | Description                               |
| --------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------- |
| suite\_id                                                                                     | [ string](#string)         | none                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reason.reason | [optional string](#string) | none                                      |
| actor                                                                                         | [ Actor](#actor)           | Actor performing the unpromote. Required. |

### UnpromoteSuiteResponse

(synq.agent.recon.v1.UnpromoteSuiteResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### UnresolvedConnection

(synq.agent.recon.v1.UnresolvedConnection)

One entry per connection name the server failed to resolve. Returned
inside ConnectionResolutionFailure as the structured error detail of a
FAILED\_PRECONDITION on adhoc submission or deployment promote/update.

| Field                       | Type                                                       | Description                                                                                                                                                                                                                                  |
| --------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| connection\_name            | [ string](#string)                                         | Connection name as referenced by the suite config.                                                                                                                                                                                           |
| reason                      | [ UnresolvedConnectionReason](#unresolvedconnectionreason) | Why the server could not satisfy the mapping.                                                                                                                                                                                                |
| message                     | [ string](#string)                                         | Optional human-readable elaboration ("integration X has reconciliation adhoc disabled by workspace admin", etc.). Already includes workspace / suite context — safe to surface verbatim.                                                     |
| candidate\_integration\_ids | [repeated string](#string)                                 | Suggested integration ids the caller could pick from. Filtered by the capability the failing call needs (RECONCILIATION\_ADHOC for adhoc, RECONCILIATION\_DEPLOY for deployment) so the UI can render a picker directly without re-querying. |

### UpdateDeploymentAnnotationsRequest

(synq.agent.recon.v1.UpdateDeploymentAnnotationsRequest)

| Field                                                                                                           | Type                               | Description                                                                                                                                                                               |
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                       | [ string](#string)                 | none                                                                                                                                                                                      |
| deployment\_annotations                                                                                         | [repeated Annotation](#annotation) | Full replacement for the deployment-level annotation overlay. Pass an empty list to clear all deployment-level annotations (suite/case annotations from the frozen snapshot still apply). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary | [optional string](#string)         | none                                                                                                                                                                                      |
| actor                                                                                                           | [ Actor](#actor)                   | Actor performing the annotation update. Required.                                                                                                                                         |

### UpdateDeploymentAnnotationsResponse

(synq.agent.recon.v1.UpdateDeploymentAnnotationsResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### UpdateDeploymentCaseImpactsRequest

(synq.agent.recon.v1.UpdateDeploymentCaseImpactsRequest)

| Field                                                                                                           | Type                                                                        | Description                                                                                                     |
| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                       | [ string](#string)                                                          | none                                                                                                            |
| reconciliation\_failure\_impacts                                                                                | [map ReconciliationFailureImpactsEntry](#reconciliationfailureimpactsentry) | Partial patch of the per-case impact map. See UpdateDeploymentCaseImpacts RPC docs for merge / clear semantics. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary | [optional string](#string)                                                  | none                                                                                                            |
| actor                                                                                                           | [ Actor](#actor)                                                            | Actor performing the update. Required.                                                                          |

### UpdateDeploymentCaseImpactsRequest.ReconciliationFailureImpactsEntry

(synq.agent.recon.v1.UpdateDeploymentCaseImpactsRequest.ReconciliationFailureImpactsEntry)

| Field | Type                                                         | Description |
| ----- | ------------------------------------------------------------ | ----------- |
| key   | [ string](#string)                                           | none        |
| value | [ ReconciliationFailureImpact](#reconciliationfailureimpact) | none        |

### UpdateDeploymentCaseImpactsResponse

(synq.agent.recon.v1.UpdateDeploymentCaseImpactsResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### UpdateDeploymentCategoriesRequest

(synq.agent.recon.v1.UpdateDeploymentCategoriesRequest)

| Field                                                                                             | Type                       | Description                                                                                                                                                                                                                                           |
| ------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                         | [ string](#string)         | none                                                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_category.category | [optional string](#string) | Patch of the declared categories. Field presence is meaningful and the two fields are independent: - absent : leave the current value unchanged - present, empty string : clear the declaration - present, non-empty : set or replace the declaration |

A request that sets nothing at all is accepted and changes nothing. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_governance\_category.governance\_category | [optional string](#string) | none |
\| case\_categories | [map CaseCategoriesEntry](#casecategoriesentry) | Patch of the per-case overrides, keyed by case `name`. Keys present in the request replace that case's override; keys absent are left untouched, so this never resets overrides the caller didn't mention. Send an entry with both fields absent to drop a case's override and go back to inheriting the deployment's declaration. Unknown case names are rejected with INVALID\_ARGUMENT. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary | [optional string](#string) | none |
\| actor | [ Actor](#actor) | Actor performing the category update. Required. |

### UpdateDeploymentCategoriesRequest.CaseCategoriesEntry

(synq.agent.recon.v1.UpdateDeploymentCategoriesRequest.CaseCategoriesEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ CaseCategories](#casecategories) | none        |

### UpdateDeploymentCategoriesResponse

(synq.agent.recon.v1.UpdateDeploymentCategoriesResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### UpdateDeploymentMappingsRequest

(synq.agent.recon.v1.UpdateDeploymentMappingsRequest)

| Field                                                                                                           | Type                                             | Description                                                                                                                             |
| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                       | [ string](#string)                               | none                                                                                                                                    |
| connection\_mappings                                                                                            | [repeated ConnectionMapping](#connectionmapping) | Same shape as PromoteSuiteRequest.connection\_mappings — entries are optional and apply only to connections that don't resolve by name. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary | [optional string](#string)                       | none                                                                                                                                    |
| actor                                                                                                           | [ Actor](#actor)                                 | Actor performing the mapping update. Required.                                                                                          |

### UpdateDeploymentMappingsResponse

(synq.agent.recon.v1.UpdateDeploymentMappingsResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### UpdateDeploymentScheduleRequest

(synq.agent.recon.v1.UpdateDeploymentScheduleRequest)

| Field                                                                                                                     | Type                                     | Description                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id                                                                                                                 | [ string](#string)                       | none                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schedule.schedule                         | [optional SuiteSchedule](#suiteschedule) | Presence-based: - absent = preserve current schedule - present, empty = clear the schedule (an empty SuiteSchedule has no cron, which the deployment row stores as no schedule) - present, with cron = replace the schedule |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_triggerable\_by\_api.triggerable\_by\_api | [optional bool](#bool)                   | Absent = preserve current setting. Otherwise update triggerable\_by\_api.                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary           | [optional string](#string)               | none                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection             | [optional bool](#bool)                   | Absent = preserve current setting. Otherwise update the deployment's run\_bisection flag.                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout     | [optional Duration](#duration)           | Absent = preserve current setting. Otherwise update the deployment's execution\_timeout (maximum wall-clock budget for a single run). The server clamps the effective value to a supported range at run time.               |
| actor                                                                                                                     | [ Actor](#actor)                         | Actor performing the schedule update. Required.                                                                                                                                                                             |

### UpdateDeploymentScheduleResponse

(synq.agent.recon.v1.UpdateDeploymentScheduleResponse)

| Field      | Type                                 | Description |
| ---------- | ------------------------------------ | ----------- |
| deployment | [ SuiteDeployment](#suitedeployment) | none        |

### AuditLogEntry

(synq.agent.recon.v1.AuditLogEntry)

AuditLogEntry is a summary of an audit log for listing purposes.
Use GetAuditLog to retrieve the full audit log data.

| Field                                                                                                                         | Type                                                     | Description                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| invocation\_id                                                                                                                | [ string](#string)                                       | none                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_invocation\_id.parent\_invocation\_id | [optional string](#string)                               | none                                                                                                                                                                                                                                              |
| suite\_name                                                                                                                   | [ string](#string)                                       | none                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_title.suite\_title                     | [optional string](#string)                               | none                                                                                                                                                                                                                                              |
| started\_at                                                                                                                   | [ Timestamp](#timestamp)                                 | none                                                                                                                                                                                                                                              |
| completed\_at                                                                                                                 | [ Timestamp](#timestamp)                                 | none                                                                                                                                                                                                                                              |
| duration                                                                                                                      | [ Duration](#duration)                                   | none                                                                                                                                                                                                                                              |
| status                                                                                                                        | [ AuditOutcome](#auditoutcome)                           | none                                                                                                                                                                                                                                              |
| summary                                                                                                                       | [ AuditSummary](#auditsummary)                           | none                                                                                                                                                                                                                                              |
| reconciliations                                                                                                               | [repeated ReconciliationSummary](#reconciliationsummary) | none                                                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_id.suite\_id                           | [optional string](#string)                               | Stable suite identifier assigned by the platform — same value as the suite\_id on RunStateService.ReconciliationRunState, suitable for joining a run row to its audit log. Empty for legacy logs ingested before run-state correlation was added. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deployment\_id.deployment\_id                 | [optional string](#string)                               | Deployment identifier this run belongs to (UUIDv7). Empty for adhoc submissions and for legacy logs ingested before run-state correlation.                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_id.run\_id                               | [optional string](#string)                               | Stable run identifier (UUIDv7) assigned at scheduling time. Empty for legacy logs / direct agent submissions made outside the platform job queue.                                                                                                 |

### GetAuditLogRequest

(synq.agent.recon.v1.GetAuditLogRequest)

| Field          | Type               | Description                                 |
| -------------- | ------------------ | ------------------------------------------- |
| invocation\_id | [ string](#string) | Invocation ID of the audit log to retrieve. |

### GetAuditLogResponse

(synq.agent.recon.v1.GetAuditLogResponse)

| Field      | Type                   | Description |
| ---------- | ---------------------- | ----------- |
| audit\_log | [ AuditLog](#auditlog) | none        |

### IngestAuditLogRequest

(synq.agent.recon.v1.IngestAuditLogRequest)

| Field      | Type                   | Description             |
| ---------- | ---------------------- | ----------------------- |
| audit\_log | [ AuditLog](#auditlog) | The audit log to store. |

### IngestAuditLogResponse

(synq.agent.recon.v1.IngestAuditLogResponse)

### ListAuditLogsRequest

(synq.agent.recon.v1.ListAuditLogsRequest)

| Field                                                                                                           | Type                                   | Description                                                       |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_name.suite\_name         | [optional string](#string)             | Filter by suite name. When empty, returns all suites.             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_after.started\_after   | [optional Timestamp](#timestamp)       | Only return audit logs started after this timestamp (inclusive).  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_before.started\_before | [optional Timestamp](#timestamp)       | Only return audit logs started before this timestamp (exclusive). |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination           | [optional Pagination](#pagination)     | Pagination parameters.                                            |
| statuses                                                                                                        | [repeated AuditOutcome](#auditoutcome) | Filter by audit status. When empty, returns all statuses.         |

### ListAuditLogsResponse

(synq.agent.recon.v1.ListAuditLogsResponse)

| Field       | Type                                     | Description                                 |
| ----------- | ---------------------------------------- | ------------------------------------------- |
| audit\_logs | [repeated AuditLogEntry](#auditlogentry) | none                                        |
| page\_info  | [ PageInfo](#pageinfo)                   | Pagination info for fetching the next page. |

### ReconciliationSummary

(synq.agent.recon.v1.ReconciliationSummary)

ReconciliationSummary is a compact summary of a single reconciliation within an audit log entry.

| Field                                                                                                   | Type                                             | Description                                 |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------- |
| name                                                                                                    | [ string](#string)                               | none                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title             | [optional string](#string)                       | none                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                       | none                                        |
| source\_connection                                                                                      | [ string](#string)                               | Source connection name.                     |
| target\_connection                                                                                      | [ string](#string)                               | Target connection name.                     |
| status                                                                                                  | [ ReconciliationOutcome](#reconciliationoutcome) | none                                        |
| overall\_match                                                                                          | [ bool](#bool)                                   | none                                        |
| error                                                                                                   | [ string](#string)                               | Error message if the reconciliation failed. |

### ColumnMapping

(synq.agent.recon.v1.ColumnMapping)

ColumnMapping maps a source column name to a target column name.
Used when source and target use different naming conventions for the same data
(e.g., snake\_case vs SCREAMING\_SNAKE\_CASE, or completely different names).
Only columns with different names need explicit mapping — columns with
identical names (or case-insensitive matches when case\_insensitive is true)
are matched automatically.

| Field  | Type               | Description                                      |
| ------ | ------------------ | ------------------------------------------------ |
| source | [ string](#string) | Column name in the source dataset.               |
| target | [ string](#string) | Corresponding column name in the target dataset. |

### Dataset

(synq.agent.recon.v1.Dataset)

Dataset defines a source or target dataset for reconciliation.
A dataset specifies which connection to use and how to select data —
either via a raw SQL query or by referencing a table with optional column filtering.

| Field                                                                                            | Type                               | Description                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| connection                                                                                       | [ string](#string)                 | Name of the connection to use. Must reference a connection configured in the runner's connection map.                                                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data\_source.query | [ string](#string)                 | Raw SQL query returning the dataset. Should be a SELECT or WITH (CTE) statement. Supports template variable interpolation via \{\{variable\_name}} syntax.                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data\_source.table | [ TableReference](#tablereference) | Table reference with optional column selection. Automatically generates a SELECT query from the table metadata.                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_as\_of.as\_of    | [optional string](#string)         | Time-travel timestamp for snapshot queries (e.g., "2026-02-01 00:00:00"). When set, wraps the query with database-specific time-travel syntax: - Snowflake: AT(TIMESTAMP => '\<as\_of>') - BigQuery: FOR SYSTEM\_TIME AS OF TIMESTAMP '\<as\_of>' - Databricks: TIMESTAMP AS OF '\<as\_of>' Has no effect on databases that don't support time-travel. |

### TableReference

(synq.agent.recon.v1.TableReference)

TableReference specifies a table and optional column filtering.
Use this instead of a raw query when you want to compare all (or most) columns
of a table without writing SQL.

`name` is the table or view name (e.g., "orders", "fact\_sales").
`database` and `schema` are optional namespace qualifiers.
The actual SQL FQN is generated at runtime using the appropriate dialect quoting.

| Field                                                                                             | Type                       | Description                                                                                                                                                                                                                        |
| ------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                              | [ string](#string)         | Table or view name (e.g., "orders", "fact\_sales"). Required — this is the actual object name.                                                                                                                                     |
| columns                                                                                           | [repeated string](#string) | Explicit list of columns to include in the comparison. When set, only these columns are selected from the table. Mutually exclusive with exclude\_columns.                                                                         |
| exclude\_columns                                                                                  | [repeated string](#string) | Columns to exclude from the comparison. All columns except these are selected (resolved at runtime via table metadata). Useful for skipping volatile columns (e.g., updated\_at, etl\_batch\_id). Mutually exclusive with columns. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database | [optional string](#string) | Database/catalog name (e.g., "PROD\_RAW", "my\_project"). Maps to: Snowflake database, BigQuery project, Databricks catalog.                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schema.schema     | [optional string](#string) | Schema/dataset name (e.g., "public", "analytics"). Maps to: Snowflake schema, BigQuery dataset, Databricks schema.                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_where.where       | [optional string](#string) | Row filter — appended as WHERE clause to the generated SELECT. Example: "created\_at ≥ '2024-01-01' AND status = 'active'"                                                                                                         |

### BatchReconciliationRunStateRequest

(synq.agent.recon.v1.BatchReconciliationRunStateRequest)

| Field                    | Type                       | Description                                                                                                                                                                                                                                                                                                         |
| ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_ids               | [repeated string](#string) | none                                                                                                                                                                                                                                                                                                                |
| include\_adhoc\_children | [ bool](#bool)             | When true, the response also includes adhoc test runs spawned from the queried suites — i.e. rows whose parent\_suite\_id matches. Use this for the "development" view where adhoc activity is part of the iteration loop. Production / deployment-centric views leave it false to see only deployment-driven runs. |

### BatchReconciliationRunStateResponse

(synq.agent.recon.v1.BatchReconciliationRunStateResponse)

| Field  | Type                            | Description                                                       |
| ------ | ------------------------------- | ----------------------------------------------------------------- |
| states | [map StatesEntry](#statesentry) | Map keyed by suite\_id; suites with no recorded runs are omitted. |

### BatchReconciliationRunStateResponse.StatesEntry

(synq.agent.recon.v1.BatchReconciliationRunStateResponse.StatesEntry)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| key   | [ string](#string)                 | none        |
| value | [ SuiteRunStates](#suiterunstates) | none        |

### CancelReconciliationRunRequest

(synq.agent.recon.v1.CancelReconciliationRunRequest)

| Field     | Type               | Description                                                                                                                                                                                           |
| --------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_id | [ string](#string) | The suite the run belongs to. Required because run rows are keyed by (workspace, suite\_id, run\_id) — clients pass the suite\_id they already know from the run state listing alongside the run\_id. |
| run\_id   | [ string](#string) | Run identifier. UUIDv7 returned by BatchReconciliationRunState / ListReconciliationRunState.                                                                                                          |

### CancelReconciliationRunResponse

(synq.agent.recon.v1.CancelReconciliationRunResponse)

| Field | Type                                               | Description                                                                                                                                                                                   |
| ----- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| state | [ ReconciliationRunState](#reconciliationrunstate) | The current state of the run after the cancel attempt. Status will be CANCELLED if the run was SCHEDULED/IN\_PROGRESS at call time, or unchanged if it had already reached a terminal status. |

### ListReconciliationRunStateRequest

(synq.agent.recon.v1.ListReconciliationRunStateRequest)

| Field                                                                                                               | Type                                                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| suite\_ids                                                                                                          | [repeated string](#string)                                     | Optional filter: limit to these suite\_ids. Combined with deployment\_ids via OR — a row matches if either list contains it (both empty = no suite/deployment filter).                                                                                                                                                                                                                                                                  |
| statuses                                                                                                            | [repeated ReconciliationRunStatus](#reconciliationrunstatus)   | Optional filter: only return runs in these statuses. Empty = no status filter.                                                                                                                                                                                                                                                                                                                                                          |
| deployment\_ids                                                                                                     | [repeated string](#string)                                     | Optional filter: limit to runs belonging to these deployment\_ids. Use this to scope the listing to a single promoted deployment cycle — suite\_id alone may overlap multiple deployment\_ids when a suite has been promoted, unpromoted, and re-promoted.                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scheduled\_after.scheduled\_after   | [optional Timestamp](#timestamp)                               | Only return runs scheduled at or after this timestamp (inclusive).                                                                                                                                                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_scheduled\_before.scheduled\_before | [optional Timestamp](#timestamp)                               | Only return runs scheduled before this timestamp (exclusive).                                                                                                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination               | [optional Pagination](#pagination)                             | Pagination parameters. The cursor encodes (scheduled\_at, run\_id) and is opaque to clients — pass page\_info.next\_cursor verbatim.                                                                                                                                                                                                                                                                                                    |
| triggers                                                                                                            | [repeated ReconciliationRunTrigger](#reconciliationruntrigger) | Optional filter: only return runs created via these triggers. Empty = no trigger filter. Use this to separate API-triggered runs from cron-scheduled occurrences from ad-hoc submissions in the listing.                                                                                                                                                                                                                                |
| actor\_identities                                                                                                   | [repeated string](#string)                                     | Optional filter: limit to runs initiated by these actor identities. Identities use the canonical actor-identity string format defined alongside the public Actor type (e.g. `email:foo@example.com`, `slack:U12345`, `client_id:<id>`). Empty list = no actor filter. Useful for "show only my ad-hoc runs" views — clients construct their own identity from the authenticated user (typically `email:<user-email>`) and pass it here. |

### ListReconciliationRunStateResponse

(synq.agent.recon.v1.ListReconciliationRunStateResponse)

| Field      | Type                                                       | Description                                                                        |
| ---------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| states     | [repeated ReconciliationRunState](#reconciliationrunstate) | Sorted newest-first by scheduled\_at, then by run\_id desc as a stable tiebreaker. |
| page\_info | [ PageInfo](#pageinfo)                                     | Pagination info for fetching the next page.                                        |

### SuiteRunStates

(synq.agent.recon.v1.SuiteRunStates)

SuiteRunStates groups the most relevant run rows for a single suite.

| Field                                                                                                               | Type                                                       | Description                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_latest\_concluded.latest\_concluded | [optional ReconciliationRunState](#reconciliationrunstate) | Most recent run that has reached a terminal status (SUCCEEDED, FAILED, CANCELLED).                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ongoing.ongoing                     | [optional ReconciliationRunState](#reconciliationrunstate) | Most recent run whose target tick has arrived (scheduled\_at ≤ now) and that is still SCHEDULED or IN\_PROGRESS. Pre-scheduled future rows are not surfaced here — see `next_run_at` on SuiteDeployment for the upcoming cron occurrence. |

### ParseYamlRequest

(synq.agent.recon.v1.ParseYamlRequest)

| Field | Type               | Description                  |
| ----- | ------------------ | ---------------------------- |
| yaml  | [ string](#string) | YAML config string to parse. |

### ParseYamlResponse

(synq.agent.recon.v1.ParseYamlResponse)

| Field | Type                                         | Description                     |
| ----- | -------------------------------------------- | ------------------------------- |
| suite | [ ReconciliationSuite](#reconciliationsuite) | The parsed suite configuration. |

### RenderYamlRequest

(synq.agent.recon.v1.RenderYamlRequest)

| Field | Type                                         | Description                                |
| ----- | -------------------------------------------- | ------------------------------------------ |
| suite | [ ReconciliationSuite](#reconciliationsuite) | The suite configuration to render as YAML. |

### RenderYamlResponse

(synq.agent.recon.v1.RenderYamlResponse)

| Field | Type               | Description                      |
| ----- | ------------------ | -------------------------------- |
| yaml  | [ string](#string) | The rendered YAML config string. |

### ConnectionEnvironmentOverride

(synq.agent.recon.v1.ConnectionEnvironmentOverride)

ConnectionEnvironmentOverride applies to all datasets using a given connection.
Provides a default table path override for all datasets on that connection.

| Field       | Type                                     | Description                                                                                                            |
| ----------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| table\_path | [ TablePathOverride](#tablepathoverride) | Default table path override for all datasets on this connection. Can be further overridden by dataset-level overrides. |

### DatasetEnvironmentOverride

(synq.agent.recon.v1.DatasetEnvironmentOverride)

DatasetEnvironmentOverride applies to a specific dataset in a specific reconciliation.
Takes precedence over connection-level overrides.

| Field       | Type                                     | Description                                    |
| ----------- | ---------------------------------------- | ---------------------------------------------- |
| table\_path | [ TablePathOverride](#tablepathoverride) | Table path override for this specific dataset. |

### ReconEnvironment

(synq.agent.recon.v1.ReconEnvironment)

ReconEnvironment defines overrides applied to a suite before execution.
Environments allow the same suite definition to run against different
database locations (e.g., dev vs production schemas) without modifying
the suite itself.

Used both in synq-recon CLI (loaded from .env.yaml files) and in
kernel-recon cloud (managed as workspace-level configurations).

| Field                                                                                                   | Type                                      | Description                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                    | [ string](#string)                        | Environment name (e.g., "dev-lukasz", "staging", "production").                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                | Human-readable description of this environment.                                                                                                                              |
| connections                                                                                             | [map ConnectionsEntry](#connectionsentry) | Connection-level overrides, keyed by connection name. Applied to all datasets using the specified connection.                                                                |
| datasets                                                                                                | [map DatasetsEntry](#datasetsentry)       | Dataset-level overrides, keyed by "reconciliation\_name.source" or "reconciliation\_name.target". Takes precedence over connection-level overrides for the matching dataset. |
| variables                                                                                               | [map VariablesEntry](#variablesentry)     | Variable overrides merged on top of suite-level variables. Takes precedence over suite variables but is overridden by CLI --var flags.                                       |

### ReconEnvironment.ConnectionsEntry

(synq.agent.recon.v1.ReconEnvironment.ConnectionsEntry)

| Field | Type                                                             | Description |
| ----- | ---------------------------------------------------------------- | ----------- |
| key   | [ string](#string)                                               | none        |
| value | [ ConnectionEnvironmentOverride](#connectionenvironmentoverride) | none        |

### ReconEnvironment.DatasetsEntry

(synq.agent.recon.v1.ReconEnvironment.DatasetsEntry)

| Field | Type                                                       | Description |
| ----- | ---------------------------------------------------------- | ----------- |
| key   | [ string](#string)                                         | none        |
| value | [ DatasetEnvironmentOverride](#datasetenvironmentoverride) | none        |

### ReconEnvironment.VariablesEntry

(synq.agent.recon.v1.ReconEnvironment.VariablesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### TablePathOverride

(synq.agent.recon.v1.TablePathOverride)

TablePathOverride remaps components of a fully-qualified table name.
Only set fields are overridden — unset fields keep the suite's original value.
Applied to TableReference fields in datasets when an environment is active.

| Field                                                                                                       | Type                       | Description                                                                                   |
| ----------------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database           | [optional string](#string) | Replace the database/catalog component. e.g., "PROD\_DB" → "DEV\_LUKASZ\_DB"                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schema.schema               | [optional string](#string) | Replace the schema/dataset component. e.g., "analytics" → "dev\_lukasz\_analytics"            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_table\_prefix.table\_prefix | [optional string](#string) | Prefix to prepend to the table name. e.g., "dev\_" → "dev\_orders" instead of "orders"        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_table\_suffix.table\_suffix | [optional string](#string) | Suffix to append to the table name. e.g., "\_staging" → "orders\_staging" instead of "orders" |

### CronSchedule

(synq.agent.recon.v1.CronSchedule)

| Field      | Type               | Description                                        |
| ---------- | ------------------ | -------------------------------------------------- |
| expression | [ string](#string) | Standard cron expression (e.g. "0 \*/6 \* \* \*"). |

### ICalSchedule

(synq.agent.recon.v1.ICalSchedule)

| Field                                                                                           | Type                             | Description                                                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| recurrence\_rule                                                                                | [ string](#string)               | RFC 5545 RRULE recurrence rule (e.g. "FREQ=MONTHLY;BYDAY=TH;BYSETPOS=-1"). DTSTART should be set via the dtstart field below rather than inline in the rule.                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dtstart.dtstart | [optional Timestamp](#timestamp) | Anchor time for the recurrence rule. Wall-clock time interpreted in the schedule's timezone. Defines when the schedule starts and aligns occurrences. If not set and no DTSTART is present in the recurrence\_rule, defaults to now(). |

### ReconciliationConfigSummary

(synq.agent.recon.v1.ReconciliationConfigSummary)

Summary of a single reconciliation within a suite config (for listing without parsing full config).

| Field                                                                                                   | Type                                       | Description                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                    | [ string](#string)                         | none                                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title             | [optional string](#string)                 | none                                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                 | none                                                                                                                                                                                                                                                                             |
| source\_connection                                                                                      | [ string](#string)                         | none                                                                                                                                                                                                                                                                             |
| target\_connection                                                                                      | [ string](#string)                         | none                                                                                                                                                                                                                                                                             |
| mode                                                                                                    | [ ReconciliationMode](#reconciliationmode) | none                                                                                                                                                                                                                                                                             |
| annotations                                                                                             | [repeated Annotation](#annotation)         | Resolved annotation list for this case. For suite-config summaries this is suite-level annotations + case-level annotations (deduped). For deployment summaries the deployment-level overlay is also merged in. Already deduplicated by (name, value); ready for direct display. |

### SuiteSchedule

(synq.agent.recon.v1.SuiteSchedule)

Schedule configuration for managed suites.

| Field                                                                                   | Type                           | Description                                                           |
| --------------------------------------------------------------------------------------- | ------------------------------ | --------------------------------------------------------------------- |
| timezone                                                                                | [ string](#string)             | IANA timezone, e.g. "Europe/Warsaw". Required when a schedule is set. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.cron | [ CronSchedule](#cronschedule) | none                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) type.ical | [ ICalSchedule](#icalschedule) | none                                                                  |

### DeleteSuiteConfigRequest

(synq.agent.recon.v1.DeleteSuiteConfigRequest)

| Field     | Type               | Description                            |
| --------- | ------------------ | -------------------------------------- |
| suite\_id | [ string](#string) | Suite ID to delete.                    |
| actor     | [ Actor](#actor)   | Actor performing the delete. Required. |

### DeleteSuiteConfigResponse

(synq.agent.recon.v1.DeleteSuiteConfigResponse)

### GetSuiteConfigRequest

(synq.agent.recon.v1.GetSuiteConfigRequest)

| Field     | Type               | Description                                                                                                       |
| --------- | ------------------ | ----------------------------------------------------------------------------------------------------------------- |
| suite\_id | [ string](#string) | Suite ID to look up. For managed suites this equals the suite name, for ad-hoc suites this is the generated UUID. |

### GetSuiteConfigResponse

(synq.agent.recon.v1.GetSuiteConfigResponse)

| Field         | Type                         | Description |
| ------------- | ---------------------------- | ----------- |
| suite\_config | [ SuiteConfig](#suiteconfig) | none        |

### GetSuiteConfigVersionRequest

(synq.agent.recon.v1.GetSuiteConfigVersionRequest)

| Field     | Type                     | Description        |
| --------- | ------------------------ | ------------------ |
| suite\_id | [ string](#string)       | Suite ID.          |
| state\_at | [ Timestamp](#timestamp) | Version timestamp. |

### GetSuiteConfigVersionResponse

(synq.agent.recon.v1.GetSuiteConfigVersionResponse)

| Field   | Type                                       | Description |
| ------- | ------------------------------------------ | ----------- |
| version | [ SuiteConfigVersion](#suiteconfigversion) | none        |

### ListSuiteConfigVersionsRequest

(synq.agent.recon.v1.ListSuiteConfigVersionsRequest)

| Field                                                                                                 | Type                               | Description                          |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------ |
| suite\_id                                                                                             | [ string](#string)                 | Suite ID to get version history for. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | Pagination parameters.               |

### ListSuiteConfigVersionsResponse

(synq.agent.recon.v1.ListSuiteConfigVersionsResponse)

| Field      | Type                                               | Description                                 |
| ---------- | -------------------------------------------------- | ------------------------------------------- |
| versions   | [repeated SuiteConfigVersion](#suiteconfigversion) | none                                        |
| page\_info | [ PageInfo](#pageinfo)                             | Pagination info for fetching the next page. |

### ListSuiteConfigsRequest

(synq.agent.recon.v1.ListSuiteConfigsRequest)

| Field                                                                                                             | Type                               | Description                                                                                               |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_connection\_name.connection\_name | [optional string](#string)         | Filter suites using a specific connection name. When empty, returns all.                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination             | [optional Pagination](#pagination) | Pagination parameters.                                                                                    |
| include\_adhoc                                                                                                    | [ bool](#bool)                     | When true, also include ad-hoc suite configs in the results. By default only managed suites are returned. |

### ListSuiteConfigsResponse

(synq.agent.recon.v1.ListSuiteConfigsResponse)

| Field          | Type                                 | Description                                 |
| -------------- | ------------------------------------ | ------------------------------------------- |
| suite\_configs | [repeated SuiteConfig](#suiteconfig) | none                                        |
| page\_info     | [ PageInfo](#pageinfo)               | Pagination info for fetching the next page. |

### ResumeFromRun

(synq.agent.recon.v1.ResumeFromRun)

ResumeFromRun turns an ad-hoc submission into a replay of a previous run:
either a re-validation ("do the differences it found still exist") or a
deeper drill of the mismatches it stopped at.

The suite comes from the parent run's audit log, not from a config load, so
the replay compares the same data the parent compared — template variables
keep the values they resolved to and a cutoff keeps the watermark it derived.
Credentials never come from an audit log: it records connection names only,
and those are bound to integrations exactly as for any other ad-hoc run
(connection\_mappings, else a workspace integration of the same name).

| Field                                                                                                     | Type                       | Description                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| parent\_invocation\_id                                                                                    | [ string](#string)         | Invocation id of the run to continue from. It must be a completed run in the caller's workspace whose audit log carries a suite snapshot.                                                                                                                                                                    |
| mode                                                                                                      | [ ResumeMode](#resumemode) | What to do with the parent's results.                                                                                                                                                                                                                                                                        |
| reconciliations                                                                                           | [repeated string](#string) | Restrict the replay to these reconciliation names. Empty replays every reconciliation of the parent that is eligible for the mode.                                                                                                                                                                           |
| reresolve                                                                                                 | [ bool](#bool)             | Re-derive every query from the suite instead of replaying the SQL the parent executed. This moves the comparison window to the current clock, so it answers "does the suite pass now" rather than "is that difference still there". Needed for a time-travel snapshot, which can otherwise never turn green. |
| include\_passed                                                                                           | [ bool](#bool)             | RESUME\_MODE\_RECHECK only: re-run reconciliations that already passed. The default narrows to the ones that did not, which is the point of a re-validation.                                                                                                                                                 |
| drill\_still\_mismatched                                                                                  | [ bool](#bool)             | RESUME\_MODE\_RECHECK only: drill into whatever still mismatches, as an ordinary run with run\_bisection does. A re-validation usually only needs the quick check, so this is opt-in.                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_threshold.threshold       | [optional int32](#int32)   | RESUME\_MODE\_DRILL\_DEEPER only: row count at which drilling stops, overriding the reconciliation's own. Lowering it is the usual reason to resume a bisection drill — the parent stopped at a coarser threshold.                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_extra\_depth.extra\_depth | [optional int32](#int32)   | RESUME\_MODE\_DRILL\_DEEPER only: how many further levels to drill below the resumed segments. Counted from the deepest resumed segment, so it means "this much deeper" rather than a budget the parent already spent. Absent leaves it unbounded.                                                           |
| additional\_group\_columns                                                                                | [repeated string](#string) | RESUME\_MODE\_DRILL\_DEEPER only: extra group columns to break each divergent aggregate group down by. An aggregate drill already visits every configured group column, so resuming an aggregate reconciliation needs at least one more column to make progress.                                             |

### SubmitAdhocSuiteRequest

(synq.agent.recon.v1.SubmitAdhocSuiteRequest)

| Field                                                                                               | Type                                                 | Description                                                                                                                   |
| --------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite.suite         | [optional ReconciliationSuite](#reconciliationsuite) | Inline suite configuration. Required when neither suite\_id nor resume\_from\_run is set.                                     |
| invocation\_id                                                                                      | [ string](#string)                                   | Client-generated invocation ID for idempotency. If an execution with this ID already exists, the call is a no-op.             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_id.suite\_id | [optional string](#string)                           | Reference to an existing managed suite (alternative to inline suite). When set, the suite config is loaded from the database. |
| connection\_mappings                                                                                | [repeated ConnectionMapping](#connectionmapping)     | Maps each connection name referenced by the suite to the integration that should provide credentials at execution time.       |

When omitted, the server attempts to resolve each connection name against a workspace integration of the same name (legacy behaviour). When the suite references connection names that the server cannot resolve, the call fails with FAILED\_PRECONDITION + a ConnectionResolutionFailure detail listing every unresolved name and candidate integrations, so the caller can prompt the user to bind them.

Both workspace-level (integration\_id) and user-level (user\_integration\_id) credentials are accepted here: - integration\_id requires SCOPE\_INTEGRATION\_EDIT on the caller. - user\_integration\_id requires a user identity in the calling context and the integration's allow\_reconciliation\_adhoc gate enabled. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_run\_bisection.run\_bisection | [optional bool](#bool) | When true (default), the runner drills into each mismatched reconciliation via bisection after the quick check fails. Set to false to stop after the quick check — useful for cheap smoke runs, or when the caller plans to trigger a manual drill later.

Per-reconciliation `bisection.enabled` still gates whether a given recon is eligible for drill, so this flag is the run-level off switch layered on top. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_execution\_timeout.execution\_timeout | [optional Duration](#duration) | Maximum wall-clock time for this ad-hoc run (quick check plus any bisection drill). A run that exceeds it is cancelled and marked failed. Absent uses the server default; the server clamps the effective value to a supported range. |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_resume\_from\_run.resume\_from\_run | [optional ResumeFromRun](#resumefromrun) | Continue a previous run instead of executing a suite from its config. Mutually compatible with neither suite nor suite\_id being set: the suite is rebuilt from the parent run's audit log. |
\| actor | [ Actor](#actor) | Actor submitting the run. Required. |

### SubmitAdhocSuiteResponse

(synq.agent.recon.v1.SubmitAdhocSuiteResponse)

| Field         | Type                         | Description                                                         |
| ------------- | ---------------------------- | ------------------------------------------------------------------- |
| suite\_config | [ SuiteConfig](#suiteconfig) | The stored suite config (includes the invocation\_id as suite\_id). |

### SuiteConfig

(synq.agent.recon.v1.SuiteConfig)

SuiteConfig represents the latest version of a reconciliation suite configuration.

| Field                                                                                                                 | Type                                                                 | Description                                                                |
| --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| suite\_id                                                                                                             | [ string](#string)                                                   | Unique identifier. Equals suite\_name for managed suites, UUID for ad-hoc. |
| suite\_name                                                                                                           | [ string](#string)                                                   | Human-readable suite name from ReconciliationSuite.name.                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_title.suite\_title             | [optional string](#string)                                           | none                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_description.suite\_description | [optional string](#string)                                           | none                                                                       |
| suite\_type                                                                                                           | [ string](#string)                                                   | "managed" or "adhoc".                                                      |
| suite                                                                                                                 | [ ReconciliationSuite](#reconciliationsuite)                         | The full suite configuration.                                              |
| connection\_names                                                                                                     | [repeated string](#string)                                           | Deduplicated connection names referenced by this suite.                    |
| reconciliation\_summaries                                                                                             | [repeated ReconciliationConfigSummary](#reconciliationconfigsummary) | Summary of each reconciliation in the suite.                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_updated\_by.updated\_by               | [optional Actor](#actor)                                             | Who last updated this config.                                              |
| state\_at                                                                                                             | [ Timestamp](#timestamp)                                             | When this version was created.                                             |

### SuiteConfigVersion

(synq.agent.recon.v1.SuiteConfigVersion)

SuiteConfigVersion represents a historical version of a suite config.

| Field                                                                                                                 | Type                                                                 | Description                                   |
| --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | --------------------------------------------- |
| suite\_id                                                                                                             | [ string](#string)                                                   | none                                          |
| suite\_name                                                                                                           | [ string](#string)                                                   | none                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_title.suite\_title             | [optional string](#string)                                           | none                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_suite\_description.suite\_description | [optional string](#string)                                           | none                                          |
| suite\_type                                                                                                           | [ string](#string)                                                   | none                                          |
| suite                                                                                                                 | [ ReconciliationSuite](#reconciliationsuite)                         | The full suite configuration at this version. |
| connection\_names                                                                                                     | [repeated string](#string)                                           | Connection names at this version.             |
| reconciliation\_summaries                                                                                             | [repeated ReconciliationConfigSummary](#reconciliationconfigsummary) | Reconciliation summaries at this version.     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_updated\_by.updated\_by               | [optional Actor](#actor)                                             | Who made this change.                         |
| state\_at                                                                                                             | [ Timestamp](#timestamp)                                             | When this version was created.                |
| deleted                                                                                                               | [ bool](#bool)                                                       | Whether this version represents a deletion.   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary       | [optional string](#string)                                           | Human-readable summary of what changed.       |

### UpsertSuiteConfigRequest

(synq.agent.recon.v1.UpsertSuiteConfigRequest)

| Field                                                                                                           | Type                                         | Description                                                        |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------ |
| suite                                                                                                           | [ ReconciliationSuite](#reconciliationsuite) | The suite configuration to store. suite\_id will equal suite.name. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_change\_summary.change\_summary | [optional string](#string)                   | Human-readable summary of what changed in this version.            |
| actor                                                                                                           | [ Actor](#actor)                             | Actor performing the upsert. Required.                             |

### UpsertSuiteConfigResponse

(synq.agent.recon.v1.UpsertSuiteConfigResponse)

| Field         | Type                         | Description              |
| ------------- | ---------------------------- | ------------------------ |
| suite\_config | [ SuiteConfig](#suiteconfig) | The stored suite config. |

### CutoffApplyConfig

(synq.agent.recon.v1.CutoffApplyConfig)

CutoffApplyConfig controls how the resolved cutoff value is applied as a WHERE filter.

| Field                                                                                             | Type                       | Description                                                                   |
| ------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_column.column     | [optional string](#string) | Column to filter on. When not set, uses the derivation column from that side. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_operator.operator | [optional string](#string) | Comparison operator. Default: "≤".                                            |

### CutoffConfig

(synq.agent.recon.v1.CutoffConfig)

CutoffConfig defines a dynamic cutoff filter for sync reconciliation.
It derives a watermark value from the actual data (e.g., MAX(created\_at))
to automatically exclude rows that haven't been synced yet.

The cutoff is resolved at runtime before comparison queries run:

1. Derive watermark(s) from source and/or target via aggregate queries.
2. Combine them (default: MIN of both sides).
3. Optionally truncate to a time boundary and apply an offset.
4. Apply as WHERE filter to both source and target queries.

| Field                                                                                                       | Type                                             | Description                                                                                                                                                |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source.source               | [optional CutoffSideConfig](#cutoffsideconfig)   | Per-side watermark derivation config for source. When not set, derives from target only.                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_target.target               | [optional CutoffSideConfig](#cutoffsideconfig)   | Per-side watermark derivation config for target. When not set, derives from source only.                                                                   |
| combine                                                                                                     | [ CutoffCombineStrategy](#cutoffcombinestrategy) | How to combine watermarks when both sides are configured. Default: MIN (use the smaller watermark for safety). Ignored when only one side has a watermark. |
| truncate                                                                                                    | [ CutoffTruncateUnit](#cutofftruncateunit)       | Truncate the combined watermark to a time boundary. Example: HOUR truncates 08:47:12 to 08:00:00. Applied after combining, before offset.                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_offset.offset               | [optional Duration](#duration)                   | Time offset applied after truncation. Negative durations subtract from the cutoff (safety buffer). Example: "-30m" shifts the cutoff 30 minutes earlier.   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_apply\_source.apply\_source | [optional CutoffApplyConfig](#cutoffapplyconfig) | How to apply the cutoff as a WHERE filter on the source side. When not set, uses the source derivation column with ≤ operator.                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_apply\_target.apply\_target | [optional CutoffApplyConfig](#cutoffapplyconfig) | How to apply the cutoff as a WHERE filter on the target side. When not set, uses the target derivation column with ≤ operator.                             |

### CutoffSideConfig

(synq.agent.recon.v1.CutoffSideConfig)

CutoffSideConfig configures watermark derivation for one side (source or target).

There are two modes:

1. Column + aggregate (default): auto-generates a watermark query from the dataset.
   For table-based datasets, queries the table directly (the column does NOT need
   to be in the reconciliation column list). For query-based datasets, wraps the
   query as a subquery (the column MUST be in the query's SELECT list).
2. Custom query: provide a SQL query that returns a single row with a "watermark" column.
   Use this when the auto-generated query doesn't work (e.g., complex joins, custom logic).

After resolution at runtime, the `query` field is always populated with the actual SQL
that was executed, regardless of which mode was used. This ensures the audit log captures
the exact query for reproducibility.

| Field                                                                                       | Type                                                 | Description                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| column                                                                                      | [ string](#string)                                   | Column to derive the watermark from (e.g., "created\_at", "synced\_at"). Required when query is not set.                                                                                                                                    |
| aggregate                                                                                   | [ CutoffAggregateFunction](#cutoffaggregatefunction) | Aggregate function to derive the watermark. Default: MAX. Only used when query is not set.                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_query.query | [optional string](#string)                           | Custom SQL query for watermark derivation. Must return a single row with a "watermark" column. When not set, auto-generated from the dataset at runtime. After resolution, this field is populated with the actual query that was executed. |

### AggregateConfig

(synq.agent.recon.v1.AggregateConfig)

AggregateConfig defines aggregate comparison settings.
Used when mode is AGGREGATE to compare grouped measures between source and target.

| Field                                                                                                 | Type                                         | Description                                                                                                                |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| measures                                                                                              | [repeated Measure](#measure)                 | Measures to compare between source and target. Each measure defines a column and one or more aggregate functions to apply. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_thresholds.thresholds | [optional ThresholdConfig](#thresholdconfig) | Tolerance thresholds for aggregate comparisons. When not set, exact match is required for all measures.                    |
| group\_columns                                                                                        | [repeated string](#string)                   | Columns defining the drill-down hierarchy for aggregate comparison. Falls back to key\_column if not set.                  |

Single column: flat GROUP BY comparison. group\_columns: \["region"] → GROUP BY region

Multiple columns: cumulative GROUP BY drill-down, pruning matched groups at each level to focus on divergent branches. group\_columns: \["region", "city", "store"] → Level 0: GROUP BY region → Level 1: GROUP BY region, city (only for mismatched regions) → Level 2: GROUP BY region, city, store (only for mismatched cities) |

### BisectionConfig

(synq.agent.recon.v1.BisectionConfig)

BisectionConfig controls the bisection drill-down algorithm that recursively
splits the key range to locate individual mismatched rows.
Only used in ROW\_CHECKSUM mode.

| Field                                                                                                     | Type                                           | Description                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| enabled                                                                                                   | [ bool](#bool)                                 | Whether bisection drill-down is enabled. When false, only the quick-check (count + checksum) runs — mismatches are detected but not localized to specific rows.                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_factor.factor             | [optional int32](#int32)                       | Branching factor: how many segments each level is split into. Higher values find mismatches faster (fewer levels) but issue more queries per level. Default: 32. Typical range: 4–64.                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_threshold.threshold       | [optional int32](#int32)                       | Row count threshold: stop bisecting when a segment has fewer rows than this. Lower values find more precise mismatch locations but issue more queries. Default: 16384. Set to 1 to drill down to individual rows. |
| strategy                                                                                                  | [ SegmentationStrategy](#segmentationstrategy) | Segmentation strategy for splitting key ranges.                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_time\_column.time\_column | [optional string](#string)                     | Column for time-based partitioning. Required when strategy is TIME. Must be a timestamp, date, or datetime column in the dataset.                                                                                 |
| time\_granularity                                                                                         | [ TimeGranularity](#timegranularity)           | Granularity for time-based segmentation. Default: DAY. Controls the width of each time bucket when strategy is TIME.                                                                                              |

### ConnectionQueries

(synq.agent.recon.v1.ConnectionQueries)

ConnectionQueries associates SQL queries with a specific connection.
Used for setup and teardown blocks at both suite and reconciliation level.

| Field      | Type                       | Description                                                                                                         |
| ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| connection | [ string](#string)         | Connection name to execute these queries on. Must reference a connection configured in the runner's connection map. |
| queries    | [repeated string](#string) | SQL queries to execute in order on this connection.                                                                 |

### ErrorHandlingConfig

(synq.agent.recon.v1.ErrorHandlingConfig)

ErrorHandlingConfig controls retry and timeout behavior for database queries.
Applies to all queries within a reconciliation (setup, comparison, teardown).

| Field                                                                                                                         | Type                           | Description                                                                                                                                                                            |
| ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_query\_timeout.query\_timeout                 | [optional Duration](#duration) | Per-query timeout. When a query exceeds this duration, it is cancelled. Default: no per-query limit (only the global run timeout applies).                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_max\_retries.max\_retries                     | [optional int32](#int32)       | Maximum retry attempts for transient query failures. The total number of attempts is max\_retries + 1 (initial + retries). Default: 2.                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_retry\_initial\_delay.retry\_initial\_delay   | [optional Duration](#duration) | Initial backoff delay before the first retry. Subsequent retries multiply this by retry\_backoff\_factor. Default: 1s.                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_retry\_backoff\_factor.retry\_backoff\_factor | [optional double](#double)     | Backoff multiplier applied after each retry. Delay for attempt N = retry\_initial\_delay \* retry\_backoff\_factor^(N-1). Must be ≥ 1.0 to ensure delays don't decrease. Default: 2.0. |

### Measure

(synq.agent.recon.v1.Measure)

Measure defines a column and aggregate function(s) to compare
between source and target datasets.
A single measure with multiple functions expands into multiple comparisons
(e.g., column="amount" functions=\[SUM, AVG] produces "SUM(amount)" and "AVG(amount)").

| Field     | Type                                             | Description                                                                                                           |
| --------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| column    | [ string](#string)                               | Column name to aggregate. Must exist in both source and target datasets (after column mapping is applied).            |
| functions | [repeated AggregateFunction](#aggregatefunction) | Aggregate functions to apply to this column. Multiple functions produce multiple measure comparisons from one column. |

### Reconciliation

(synq.agent.recon.v1.Reconciliation)

Reconciliation defines a single reconciliation scenario comparing data
between a source and target dataset. Each reconciliation runs independently
and produces its own pass/mismatch/fail result.

| Field                                                                                                                       | Type                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                                        | [ string](#string)                                   | Unique machine identifier within the suite. Alphanumerics, hyphens, and underscores. May be a UUID.                                                                                                                                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title                                 | [optional string](#string)                           | Human-readable title. Displayed in reports. Defaults to name when not set.                                                                                                                                                                                                                                                                                                                                                                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description                     | [optional string](#string)                           | Optional longer description explaining what this reconciliation validates.                                                                                                                                                                                                                                                                                                                                                                                                  |
| source                                                                                                                      | [ Dataset](#dataset)                                 | Source dataset to compare from — the "expected" or "authoritative" side.                                                                                                                                                                                                                                                                                                                                                                                                    |
| target                                                                                                                      | [ Dataset](#dataset)                                 | Target dataset to compare against — the "actual" or "replicated" side.                                                                                                                                                                                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_key\_column.key\_column                     | [optional string](#string)                           | Deprecated: use key\_columns instead. Single primary key column used for ordering and segmentation during bisection. Retained for backward compatibility — existing single-key configs and stored audit logs keep working. When key\_columns is set, this field is ignored. Readers should resolve the effective key via key\_columns first, falling back to this.                                                                                                          |
| key\_columns                                                                                                                | [repeated string](#string)                           | Ordered list of key columns used for ordering and segmentation during bisection. Supports composite (multi-column) keys; the bisection orders and range-filters on the column tuple so the engine can prune via a matching primary key / index. A single-element list is equivalent to setting key\_column. Required for ROW\_CHECKSUM and ROW\_COUNT modes (this or the deprecated key\_column). Optional in AGGREGATE mode when group\_columns provides the grouping key. |
| mode                                                                                                                        | [ ReconciliationMode](#reconciliationmode)           | Comparison mode controlling how source and target are compared.                                                                                                                                                                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_hash\_algorithm.hash\_algorithm             | [optional HashAlgorithm](#hashalgorithm)             | Hash algorithm for row checksums in ROW\_CHECKSUM mode. When unset, auto-negotiates the best common algorithm between the source and target database dialects.                                                                                                                                                                                                                                                                                                              |
| column\_mapping                                                                                                             | [repeated ColumnMapping](#columnmapping)             | Explicit column name mapping between source and target. Only columns with different names need mapping — identical names (or case-insensitive matches) are matched automatically.                                                                                                                                                                                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_case\_insensitive.case\_insensitive         | [optional bool](#bool)                               | When true, automatically matches columns differing only in letter case (e.g., user\_id matches USER\_ID). Defaults to true when not set. Set to false to require exact case matching.                                                                                                                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_bisection.bisection                         | [optional BisectionConfig](#bisectionconfig)         | Bisection drill-down configuration for ROW\_CHECKSUM mode. Controls how the key range is recursively split to locate mismatches. When not set, uses sensible defaults (factor=32, threshold=16384).                                                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_reporting.reporting                         | [optional ReportingConfig](#reportingconfig)         | Reporting output configuration controlling how much detail is included in the audit log for mismatched rows.                                                                                                                                                                                                                                                                                                                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_aggregate.aggregate                         | [optional AggregateConfig](#aggregateconfig)         | Aggregate comparison settings. Required when mode is AGGREGATE. Defines which measures to compare and tolerance thresholds.                                                                                                                                                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error\_handling.error\_handling             | [optional ErrorHandlingConfig](#errorhandlingconfig) | Error handling and retry configuration for database queries. Controls timeouts and retry behavior for transient failures.                                                                                                                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_window\.window                              | [optional WindowConfig](#windowconfig)               | Time window for incremental comparison. When set, automatically provides a \{\{window\_start}} template variable for filtering queries to a recent time range.                                                                                                                                                                                                                                                                                                              |
| setup                                                                                                                       | [repeated ConnectionQueries](#connectionqueries)     | Setup queries run before this specific reconciliation. Executes after suite-level setup but before data comparison.                                                                                                                                                                                                                                                                                                                                                         |
| teardown                                                                                                                    | [repeated ConnectionQueries](#connectionqueries)     | Teardown queries run after this specific reconciliation completes.                                                                                                                                                                                                                                                                                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_teardown\_on\_failure.teardown\_on\_failure | [optional bool](#bool)                               | Whether teardown runs on failure for this reconciliation. When not set, inherits from suite-level teardown\_on\_failure.                                                                                                                                                                                                                                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_ignore\_setup\_errors.ignore\_setup\_errors | [optional bool](#bool)                               | When true, logs setup errors as warnings and continues. When not set, inherits from suite-level ignore\_setup\_errors.                                                                                                                                                                                                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cutoff.cutoff                               | [optional CutoffConfig](#cutoffconfig)               | Dynamic cutoff filter for sync reconciliation. Derives a watermark from actual data to exclude rows not yet synced. Applied as WHERE filter to both source and target queries at runtime.                                                                                                                                                                                                                                                                                   |
| annotations                                                                                                                 | [repeated Annotation](#annotation)                   | Case-level annotations. Merged with suite-level annotations and deployment-level annotations at promote time, then exposed on the case asset (PromotedReconCaseMetadata).                                                                                                                                                                                                                                                                                                   |

### ReconciliationSuite

(synq.agent.recon.v1.ReconciliationSuite)

ReconciliationSuite is the root configuration for a reconciliation suite.
It defines template variables and one or more reconciliation scenarios
that compare data between source and target databases.
Database connections are configured separately and referenced by name.

| Field                                                                                                   | Type                                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                    | [ string](#string)                               | Short machine identifier for the suite. Unique machine identifier for the suite, used as the stable key for tracking runs over time. Alphanumerics, hyphens, and underscores. May be a UUID.                                                                                                                                                                                                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title             | [optional string](#string)                       | Human-readable title for the suite. Displayed in dashboards and reports. Defaults to name when not set.                                                                                                                                                                                                                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                       | Optional longer description of the suite's purpose.                                                                                                                                                                                                                                                                                                                                                                                            |
| reconciliations                                                                                         | [repeated Reconciliation](#reconciliation)       | Reconciliation scenarios to execute. Each reconciliation compares data between a source and target dataset.                                                                                                                                                                                                                                                                                                                                    |
| setup                                                                                                   | [repeated ConnectionQueries](#connectionqueries) | Setup queries run once before all reconciliations begin. Use for creating temp tables, loading fixtures, or preparing the environment. Queries execute in order; all connections run sequentially.                                                                                                                                                                                                                                             |
| teardown                                                                                                | [repeated ConnectionQueries](#connectionqueries) | Teardown queries run once after all reconciliations complete. Use for cleaning up temp tables or restoring state.                                                                                                                                                                                                                                                                                                                              |
| teardown\_on\_failure                                                                                   | [ bool](#bool)                                   | Whether teardown runs even when reconciliations fail with infrastructure errors. When false (default), teardown is skipped on failure to preserve state for debugging.                                                                                                                                                                                                                                                                         |
| ignore\_setup\_errors                                                                                   | [ bool](#bool)                                   | When true, logs setup query errors as warnings and continues execution instead of aborting the run. Useful when setup creates IF NOT EXISTS objects.                                                                                                                                                                                                                                                                                           |
| variables                                                                                               | [map VariablesEntry](#variablesentry)            | Template variables for query interpolation via \{\{variable\_name}} syntax. Values can be literal strings or template expressions: - Literal: "2026-01-01" - Time expression: "\{\{today - 30d}}", "\{\{now - 2h}}" - Built-in: "\{\{now}}", "\{\{today}}", "\{\{window\_start}}" Variables are resolved once at the start of the run and frozen.                                                                                              |
| strict\_time\_references                                                                                | [ bool](#bool)                                   | When true, time reference detection (e.g. NOW(), CURRENT\_DATE, GETDATE() in queries) returns an error instead of a warning. Prevents non-deterministic queries that produce different results on each run.                                                                                                                                                                                                                                    |
| annotations                                                                                             | [repeated Annotation](#annotation)               | Suite-level annotations. Each annotation is a name with zero or more string values. Applied to the deployed suite asset and inherited by every reconciliation case under the suite. Merged with per-case annotations and deployment-level annotations at promote time — the final, deduplicated list is exposed on PromotedReconSuiteMetadata / PromotedReconCaseMetadata and surfaced to the rest of the SYNQ platform via EntityAnnotations. |

### ReconciliationSuite.VariablesEntry

(synq.agent.recon.v1.ReconciliationSuite.VariablesEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### ReportingConfig

(synq.agent.recon.v1.ReportingConfig)

ReportingConfig controls the level of detail included in reconciliation output
for mismatched rows. Higher detail levels reveal more data but may have
privacy implications.

| Field                                                                                                       | Type                                         | Description                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| level                                                                                                       | [ MismatchDetailLevel](#mismatchdetaillevel) | Output detail level for mismatched rows.                                                                                                                                                                                                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sample\_limit.sample\_limit | [optional int32](#int32)                     | Maximum number of sample rows to include in output per mismatch segment. Limits the size of the audit log when there are many mismatches. When not set, all mismatched rows within the reporting level are included.                                     |
| consent\_acknowledged                                                                                       | [ bool](#bool)                               | Explicit acknowledgment that detailed row data may be included in the audit log. Required when level is DETAILED to prevent accidental exposure of sensitive data. The caller must set this to true to confirm they understand the privacy implications. |

### WindowConfig

(synq.agent.recon.v1.WindowConfig)

WindowConfig defines a time window for incremental comparison.
When configured, automatically provides a \{\{window\_start}} template variable
that resolves to (current\_time - lookback). Use this in query WHERE clauses
to limit comparison to recent data.

| Field                                                                                         | Type                               | Description                                                                                                                                                       |
| --------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_column.column | [optional string](#string)         | Column being windowed. Informational metadata for the audit trail — the actual filtering is done via the \{\{window\_start}} variable in your query WHERE clause. |
| lookback                                                                                      | [ Duration](#duration)             | How far back to look from the current time. Defines the window as \[now - lookback, now]. Examples: "336h" (14 days), "2h", "720h" (30 days).                     |
| strategy                                                                                      | [ WindowStrategy](#windowstrategy) | Windowing strategy controlling how boundaries are computed.                                                                                                       |

### SYNQ

(synq.agent.v1.SYNQ)

SYNQ contains authentication and connection details for the Coalesce Quality platform

| Field            | Type               | Description                                      |
| ---------------- | ------------------ | ------------------------------------------------ |
| client\_id       | [ string](#string) | Client ID for OAuth authentication               |
| client\_secret   | [ string](#string) | Client secret for OAuth authentication           |
| endpoint         | [ string](#string) | Coalesce Quality API agent endpoint (host:port)  |
| ingest\_endpoint | [ string](#string) | Coalesce Quality API ingest endpoint (host:port) |
| oauth\_url       | [ string](#string) | OAuth authentication URL                         |

### Connection

(synq.agent.dwh.v1.Connection)

Connection represents a database connection configuration

| Field                                                                                           | Type                               | Description                                                        |
| ----------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------ |
| name                                                                                            | [ string](#string)                 | Name of the connection                                             |
| disabled                                                                                        | [ bool](#bool)                     | none                                                               |
| parallelism                                                                                     | [ int32](#int32)                   | How many queries to DWH can be executed in parallel, defaults to 2 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.bigquery   | [ BigQueryConf](#bigqueryconf)     | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.clickhouse | [ ClickhouseConf](#clickhouseconf) | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.databricks | [ DatabricksConf](#databricksconf) | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.mysql      | [ MySQLConf](#mysqlconf)           | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.postgres   | [ PostgresConf](#postgresconf)     | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.redshift   | [ RedshiftConf](#redshiftconf)     | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.snowflake  | [ SnowflakeConf](#snowflakeconf)   | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.trino      | [ TrinoConf](#trinoconf)           | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.mssql      | [ MSSQLConf](#mssqlconf)           | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.oracle     | [ OracleConf](#oracleconf)         | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.duckdb     | [ DuckDBConf](#duckdbconf)         | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.athena     | [ AthenaConf](#athenaconf)         | none                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) config.fabric     | [ FabricConf](#fabricconf)         | none                                                               |

### AthenaConf

(synq.agent.dwh.v1.AthenaConf)

Amazon Athena specific configuration.

Athena is serverless: there is no host/port — the endpoint is implied by
the AWS region. Queries run inside a workgroup that owns the per-query
data-scan cap and the S3 query result location. The configured workgroup
MUST have ResultConfiguration.OutputLocation set, otherwise every Athena
query fails. Setting EnforceWorkGroupConfiguration=true on the workgroup
is strongly recommended so per-query overrides cannot escape the cap.

Authentication

AthenaConf carries an AWS credential source in one of three ways:

1. Static IAM access key — set access\_key\_id and secret\_access\_key
   (and optionally session\_token if those keys are short-lived STS
   credentials).
2. Shared-config profile — set aws\_profile to a named profile from
   \~/.aws/credentials or \~/.aws/config. Useful when the agent host
   already has AWS CLI configured.
3. AWS default credential chain — leave all of the above empty. The
   AWS SDK then uses environment variables (AWS\_ACCESS\_KEY\_ID /
   AWS\_SECRET\_ACCESS\_KEY / AWS\_PROFILE), shared config, or the EC2 /
   ECS / EKS instance role attached to the agent host.

If more than one source is provided, they resolve in the order above —
explicit static keys win over a profile, profile wins over the chain.

role\_arn is independent of the source choice. When set, the executor
uses one of the three sources as the calling identity and assumes
role\_arn via STS for every Athena/Glue API call. external\_id is
included in the AssumeRole request when set; required by trust policies
that mandate it.

Validation: access\_key\_id and secret\_access\_key must be set as a pair
(one without the other is rejected); session\_token may only be set when
both keys are also set.

| Field                       | Type                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| --------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| region                      | [ string](#string)           | AWS region hosting the Athena service and Glue Data Catalog.                                                                                                                                                                                                                                                                                                                                                                                                                        |
| workgroup                   | [ string](#string)           | Athena workgroup. Defaults to "primary" when empty. Must have a ResultConfiguration.OutputLocation configured.                                                                                                                                                                                                                                                                                                                                                                      |
| catalog                     | [ string](#string)           | Glue Data Catalog name. Defaults to "AwsDataCatalog" when empty. Override only when using federated catalogs backed by Lambda connectors.                                                                                                                                                                                                                                                                                                                                           |
| access\_key\_id             | [ string](#string)           | AWS access key ID for static IAM credentials. Required together with secret\_access\_key.                                                                                                                                                                                                                                                                                                                                                                                           |
| secret\_access\_key         | [ string](#string)           | AWS secret access key. Required together with access\_key\_id.                                                                                                                                                                                                                                                                                                                                                                                                                      |
| session\_token              | [ string](#string)           | STS session token, set only when access\_key\_id and secret\_access\_key are short-lived STS credentials. Ignored otherwise.                                                                                                                                                                                                                                                                                                                                                        |
| aws\_profile                | [ string](#string)           | Named profile from the AWS shared credentials / config files (\~/.aws/credentials, \~/.aws/config). Useful when the agent host already has AWS CLI configured.                                                                                                                                                                                                                                                                                                                      |
| role\_arn                   | [ string](#string)           | IAM role to assume via STS for every Athena / Glue API call. The calling identity comes from access\_key\_id, aws\_profile, or the default credential chain — whichever is configured.                                                                                                                                                                                                                                                                                              |
| external\_id                | [ string](#string)           | ExternalId included in the AssumeRole request. Set when the role's trust policy requires it.                                                                                                                                                                                                                                                                                                                                                                                        |
| role\_session\_name         | [ string](#string)           | Session name attached to the AssumeRole request. Defaults to "synq-athena-agent".                                                                                                                                                                                                                                                                                                                                                                                                   |
| scope                       | [ ScopeFilter](#scopefilter) | Scope filter for include/exclude filtering by Glue catalog, Glue database, and table. Mapping (mirrors BigQuery's project/dataset shape): ScopeRule.database = Glue Data Catalog name (almost always 'AwsDataCatalog') ScopeRule.schema = Glue database — what users typically filter on ScopeRule.table = Glue table / view name When include rules constrain schemas, the IAM principal does not need catalog-wide glue:GetDatabases — only glue:GetDatabase on the listed names. |
| use\_show\_create\_table    | [ bool](#bool)               | Use SHOW CREATE TABLE to retrieve full table DDL (CTAS bodies, Iceberg TBLPROPERTIES, Hive external LOCATION/SerDe). One Athena query per table — billed at the 10MB scan minimum each.                                                                                                                                                                                                                                                                                             |
| use\_show\_create\_view     | [ bool](#bool)               | Use SHOW CREATE VIEW to retrieve full view DDL instead of the rewritten body from information\_schema.views.view\_definition.                                                                                                                                                                                                                                                                                                                                                       |
| use\_iceberg\_metrics\_scan | [ bool](#bool)               | For Iceberg tables, fan out one Athena query per table to read row counts and total file size from the table's `$files` / `$snapshots` / `$partitions` metadata tables. Without this, Iceberg tables only have metrics when the customer has run ANALYZE TABLE COMPUTE STATISTICS (Glue parameters). Hive external tables are unaffected. Each call is one Athena query (\~\$0.00005 at the 10MB scan minimum).                                                                     |

### BigQueryConf

(synq.agent.dwh.v1.BigQueryConf)

BigQuery specific configuration

| Field                       | Type                       | Description                                                                                                                                                                                                                                                                                 |
| --------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| project\_id                 | [ string](#string)         | GCP project ID                                                                                                                                                                                                                                                                              |
| service\_account\_key       | [ string](#string)         | Service account key JSON                                                                                                                                                                                                                                                                    |
| service\_account\_key\_file | [ string](#string)         | Location of service account key file                                                                                                                                                                                                                                                        |
| region                      | [ string](#string)         | Region for BigQuery resources                                                                                                                                                                                                                                                               |
| datasets                    | [repeated string](#string) | Explicit list of dataset names to scrape (e.g., \['analytics', 'mart\_core']). When set, only these datasets are queried — the service account does not need project-level bigquery.datasets.list permission. When empty, all visible datasets in the project are discovered automatically. |

### ClickhouseClusterConf

(synq.agent.dwh.v1.ClickhouseClusterConf)

How metadata reads address ClickHouse system tables.

System tables are per-node, so on a service with more than one replica a plain
read reflects whichever replica answered rather than the whole warehouse.

| Field | Type                                             | Description                                                                                                                                                                                                          |
| ----- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| mode  | [ ClickhouseClusterMode](#clickhouseclustermode) | none                                                                                                                                                                                                                 |
| name  | [ string](#string)                               | Cluster to read through, as named under remote\_servers in the ClickHouse configuration. `SELECT DISTINCT cluster FROM system.clusters` lists what a server has. Empty means "default". Ignored in single-node mode. |

### ClickhouseConf

(synq.agent.dwh.v1.ClickhouseConf)

| Field           | Type                                             | Description                                                                                                                                                                                                                                                                                                                                                                                        |
| --------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| host            | [ string](#string)                               | Host address                                                                                                                                                                                                                                                                                                                                                                                       |
| port            | [ int32](#int32)                                 | Port number (default: 9000 for native protocol)                                                                                                                                                                                                                                                                                                                                                    |
| database        | [ string](#string)                               | Database the connection opens with, so unqualified table names in a query resolve against it. It does not restrict what is scraped: metadata is read from system tables and covers every database the user can see, whatever this says. Leave it empty to open on "default".                                                                                                                       |
| username        | [ string](#string)                               | Username for authentication                                                                                                                                                                                                                                                                                                                                                                        |
| password        | [ string](#string)                               | Password for authentication                                                                                                                                                                                                                                                                                                                                                                        |
| allow\_insecure | [ bool](#bool)                                   | Whether to use disable SSL for connection                                                                                                                                                                                                                                                                                                                                                          |
| settings        | [map SettingsEntry](#settingsentry)              | ClickHouse server settings applied to every connection, written as they would be in a DSN query string (e.g. "max\_execution\_time": "300"). Values are typed the way ClickHouse types them in a connection string: "true" and "false" become 1 and 0, whole numbers become integers, anything else is passed through as text. A name given here replaces the value the agent would otherwise use. |
| cluster         | [ ClickhouseClusterConf](#clickhouseclusterconf) | How ClickHouse system tables are read. Omit to keep reading across a cluster named "default", which every ClickHouse Cloud service provides.                                                                                                                                                                                                                                                       |
| instance\_name  | [ string](#string)                               | Name this ClickHouse is published under, and the top element of every path and breadcrumb its tables appear in — `prod`, `staging`, `eu-analytics`.                                                                                                                                                                                                                                                |

ClickHouse has no container above a database, so something has to name the service itself. Left empty, that is the connection host, which is correct but unreadable for a ClickHouse Cloud endpoint; a name given here replaces it.

Two connections to the same service must give the same name, and a name is the identity of everything scraped through it: changing it republishes those tables under new paths, and the old ones are no longer produced. Pick one per service and keep it. |

### ClickhouseConf.SettingsEntry

(synq.agent.dwh.v1.ClickhouseConf.SettingsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### DatabricksConf

(synq.agent.dwh.v1.DatabricksConf)

| Field                                                                                                     | Type                       | Description |
| --------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| workspace\_url                                                                                            | [ string](#string)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_auth\_token.auth\_token   | [optional string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_auth\_client.auth\_client | [optional string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_auth\_secret.auth\_secret | [optional string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_warehouse.warehouse       | [optional string](#string) | none        |
| refresh\_table\_metrics                                                                                   | [ bool](#bool)             | none        |
| refresh\_table\_metrics\_use\_scan                                                                        | [ bool](#bool)             | none        |
| fetch\_table\_tags                                                                                        | [ bool](#bool)             | none        |
| use\_show\_create\_table                                                                                  | [ bool](#bool)             | none        |

### DuckDBConf

(synq.agent.dwh.v1.DuckDBConf)

DuckDB / MotherDuck specific configuration.
Supports two modes:

1. Local/embedded: set database to a file path (e.g. "/tmp/my.duckdb") or ":memory:"
2. MotherDuck (cloud): set motherduck\_account and motherduck\_token

| Field               | Type               | Description                                                                                 |
| ------------------- | ------------------ | ------------------------------------------------------------------------------------------- |
| database            | [ string](#string) | Local database path (file path or ":memory:"). Mutually exclusive with motherduck\_account. |
| motherduck\_account | [ string](#string) | MotherDuck account name. Requires motherduck\_token.                                        |
| motherduck\_token   | [ string](#string) | MotherDuck authentication token. Required when motherduck\_account is set.                  |

### FabricConf

(synq.agent.dwh.v1.FabricConf)

Microsoft Fabric Warehouse / Lakehouse SQL analytics endpoint configuration.

Fabric speaks T-SQL over TDS (like SQL Server) but is deliberately its own
integration with a minimal, opinionated surface: the connection always uses
TLS on port 1433 and authenticates with a Microsoft Entra ID service principal
(Fabric rejects SQL logins entirely). Callers therefore only supply the
endpoint, the warehouse name, and the service-principal credentials — the
azuread ActiveDirectoryServicePrincipal workflow and encryption settings are
fixed internally so there is nothing to guess.

For hosted deployments that mint their own Entra token (managed identity /
workload-identity federation), set access\_token instead of client\_id +
client\_secret.

| Field          | Type                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| -------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| host           | [ string](#string)           | Workspace SQL analytics endpoint host, e.g. "\<workspace-id>.datawarehouse.fabric.microsoft.com".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| database       | [ string](#string)           | Default execution database — the context in which *unqualified* ad-hoc / monitor SQL resolves. Optional: defaults to "master" (the always-present workspace entry point). Metadata scrapping and generated metrics SQL are fully database-qualified via cross-database queries, so this only affects unqualified queries. It is a different axis from `databases` (which databases to scrape).                                                                                                                                                                                                                                                      |
| scope          | [ ScopeFilter](#scopefilter) | Include/exclude filter over the workspace's databases/schemas/tables (ScopeRule.database = Fabric database/warehouse, .schema = schema, .table = table). The canonical scope encoding (as AthenaConf uses); unset means the whole workspace. A per-call scope can only narrow within this, never escape it.                                                                                                                                                                                                                                                                                                                                         |
| client\_id     | [ string](#string)           | Entra application (client) ID of the service principal (default auth), or the user-assigned identity client ID when auth\_type is "managed\_identity".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| client\_secret | [ string](#string)           | Service principal client secret.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| tenant\_id     | [ string](#string)           | Entra tenant (directory) ID. Optional: inferred from the endpoint when empty; set it when the server-supplied authority is not the SP's home tenant.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| access\_token  | [ string](#string)           | Pre-acquired Entra OAuth access token for the SQL scope ([https://database.windows.net/.default](https://database.windows.net/.default)). When set, takes precedence over all other authentication methods — for managed identity / workload-identity hosts.                                                                                                                                                                                                                                                                                                                                                                                        |
| auth\_type     | [ string](#string)           | Authentication method, matched case-insensitively. Empty defaults to a service principal (client\_id + client\_secret). The ambient modes below authenticate as the host's own Azure identity with no stored credential and are intended for on-prem agents (opt-in — never engaged unless named): - "azure\_cli": reuse an interactive `az login` session (local execution) - "default": DefaultAzureCredential chain (managed identity → env → workload identity → az CLI) - "managed\_identity": Azure managed identity (set client\_id for a user-assigned identity) Canonical values are lower-case (the scrapper matches case-insensitively). |

### MSSQLConf

(synq.agent.dwh.v1.MSSQLConf)

Microsoft SQL Server / Azure SQL Database specific configuration.
SQL Server is database-scoped — each connection targets a single database.

Authentication methods (in priority order):

1. access\_token: pre-acquired Azure AD OAuth token
2. fed\_auth: Azure AD federated authentication (with optional username/password)
3. username + password: standard SQL Server Authentication

| Field                   | Type               | Description                                                                                                                                                                                                                                |
| ----------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| host                    | [ string](#string) | Host address or IP. For Azure SQL: e.g. "yourserver.database.windows.net"                                                                                                                                                                  |
| port                    | [ int32](#int32)   | Port number (default: 1433)                                                                                                                                                                                                                |
| database                | [ string](#string) | Database name to connect to                                                                                                                                                                                                                |
| username                | [ string](#string) | Username for SQL Server Authentication or Azure AD. For Azure AD Service Principal, this is the Application (Client) ID. Leave empty when using access\_token or Azure AD Managed Identity.                                                |
| password                | [ string](#string) | Password for SQL Server Authentication or Azure AD client secret                                                                                                                                                                           |
| trust\_cert             | [ bool](#bool)     | Skip TLS server certificate verification                                                                                                                                                                                                   |
| encrypt                 | [ string](#string) | Connection encryption mode: "true" (default), "false", "disable"                                                                                                                                                                           |
| fed\_auth               | [ string](#string) | Azure AD federated authentication method. When set, the azuread driver is used instead of the standard sqlserver driver. Values: "ActiveDirectoryDefault", "ActiveDirectoryMSI", "ActiveDirectoryServicePrincipal", "ActiveDirectoryAzCli" |
| access\_token           | [ string](#string) | Pre-acquired Azure AD OAuth access token. When set, takes precedence over all other authentication methods.                                                                                                                                |
| application\_client\_id | [ string](#string) | Azure AD Application (Client) ID. Used with ActiveDirectoryServicePrincipal and user-assigned MSI.                                                                                                                                         |

### MySQLConf

(synq.agent.dwh.v1.MySQLConf)

MySQL specific configuration

| Field           | Type                            | Description                           |
| --------------- | ------------------------------- | ------------------------------------- |
| host            | [ string](#string)              | Host address                          |
| port            | [ int32](#int32)                | Port number (default: 3306)           |
| database        | [ string](#string)              | Database name                         |
| username        | [ string](#string)              | Username for authentication           |
| password        | [ string](#string)              | Password for authentication           |
| allow\_insecure | [ bool](#bool)                  | Whether to allow insecure connections |
| params          | [map ParamsEntry](#paramsentry) | Additional connection parameters      |

### MySQLConf.ParamsEntry

(synq.agent.dwh.v1.MySQLConf.ParamsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### OracleConf

(synq.agent.dwh.v1.OracleConf)

Oracle Database specific configuration.
Oracle connections are scoped to a Pluggable Database (PDB) via the service name.

Authentication methods:

1. wallet\_path: Oracle Wallet (mTLS) for OCI Autonomous Database
2. username + password: standard Oracle database authentication
   Both can be combined (wallet for TLS + explicit credentials).

| Field                  | Type               | Description                                                                                                                                                                                                                          |
| ---------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| host                   | [ string](#string) | Host address or IP. For OCI: e.g. "adb.eu-frankfurt-1.oraclecloud.com"                                                                                                                                                               |
| port                   | [ int32](#int32)   | Listener port (default: 1521, OCI Autonomous DB with mTLS uses 1522)                                                                                                                                                                 |
| service\_name          | [ string](#string) | Service name (PDB name). For OCI Autonomous DB: e.g. "mydb\_high", "mydb\_low", "mydb\_tp"                                                                                                                                           |
| username               | [ string](#string) | Username for authentication (optional when wallet stores credentials)                                                                                                                                                                |
| password               | [ string](#string) | Password for authentication (optional when wallet stores credentials)                                                                                                                                                                |
| ssl                    | [ bool](#bool)     | Enable TLS/SSL encryption (TCPS protocol). Required for OCI Autonomous Database. Auto-enabled when wallet\_path is set.                                                                                                              |
| ssl\_verify            | [ bool](#bool)     | Enable server certificate verification when SSL is enabled                                                                                                                                                                           |
| wallet\_path           | [ string](#string) | Path to Oracle Wallet directory for mTLS authentication (OCI Autonomous DB). Contains TLS certificates (cwallet.sso) and optionally stored credentials.                                                                              |
| use\_diagnostics\_pack | [ bool](#bool)     | Use Oracle Diagnostics Pack (AWR) for persistent query log history. When false, query logs come from V\$SQL (in-memory, no additional license). When true, query logs come from DBA\_HIST views (requires Diagnostics Pack license). |

### PostgresConf

(synq.agent.dwh.v1.PostgresConf)

Postgres specific configuration

| Field           | Type               | Description                           |
| --------------- | ------------------ | ------------------------------------- |
| host            | [ string](#string) | Host address                          |
| port            | [ int32](#int32)   | Port number (default: 5432)           |
| database        | [ string](#string) | Database name                         |
| username        | [ string](#string) | Username for authentication           |
| password        | [ string](#string) | Password for authentication           |
| allow\_insecure | [ bool](#bool)     | Whether to allow insecure connections |

### RedshiftConf

(synq.agent.dwh.v1.RedshiftConf)

Redshift specific configuration

| Field                        | Type               | Description                                  |
| ---------------------------- | ------------------ | -------------------------------------------- |
| host                         | [ string](#string) | Host address                                 |
| port                         | [ int32](#int32)   | Port number (default: 5439)                  |
| database                     | [ string](#string) | Database name                                |
| username                     | [ string](#string) | Username for authentication                  |
| password                     | [ string](#string) | Password for authentication                  |
| freshness\_from\_query\_logs | [ bool](#bool)     | Estimate table freshness based on query logs |

### SnowflakeConf

(synq.agent.dwh.v1.SnowflakeConf)

Snowflake specific configuration

| Field                                                                                                                             | Type                       | Description                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| account                                                                                                                           | [ string](#string)         | Snowflake account identifier                                                                                                                                                                      |
| warehouse                                                                                                                         | [ string](#string)         | Virtual warehouse to use                                                                                                                                                                          |
| role                                                                                                                              | [ string](#string)         | Role to assume                                                                                                                                                                                    |
| username                                                                                                                          | [ string](#string)         | Username for authentication                                                                                                                                                                       |
| password                                                                                                                          | [ string](#string)         | Password for authentication                                                                                                                                                                       |
| private\_key                                                                                                                      | [ string](#string)         | Content of Private key used for Snowflake authentication                                                                                                                                          |
| private\_key\_file                                                                                                                | [ string](#string)         | Location of the file containing Private key used for Snowflake authentication                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_private\_key\_passphrase.private\_key\_passphrase | [optional string](#string) | Passphrase used to decode Private key                                                                                                                                                             |
| databases                                                                                                                         | [repeated string](#string) | Database to connect to                                                                                                                                                                            |
| use\_get\_ddl                                                                                                                     | [ bool](#bool)             | Use GET\_DDL to determine queries used for table/view creation                                                                                                                                    |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_account\_usage\_db.account\_usage\_db             | [optional string](#string) | Name of the database where ACCOUNT\_USAGE schema is present, fallbacks to SNOWFLAKE                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_auth\_type.auth\_type                             | [optional string](#string) | Authentication type: empty (default, uses password or private\_key), "externalbrowser" (SSO via browser) When set to "externalbrowser", opens browser for SSO login and caches the token locally. |

### TrinoConf

(synq.agent.dwh.v1.TrinoConf)

Trino specific configuration

| Field                                                                                                         | Type                       | Description                                                                                                                                                                                                |
| ------------------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| host                                                                                                          | [ string](#string)         | Host address                                                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_port.port                     | [optional int32](#int32)   | Optional port to use, otherwise it will use the default port 8080                                                                                                                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_use\_plaintext.use\_plaintext | [optional bool](#bool)     | Use non-SSL connection to Trino. This should only be enabled if the Trino cluster does not support SSL or if the connection is secured through other means (e.g., a VPN). Defaults to false (SSL enabled). |
| username                                                                                                      | [ string](#string)         | Username for authentication                                                                                                                                                                                |
| password                                                                                                      | [ string](#string)         | Password for authentication                                                                                                                                                                                |
| catalogs                                                                                                      | [repeated string](#string) | To which catalogs to connect                                                                                                                                                                               |
| no\_show\_create\_view                                                                                        | [ bool](#bool)             | Use SHOW CREATE VIEW to get views DDLs                                                                                                                                                                     |
| no\_show\_create\_table                                                                                       | [ bool](#bool)             | Use SHOW CREATE TABLE to get tables DDLs                                                                                                                                                                   |
| no\_materialized\_views                                                                                       | [ bool](#bool)             | Should it fetch system.metadata.materialized\_views to get information about Trino MVs                                                                                                                     |
| fetch\_table\_comments                                                                                        | [ bool](#bool)             | Fetch Trino table comments from system.metadata.table\_comments                                                                                                                                            |

### GenerateConnectionsYamlRequest

(synq.agent.dwh.v1.GenerateConnectionsYamlRequest)

Request to generate YAML configuration from data warehouse connections.

| Field       | Type                                      | Description                                                                                                                                                                                                                                                                                                              |
| ----------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| connections | [map ConnectionsEntry](#connectionsentry) | Map of connection ID to Connection configuration. Typically obtained from ListConnectionsResponse. Note: Validation is disabled for this field since Connection values may have empty credentials (which will be replaced with env var placeholders). Connection ID validation is handled in the service implementation. |

### GenerateConnectionsYamlRequest.ConnectionsEntry

(synq.agent.dwh.v1.GenerateConnectionsYamlRequest.ConnectionsEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ Connection](#connection) | none        |

### GenerateConnectionsYamlResponse

(synq.agent.dwh.v1.GenerateConnectionsYamlResponse)

Response containing the generated YAML configuration.

| Field                                                                                       | Type                       | Description                                                                                                                                                                |
| ------------------------------------------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| yaml                                                                                        | [ string](#string)         | Generated YAML configuration string. Can be written directly to a file and used by DWH Agent or Coalesce Quality Scout. Includes header comments with documentation links. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error.error | [optional string](#string) | Error message if YAML generation failed. If set, the yaml field should be ignored.                                                                                         |

### ListConnectionsRequest

(synq.agent.dwh.v1.ListConnectionsRequest)

| Field           | Type                       | Description                                                                                            |
| --------------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |
| connection\_ids | [repeated string](#string) | Optional filter to only return connections with these ids. If empty, all DWH connections are returned. |

### ListConnectionsResponse

(synq.agent.dwh.v1.ListConnectionsResponse)

| Field       | Type                                      | Description |
| ----------- | ----------------------------------------- | ----------- |
| connections | [map ConnectionsEntry](#connectionsentry) | none        |

### ListConnectionsResponse.ConnectionsEntry

(synq.agent.dwh.v1.ListConnectionsResponse.ConnectionsEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ Connection](#connection) | none        |

### AgentTask

(synq.agent.dwh.v1.AgentTask)

| Field                                                                                                      | Type                                                 | Description                                                                                                       |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| connection\_id                                                                                             | [ string](#string)                                   | none                                                                                                              |
| task\_id                                                                                                   | [ string](#string)                                   | none                                                                                                              |
| scheduled\_at                                                                                              | [ Timestamp](#timestamp)                             | When this task should execute, if none is specified it will use time of execution                                 |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deadline\_at.deadline\_at  | [optional Timestamp](#timestamp)                     | After what time this task should stop executing (even in case of errors, retries will be ignored after this time) |
| created\_at                                                                                                | [ Timestamp](#timestamp)                             | When the task was created                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) command.fetch\_full\_catalog | [ FetchFullCatalogCommand](#fetchfullcatalogcommand) | none                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) command.fetch\_full\_metrics | [ FetchFullMetricsCommand](#fetchfullmetricscommand) | none                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) command.fetch\_segments      | [ FetchSegmentsCommand](#fetchsegmentscommand)       | none                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) command.fetch\_metrics       | [ FetchMetricsCommand](#fetchmetricscommand)         | none                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) command.fetch\_table\_stats  | [ FetchTableStatsCommand](#fetchtablestatscommand)   | none                                                                                                              |

### AgentTaskData

(synq.agent.dwh.v1.AgentTaskData)

| Field                                                                                                      | Type                                         | Description |
| ---------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.fetch\_segments\_result | [ FetchSegmentsResult](#fetchsegmentsresult) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.fetch\_metrics\_result  | [ FetchMetricsResult](#fetchmetricsresult)   | none        |

### FetchFullCatalogCommand

(synq.agent.dwh.v1.FetchFullCatalogCommand)

### FetchFullMetricsCommand

(synq.agent.dwh.v1.FetchFullMetricsCommand)

### FetchMetricsCommand

(synq.agent.dwh.v1.FetchMetricsCommand)

| Field                                                                                                             | Type                           | Description                                           |
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------ | ----------------------------------------------------- |
| sql\_queries                                                                                                      | [repeated SqlQuery](#sqlquery) | none                                                  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_command\_context.command\_context | [optional string](#string)     | Application specific context around metrics retrieval |

### FetchMetricsResult

(synq.agent.dwh.v1.FetchMetricsResult)

| Field                                                                                                             | Type                             | Description                                                              |
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------ |
| query\_rows                                                                                                       | [repeated QueryRows](#queryrows) | none                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_command\_context.command\_context | [optional string](#string)       | Matches command\_context of FetchMetricsCommand / FetchTableStatsCommand |

### FetchMetricsResult.ColumnValue

(synq.agent.dwh.v1.FetchMetricsResult.ColumnValue)

| Field                                                                                               | Type                     | Description                                                                                                                                                                                                                                                                                                                                                                |
| --------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                                                                                                | [ string](#string)       | none                                                                                                                                                                                                                                                                                                                                                                       |
| is\_null                                                                                            | [ bool](#bool)           | none                                                                                                                                                                                                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) value.double\_value   | [ double](#double)       | none                                                                                                                                                                                                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) value.int\_value      | [ int64](#int64)         | Integer value for values that fit within the signed 64-bit range \[-9223372036854775808, 9223372036854775807].                                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) value.time\_value     | [ Timestamp](#timestamp) | none                                                                                                                                                                                                                                                                                                                                                                       |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) value.big\_int\_value | [ string](#string)       | Arbitrary-precision integer encoded as a base-10 string, used for values that exceed the signed 64-bit range. Covers DuckDB HUGEINT (128-bit), ClickHouse Int128/UInt128/Int256/UInt256, and similar wide integer types from other warehouses. Consumers should parse this with an arbitrary-precision library (e.g., Go's math/big.Int, Java's BigInteger, Python's int). |

### FetchMetricsResult.MetricsRow

(synq.agent.dwh.v1.FetchMetricsResult.MetricsRow)

| Field                                                                                           | Type                                 | Description |
| ----------------------------------------------------------------------------------------------- | ------------------------------------ | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_segment.segment | [optional string](#string)           | none        |
| column\_values                                                                                  | [repeated ColumnValue](#columnvalue) | none        |

### FetchMetricsResult.QueryRows

(synq.agent.dwh.v1.FetchMetricsResult.QueryRows)

| Field                                                                                               | Type                               | Description |
| --------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------- |
| rows                                                                                                | [repeated MetricsRow](#metricsrow) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_query\_id.query\_id | [optional string](#string)         | none        |

### FetchSegmentsCommand

(synq.agent.dwh.v1.FetchSegmentsCommand)

| Field      | Type                   | Description |
| ---------- | ---------------------- | ----------- |
| sql\_query | [ SqlQuery](#sqlquery) | none        |

### FetchSegmentsResult

(synq.agent.dwh.v1.FetchSegmentsResult)

| Field | Type                               | Description |
| ----- | ---------------------------------- | ----------- |
| rows  | [repeated SegmentRow](#segmentrow) | none        |

### FetchSegmentsResult.SegmentRow

(synq.agent.dwh.v1.FetchSegmentsResult.SegmentRow)

| Field                                                                                       | Type                     | Description |
| ------------------------------------------------------------------------------------------- | ------------------------ | ----------- |
| segment                                                                                     | [ string](#string)       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_count.count | [optional int64](#int64) | none        |

### FetchTableStatsCommand

(synq.agent.dwh.v1.FetchTableStatsCommand)

| Field                                                                                                             | Type                         | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| scope\_filter                                                                                                     | [ ScopeFilter](#scopefilter) | Scope filter defining which tables to collect stats for. For a single-table monitor, set a single include rule with exact database/schema/table. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_command\_context.command\_context | [optional string](#string)   | Application-specific context, echoed back in the result (mirrors FetchMetricsCommand).                                                           |

### SqlQuery

(synq.agent.dwh.v1.SqlQuery)

| Field                                                                                                         | Type                       | Description |
| ------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| sql                                                                                                           | [ string](#string)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_limit\_results.limit\_results | [optional int64](#int64)   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_query\_id.query\_id           | [optional string](#string) | none        |

### Config

(synq.agent.dwh.v1.Config)

Config represents the main configuration for the DWH agent

| Field       | Type                                      | Description                             |
| ----------- | ----------------------------------------- | --------------------------------------- |
| agent       | [ Agent](#agent)                          | Agent configuration                     |
| synq        | [ SYNQ](#synq)                            | Coalesce Quality platform configuration |
| connections | [map ConnectionsEntry](#connectionsentry) | Map of connection configurations        |

### Config.Agent

(synq.agent.dwh.v1.Config.Agent)

Agent contains metadata about this agent instance

| Field                                                                                                                   | Type                       | Description                               |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------- | ----------------------------------------- |
| name                                                                                                                    | [ string](#string)         | Name of the agent instance                |
| tags                                                                                                                    | [repeated string](#string) | Tags to categorize and organize the agent |
| log\_level                                                                                                              | [ LogLevel](#loglevel)     | none                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_log\_json.log\_json                     | [optional bool](#bool)     | none                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_log\_report\_caller.log\_report\_caller | [optional bool](#bool)     | none                                      |

### Config.ConnectionsEntry

(synq.agent.dwh.v1.Config.ConnectionsEntry)

| Field | Type                       | Description |
| ----- | -------------------------- | ----------- |
| key   | [ string](#string)         | none        |
| value | [ Connection](#connection) | none        |

### AgentTaskResponse

(synq.agent.dwh.v1.AgentTaskResponse)

| Field                                                                                                 | Type                                     | Description |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------- | ----------- |
| connection\_id                                                                                        | [ string](#string)                       | none        |
| task\_id                                                                                              | [ string](#string)                       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_error.error           | [optional string](#string)               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_task\_data.task\_data | [optional AgentTaskData](#agenttaskdata) | none        |

### ConnectRequest

(synq.agent.dwh.v1.ConnectRequest)

| Field                                                                                                | Type                                     | Description |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) message.hello          | [ Hello](#hello)                         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) message.log            | [ Log](#log)                             | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) message.task\_response | [ AgentTaskResponse](#agenttaskresponse) | none        |

### ConnectResponse

(synq.agent.dwh.v1.ConnectResponse)

| Field | Type                             | Description |
| ----- | -------------------------------- | ----------- |
| tasks | [repeated AgentTask](#agenttask) | none        |

### Hello

(synq.agent.dwh.v1.Hello)

| Field                  | Type                                                 | Description |
| ---------------------- | ---------------------------------------------------- | ----------- |
| name                   | [ string](#string)                                   | none        |
| build\_version         | [ string](#string)                                   | none        |
| build\_time            | [ string](#string)                                   | none        |
| available\_connections | [repeated AvailableConnection](#availableconnection) | none        |

### Hello.AvailableConnection

(synq.agent.dwh.v1.Hello.AvailableConnection)

| Field          | Type                       | Description                                                                         |
| -------------- | -------------------------- | ----------------------------------------------------------------------------------- |
| connection\_id | [ string](#string)         | Identifier which will receive commands                                              |
| name           | [ string](#string)         | User provided connection name                                                       |
| disabled       | [ bool](#bool)             | Indicates that agent has that connection disabled                                   |
| type           | [ string](#string)         | Type of the DWH, e.g. bigquery, duckdb, clickhouse                                  |
| instance       | [ string](#string)         | This will be hostname in most cases                                                 |
| databases      | [repeated string](#string) | Enabled databases to query if connection supports multiple databases, can be empty. |

### Log

(synq.agent.dwh.v1.Log)

| Field   | Type                     | Description |
| ------- | ------------------------ | ----------- |
| time    | [ Timestamp](#timestamp) | none        |
| message | [ string](#string)       | none        |
| level   | [ LogLevel](#loglevel)   | none        |

### IngestCloudwatchLogsDataRequest

(synq.ingest.cloudwatch.v1.IngestCloudwatchLogsDataRequest)

| Field                 | Type                                                       | Description |
| --------------------- | ---------------------------------------------------------- | ----------- |
| owner                 | [ string](#string)                                         | none        |
| log\_group            | [ string](#string)                                         | none        |
| log\_stream           | [ string](#string)                                         | none        |
| subscription\_filters | [repeated string](#string)                                 | none        |
| message\_type         | [ string](#string)                                         | none        |
| log\_events           | [repeated CloudwatchLogsLogEvent](#cloudwatchlogslogevent) | none        |

### IngestCloudwatchLogsDataResponse

(synq.ingest.cloudwatch.v1.IngestCloudwatchLogsDataResponse)

### CloudwatchLogsLogEvent

(synq.ingest.cloudwatch.v1.CloudwatchLogsLogEvent)

| Field     | Type                     | Description |
| --------- | ------------------------ | ----------- |
| id        | [ string](#string)       | none        |
| timestamp | [ Timestamp](#timestamp) | none        |
| message   | [ string](#string)       | none        |

### IngestDatahubAspectsRequest

(synq.ingest.airflow\.v1.IngestDatahubAspectsRequest)

| Field                                                                                         | Type                       | Description |
| --------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| aspects                                                                                       | [repeated Struct](#struct) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_action.action | [optional string](#string) | none        |

### IngestDatahubAspectsResponse

(synq.ingest.airflow\.v1.IngestDatahubAspectsResponse)

### IngestLogRequest

(synq.ingest.airflow\.v1.IngestLogRequest)

| Field     | Type                     | Description |
| --------- | ------------------------ | ----------- |
| dag\_id   | [ string](#string)       | none        |
| task\_id  | [ string](#string)       | none        |
| run\_id   | [ string](#string)       | none        |
| attempt   | [ int32](#int32)         | none        |
| log       | [ string](#string)       | none        |
| log\_time | [ Timestamp](#timestamp) | none        |

### IngestLogResponse

(synq.ingest.airflow\.v1.IngestLogResponse)

### IngestRequest

(synq.ingest.openlineage.v1.IngestRequest)

| Field   | Type               | Description |
| ------- | ------------------ | ----------- |
| payload | [ Struct](#struct) | none        |

### IngestResponse

(synq.ingest.openlineage.v1.IngestResponse)

### DbtArtifact

(synq.ingest.dbt.v1.DbtArtifact)

[https://docs.getdbt.com/reference/artifacts/dbt-artifacts](https://docs.getdbt.com/reference/artifacts/dbt-artifacts)

| Field                                                                                                           | Type             | Description |
| --------------------------------------------------------------------------------------------------------------- | ---------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) artifact.manifest\_json           | [ bytes](#bytes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) artifact.run\_results\_json       | [ bytes](#bytes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) artifact.catalog\_json            | [ bytes](#bytes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) artifact.sources\_json            | [ bytes](#bytes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) artifact.semantic\_manifest\_json | [ bytes](#bytes) | none        |

### IngestInvocationRequest

(synq.ingest.dbt.v1.IngestInvocationRequest)

| Field                 | Type                                              | Description                                      |
| --------------------- | ------------------------------------------------- | ------------------------------------------------ |
| args                  | [repeated string](#string)                        | Arguments passed to the dbt executable           |
| exit\_code            | [ int32](#int32)                                  | Exit code of the dbt command                     |
| std\_out              | [ bytes](#bytes)                                  | Standard output log of the dbt command           |
| std\_err              | [ bytes](#bytes)                                  | Standard error log of the dbt command            |
| environment\_vars     | [map EnvironmentVarsEntry](#environmentvarsentry) | Environment variables collected during execution |
| artifacts             | [repeated DbtArtifact](#dbtartifact)              | Artifacts generated by the dbt command           |
| uploader\_version     | [ string](#string)                                | Version of the uploader tool                     |
| uploader\_build\_time | [ string](#string)                                | Build time of the uploader tool                  |
| git\_context          | [ GitContext](#gitcontext)                        | Git context of the project                       |

### IngestInvocationRequest.EnvironmentVarsEntry

(synq.ingest.dbt.v1.IngestInvocationRequest.EnvironmentVarsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### IngestInvocationResponse

(synq.ingest.dbt.v1.IngestInvocationResponse)

### GitContext

(synq.ingest.git.v1.GitContext)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| clone\_url  | [ string](#string) | none        |
| branch      | [ string](#string) | none        |
| commit\_sha | [ string](#string) | none        |

### IngestExecutionRequest

(synq.ingest.sqlmesh.v1.IngestExecutionRequest)

| Field                 | Type                                              | Description                                      |
| --------------------- | ------------------------------------------------- | ------------------------------------------------ |
| command               | [repeated string](#string)                        | Command passed to the sqlmesh tool               |
| exit\_code            | [ int32](#int32)                                  | Exit code of the sqlmesh command                 |
| std\_out              | [ bytes](#bytes)                                  | Standard output log of the SqlMesh command       |
| std\_err              | [ bytes](#bytes)                                  | Standard error log of the SqlMesh command        |
| environment\_vars     | [map EnvironmentVarsEntry](#environmentvarsentry) | Environment variables collected during execution |
| uploader\_version     | [ string](#string)                                | Version of the uploader tool                     |
| uploader\_build\_time | [ string](#string)                                | Build time of the uploader tool                  |
| started\_at           | [ Timestamp](#timestamp)                          | Time at which the execution started              |
| finished\_at          | [ Timestamp](#timestamp)                          | Time at which the execution finished             |
| git\_context          | [ GitContext](#gitcontext)                        | Git context of the project                       |

### IngestExecutionRequest.EnvironmentVarsEntry

(synq.ingest.sqlmesh.v1.IngestExecutionRequest.EnvironmentVarsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ string](#string) | none        |

### IngestExecutionResponse

(synq.ingest.sqlmesh.v1.IngestExecutionResponse)

### IngestMetadataRequest

(synq.ingest.sqlmesh.v1.IngestMetadataRequest)

| Field                 | Type                                        | Description                                            |
| --------------------- | ------------------------------------------- | ------------------------------------------------------ |
| api\_meta             | [ bytes](#bytes)                            | Data from /api/meta                                    |
| models                | [ bytes](#bytes)                            | Data from /api/models                                  |
| model\_details        | [map ModelDetailsEntry](#modeldetailsentry) | Data from /api/models/\{model\_id}                     |
| model\_lineage        | [map ModelLineageEntry](#modellineageentry) | Data from /api/lineage/\{model\_id}                    |
| files                 | [ bytes](#bytes)                            | Data from /api/files                                   |
| file\_content         | [map FileContentEntry](#filecontententry)   | Data from /api/file/\{file\_path}                      |
| environments          | [ bytes](#bytes)                            | Data from /api/environments                            |
| uploader\_version     | [ string](#string)                          | Version of the uploader tool                           |
| uploader\_build\_time | [ string](#string)                          | Build time of the uploader tool                        |
| state\_at             | [ Timestamp](#timestamp)                    | Time at which state was collected                      |
| git\_context          | [ GitContext](#gitcontext)                  | Git context of the project                             |
| errors                | [repeated Error](#error)                    | Optional errors indicating why some data wasn't loaded |

### IngestMetadataRequest.Error

(synq.ingest.sqlmesh.v1.IngestMetadataRequest.Error)

| Field                                                                                     | Type                       | Description |
| ----------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_path.path | [optional string](#string) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_code.code | [optional int64](#int64)   | none        |
| message                                                                                   | [ string](#string)         | none        |

### IngestMetadataRequest.FileContentEntry

(synq.ingest.sqlmesh.v1.IngestMetadataRequest.FileContentEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ bytes](#bytes)   | none        |

### IngestMetadataRequest.ModelDetailsEntry

(synq.ingest.sqlmesh.v1.IngestMetadataRequest.ModelDetailsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ bytes](#bytes)   | none        |

### IngestMetadataRequest.ModelLineageEntry

(synq.ingest.sqlmesh.v1.IngestMetadataRequest.ModelLineageEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ bytes](#bytes)   | none        |

### IngestMetadataResponse

(synq.ingest.sqlmesh.v1.IngestMetadataResponse)

### Fqn

(synq.ingest.dwh.v1.Fqn)

| Field          | Type               | Description |
| -------------- | ------------------ | ----------- |
| instance\_name | [ string](#string) | none        |
| database\_name | [ string](#string) | none        |
| schema\_name   | [ string](#string) | none        |
| object\_name   | [ string](#string) | none        |

### ObjectInformation

(synq.ingest.dwh.v1.ObjectInformation)

| Field                                                                                                   | Type                       | Description |
| ------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| fqn                                                                                                     | [ Fqn](#fqn)               | none        |
| object\_native\_type                                                                                    | [ string](#string)         | none        |
| is\_view                                                                                                | [ bool](#bool)             | none        |
| is\_table                                                                                               | [ bool](#bool)             | none        |
| tags                                                                                                    | [repeated Tag](#tag)       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string) | none        |

### ObjectMetrics

(synq.ingest.dwh.v1.ObjectMetrics)

| Field                                                                                                   | Type                             | Description |
| ------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------- |
| fqn                                                                                                     | [ Fqn](#fqn)                     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_row\_count.row\_count   | [optional int64](#int64)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_updated\_at.updated\_at | [optional Timestamp](#timestamp) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_size\_bytes.size\_bytes | [optional int64](#int64)         | none        |

### Schema

(synq.ingest.dwh.v1.Schema)

| Field   | Type                                   | Description |
| ------- | -------------------------------------- | ----------- |
| fqn     | [ Fqn](#fqn)                           | none        |
| columns | [repeated SchemaColumn](#schemacolumn) | none        |

### SchemaColumn

(synq.ingest.dwh.v1.SchemaColumn)

| Field                                                                                                   | Type                                             | Description |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------- |
| name                                                                                                    | [ string](#string)                               | none        |
| native\_type                                                                                            | [ string](#string)                               | none        |
| ordinal\_position                                                                                       | [ int32](#int32)                                 | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                       | none        |
| tags                                                                                                    | [repeated Tag](#tag)                             | none        |
| is\_struct                                                                                              | [ bool](#bool)                                   | none        |
| is\_repeated                                                                                            | [ bool](#bool)                                   | none        |
| fields                                                                                                  | [repeated SchemaColumnField](#schemacolumnfield) | none        |

### SchemaColumnField

(synq.ingest.dwh.v1.SchemaColumnField)

| Field                                                                                                   | Type                                             | Description |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------- |
| name                                                                                                    | [ string](#string)                               | none        |
| native\_type                                                                                            | [ string](#string)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                       | none        |
| ordinal\_position                                                                                       | [ int32](#int32)                                 | none        |
| is\_struct                                                                                              | [ bool](#bool)                                   | none        |
| is\_repeated                                                                                            | [ bool](#bool)                                   | none        |
| fields                                                                                                  | [repeated SchemaColumnField](#schemacolumnfield) | none        |

### SqlDefinition

(synq.ingest.dwh.v1.SqlDefinition)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| fqn   | [ Fqn](#fqn)       | none        |
| sql   | [ string](#string) | none        |

### TableConstraint

(synq.ingest.dwh.v1.TableConstraint)

TableConstraint represents a single constraint or index on a database table.

| Field                                                                                                                     | Type                       | Description                                                                                                      |
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| name                                                                                                                      | [ string](#string)         | Name of the constraint or index                                                                                  |
| type                                                                                                                      | [ string](#string)         | Type of the constraint (e.g. PRIMARY\_KEY, FOREIGN\_KEY, UNIQUE, CHECK, INDEX)                                   |
| columns                                                                                                                   | [repeated string](#string) | Column names involved in this constraint or index                                                                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_foreign\_key\_target.foreign\_key\_target | [optional Fqn](#fqn)       | For foreign key: referenced table FQN                                                                            |
| foreign\_key\_target\_columns                                                                                             | [repeated string](#string) | For foreign key: referenced column names                                                                         |
| index\_type                                                                                                               | [ string](#string)         | Index type (e.g. "btree", "hash", "gin")                                                                         |
| expression                                                                                                                | [ string](#string)         | Expression for check constraints or expression-based indexes                                                     |
| is\_unique                                                                                                                | [ bool](#bool)             | Whether this constraint or index enforces uniqueness                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_is\_enforced.is\_enforced                 | [optional bool](#bool)     | Whether this constraint is enforced by the database. nil/unset = unknown, true = enforced, false = not enforced. |

### TableConstraints

(synq.ingest.dwh.v1.TableConstraints)

TableConstraints contains all constraints and indexes for a single table.

| Field       | Type                                         | Description |
| ----------- | -------------------------------------------- | ----------- |
| fqn         | [ Fqn](#fqn)                                 | none        |
| constraints | [repeated TableConstraint](#tableconstraint) | none        |

### Tag

(synq.ingest.dwh.v1.Tag)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| tag\_name  | [ string](#string) | none        |
| tag\_value | [ string](#string) | none        |

### DatabasesScope

(synq.ingest.dwh.v1.DatabasesScope)

DatabasesScope makes the batch authoritative for the listed databases only.

| Field     | Type                       | Description                                      |
| --------- | -------------------------- | ------------------------------------------------ |
| databases | [repeated string](#string) | Each entry is "database" or "instance.database". |

### IngestLineageRequest

(synq.ingest.dwh.v1.IngestLineageRequest)

IngestLineageRequest carries one batch of lineage edges for a single
warehouse connection. Send many batches with the same connection\_id over
time; each batch is interpreted against the others according to
`replace_mode`.

| Field          | Type                                       | Description                                                                                                                                                                                         |
| -------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| connection\_id | [ string](#string)                         | Identifier of the warehouse connection this lineage was read from. Use the same connection\_id you use for the other Ingest\* calls of this warehouse so the lineage attaches to the right objects. |
| upload\_id     | [ string](#string)                         | A unique id for this batch (UUID). Re-sending a batch with the same upload\_id is de-duplicated, so it is safe to retry.                                                                            |
| state\_at      | [ Timestamp](#timestamp)                   | Time at which the lineage was extracted from the warehouse.                                                                                                                                         |
| source         | [ LineageSource](#lineagesource)           | How the lineage was derived. Drives the precedence of the resulting edges and keeps lineage of different origins from overwriting one another.                                                      |
| replace\_mode  | [ LineageReplaceMode](#lineagereplacemode) | How this batch supersedes previously-ingested lineage. Defaults to MERGE (incremental) when unset.                                                                                                  |
| scope          | [ LineageScope](#lineagescope)             | Required when replace\_mode is REPLACE\_SCOPE; ignored otherwise.                                                                                                                                   |
| edges          | [repeated LineageEdge](#lineageedge)       | The lineage edges in this batch. Empty in REPLACE\_SCOPE mode is a valid way to expire all lineage inside the scope.                                                                                |

### IngestLineageResponse

(synq.ingest.dwh.v1.IngestLineageResponse)

IngestLineageResponse is intentionally empty; a successful call means the
batch was accepted for processing.

### IngestObjectInformationRequest

(synq.ingest.dwh.v1.IngestObjectInformationRequest)

| Field          | Type                                             | Description                       |
| -------------- | ------------------------------------------------ | --------------------------------- |
| connection\_id | [ string](#string)                               | none                              |
| upload\_id     | [ string](#string)                               | none                              |
| state\_at      | [ Timestamp](#timestamp)                         | Time at which state was collected |
| objects        | [repeated ObjectInformation](#objectinformation) | none                              |

### IngestObjectInformationResponse

(synq.ingest.dwh.v1.IngestObjectInformationResponse)

### IngestObjectMetricsRequest

(synq.ingest.dwh.v1.IngestObjectMetricsRequest)

| Field          | Type                                     | Description                       |
| -------------- | ---------------------------------------- | --------------------------------- |
| connection\_id | [ string](#string)                       | none                              |
| upload\_id     | [ string](#string)                       | none                              |
| state\_at      | [ Timestamp](#timestamp)                 | Time at which state was collected |
| metrics        | [repeated ObjectMetrics](#objectmetrics) | none                              |

### IngestObjectMetricsResponse

(synq.ingest.dwh.v1.IngestObjectMetricsResponse)

### IngestQueryLogsRequest

(synq.ingest.dwh.v1.IngestQueryLogsRequest)

| Field          | Type                           | Description |
| -------------- | ------------------------------ | ----------- |
| connection\_id | [ string](#string)             | none        |
| upload\_id     | [ string](#string)             | none        |
| query\_logs    | [repeated QueryLog](#querylog) | none        |

### IngestQueryLogsResponse

(synq.ingest.dwh.v1.IngestQueryLogsResponse)

### IngestSchemasRequest

(synq.ingest.dwh.v1.IngestSchemasRequest)

| Field          | Type                       | Description                       |
| -------------- | -------------------------- | --------------------------------- |
| connection\_id | [ string](#string)         | none                              |
| upload\_id     | [ string](#string)         | none                              |
| state\_at      | [ Timestamp](#timestamp)   | Time at which state was collected |
| schemas        | [repeated Schema](#schema) | none                              |

### IngestSchemasResponse

(synq.ingest.dwh.v1.IngestSchemasResponse)

### IngestSqlDefinitionsRequest

(synq.ingest.dwh.v1.IngestSqlDefinitionsRequest)

| Field            | Type                                     | Description                       |
| ---------------- | ---------------------------------------- | --------------------------------- |
| connection\_id   | [ string](#string)                       | none                              |
| upload\_id       | [ string](#string)                       | none                              |
| state\_at        | [ Timestamp](#timestamp)                 | Time at which state was collected |
| sql\_definitions | [repeated SqlDefinition](#sqldefinition) | none                              |

### IngestSqlDefinitionsResponse

(synq.ingest.dwh.v1.IngestSqlDefinitionsResponse)

### IngestTableConstraintsRequest

(synq.ingest.dwh.v1.IngestTableConstraintsRequest)

| Field              | Type                                           | Description                       |
| ------------------ | ---------------------------------------------- | --------------------------------- |
| connection\_id     | [ string](#string)                             | none                              |
| upload\_id         | [ string](#string)                             | none                              |
| state\_at          | [ Timestamp](#timestamp)                       | Time at which state was collected |
| table\_constraints | [repeated TableConstraints](#tableconstraints) | none                              |

### IngestTableConstraintsResponse

(synq.ingest.dwh.v1.IngestTableConstraintsResponse)

### IngestTaskResultsRequest

(synq.ingest.dwh.v1.IngestTaskResultsRequest)

| Field          | Type                             | Description                       |
| -------------- | -------------------------------- | --------------------------------- |
| connection\_id | [ string](#string)               | none                              |
| task\_id       | [ string](#string)               | none                              |
| state\_at      | [ Timestamp](#timestamp)         | Time at which state was collected |
| task\_data     | [ AgentTaskData](#agenttaskdata) | none                              |

### IngestTaskResultsResponse

(synq.ingest.dwh.v1.IngestTaskResultsResponse)

### LineageScope

(synq.ingest.dwh.v1.LineageScope)

LineageScope declares the set of downstream objects a REPLACE\_SCOPE batch is
authoritative for — the boundary inside which omitted edges are expired. The
scope is always additionally bounded by the request's connection\_id. Ignored
when the mode is MERGE.

| Field                                                                                                 | Type                                           | Description                                                                                                              |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) scope.whole\_connection | [ WholeConnectionScope](#wholeconnectionscope) | Authoritative for the whole connection: every downstream object previously ingested under this request's connection\_id. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) scope.databases         | [ DatabasesScope](#databasesscope)             | Authoritative only for the listed databases.                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) scope.schemas           | [ SchemasScope](#schemasscope)                 | Authoritative only for the listed schemas.                                                                               |

### SchemasScope

(synq.ingest.dwh.v1.SchemasScope)

SchemasScope makes the batch authoritative for the listed schemas only.

| Field   | Type                       | Description                                                    |
| ------- | -------------------------- | -------------------------------------------------------------- |
| schemas | [repeated string](#string) | Each entry is "database.schema" or "instance.database.schema". |

### WholeConnectionScope

(synq.ingest.dwh.v1.WholeConnectionScope)

WholeConnectionScope makes the batch authoritative for the entire connection.

### LineageColumnEdge

(synq.ingest.dwh.v1.LineageColumnEdge)

LineageColumnEdge is a single column-to-column dependency carried inside a
table-level edge. Optional: omit to declare table-level lineage only. The
columns name positions on the parent LineageEdge's `upstream` and
`downstream` objects respectively.

| Field              | Type               | Description                                                    |
| ------------------ | ------------------ | -------------------------------------------------------------- |
| upstream\_column   | [ string](#string) | Column on the upstream (source) object.                        |
| downstream\_column | [ string](#string) | Column on the downstream (target) object that derives from it. |

### LineageEdge

(synq.ingest.dwh.v1.LineageEdge)

LineageEdge is one directed dependency: data flows from `upstream` into
`downstream`. Represent multi-hop lineage as the set of its direct
(distance-1) edges; do not collapse intermediate hops, so the graph stays
explicit and each hop keeps its own object domain and column edges.

| Field         | Type                                             | Description                                                                                                                                                                                                |
| ------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| upstream      | [ LineageNode](#lineagenode)                     | Object the data flows from.                                                                                                                                                                                |
| downstream    | [ LineageNode](#lineagenode)                     | Object the data flows into.                                                                                                                                                                                |
| column\_edges | [repeated LineageColumnEdge](#lineagecolumnedge) | Optional column-level dependencies within this edge. When any edge for a given downstream object carries column edges, that object's lineage is treated as column-level; otherwise it is table-level only. |
| meta          | [ Struct](#struct)                               | Free-form provenance about how this edge was established (for example the query id, or the warehouse's own description of the deriving process). Stored as-is and not interpreted by the platform.         |

### LineageNode

(synq.ingest.dwh.v1.LineageNode)

LineageNode identifies one object that participates in a lineage edge.

| Field  | Type                                         | Description                                                                                                                                                                                                    |
| ------ | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| fqn    | [ Fqn](#fqn)                                 | Fully-qualified name of the object. `object_name` is required; set the higher levels (instance / database / schema) to whatever the warehouse exposes so the platform can resolve the object to a known asset. |
| domain | [ LineageObjectDomain](#lineageobjectdomain) | What kind of object this is. Lets the platform separate true table-to-table lineage from edges that involve warehouse-internal objects.                                                                        |

### QueryLog

(synq.ingest.dwh.v1.QueryLog)

QueryLog represents a single query execution log entry from a data warehouse.
This is the format used for ingesting query logs via the DWH agent.

The structure mirrors the internal QueryLogRawRow with protobuf serialization.

| Field                                                                                                         | Type                             | Description                                               |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------- |
| workspace                                                                                                     | [ string](#string)               | Workspace and integration identifiers (for multi-tenancy) |
| integration\_id                                                                                               | [ string](#string)               | none                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_connection\_id.connection\_id | [optional string](#string)       | Empty for direct connections, populated for agent uploads |
| query\_id                                                                                                     | [ string](#string)               | Query identifiers                                         |
| created\_at                                                                                                   | [ Timestamp](#timestamp)         | none                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_started\_at.started\_at       | [optional Timestamp](#timestamp) | Query start time (optional, uses created\_at if not set)  |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_finished\_at.finished\_at     | [optional Timestamp](#timestamp) | Query finish time (optional, uses created\_at if not set) |
| sql                                                                                                           | [ string](#string)               | Query content                                             |

SQL text (may be obfuscated based on sql\_obfuscation\_mode) |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sql\_hash.sql\_hash | [optional string](#string) | SHA256 hash of original SQL for deduplication (computed during storage if not provided) |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_normalized\_query\_hash.normalized\_query\_hash | [optional string](#string) | Hash of normalized query for lineage caching (empty if not available from platform) |
\| sql\_dialect | [ string](#string) | SQL dialect (e.g., "snowflake", "bigquery", "clickhouse") |
\| query\_type | [ string](#string) | Platform-specific query type (e.g., "CREATE\_TABLE\_AS\_SELECT", "SELECT") |
\| status | [ string](#string) | Execution status: "SUCCESS", "FAILED", "CANCELED" |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_dwh\_context.dwh\_context | [optional QueryLogDwhContext](#querylogdwhcontext) | DWH execution context |
\| sql\_obfuscation\_mode | [ SqlObfuscationMode](#sqlobfuscationmode) | Obfuscation and parsing hints |
\| has\_complete\_native\_lineage | [ bool](#bool) | If true, native lineage is complete and SQL parsing can be skipped |
\| is\_truncated | [ bool](#bool) | If true, SQL was truncated by the warehouse |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_metadata.metadata | [optional Struct](#struct) | Platform-specific metadata (arbitrary key-value pairs) Contains execution metrics, costs, etc. depending on the platform |
\| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_native\_lineage.native\_lineage | [optional QueryLogNativeLineage](#querylognativelineage) | Native lineage from the platform (if available) |

### QueryLogDwhContext

(synq.ingest.dwh.v1.QueryLogDwhContext)

QueryLogDwhContext represents the execution context of a query.
Contains information about where and by whom the query was executed.

Platform-specific mappings (Instance, Database, Schema):

* Snowflake: account, database\_name, schema\_name
* Databricks: workspace\_url, catalog\_name, schema\_name
* BigQuery: "", project\_id, dataset\_id
* Redshift: host, database\_name, schema\_name
* Postgres: host, database\_name, schema\_name
* Trino: host, catalog, schema
* MySQL: "", host, schema\_name
* ClickHouse: hostname, database\_name, "" (2-level: hostname.database)
* DuckDB: motherduck\_account, database\_name, schema\_name

| Field                                                                                               | Type                       | Description                                               |
| --------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_instance.instance   | [optional string](#string) | Instance identifier (account, workspace\_url, host, etc.) |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_database.database   | [optional string](#string) | Database/catalog name                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_schema.schema       | [optional string](#string) | Schema name                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_warehouse.warehouse | [optional string](#string) | Warehouse identifier (Snowflake, Databricks)              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_user.user           | [optional string](#string) | User who executed the query                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_role.role           | [optional string](#string) | Role used for execution                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_cluster.cluster     | [optional string](#string) | Cluster identifier (Redshift, ClickHouse)                 |

### QueryLogNativeLineage

(synq.ingest.dwh.v1.QueryLogNativeLineage)

QueryLogNativeLineage contains lineage information provided natively by the data warehouse.
Not all platforms provide this - when available, it can be more accurate than SQL parsing.

| Field          | Type                 | Description                    |
| -------------- | -------------------- | ------------------------------ |
| input\_tables  | [repeated Fqn](#fqn) | Tables read by the query       |
| output\_tables | [repeated Fqn](#fqn) | Tables written to by the query |

### BatchGetOwnersRequest

(synq.owners.v1.BatchGetOwnersRequest)

| Field            | Type                       | Description                                                                                                                                         |
| ---------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| ids              | [repeated string](#string) | Owner ids to fetch (1–200, unique). Each accepts either the bare UUID or the `entity_id` form (`owner-<uuid>`); the prefix is stripped server-side. |
| include\_deleted | [ bool](#bool)             | Include soft-deleted owners.                                                                                                                        |

### BatchGetOwnersResponse

(synq.owners.v1.BatchGetOwnersResponse)

| Field  | Type                            | Description                                                                              |
| ------ | ------------------------------- | ---------------------------------------------------------------------------------------- |
| owners | [map OwnersEntry](#ownersentry) | Owners keyed by id. Ids that do not exist (or are deleted, unless requested) are absent. |

### BatchGetOwnersResponse.OwnersEntry

(synq.owners.v1.BatchGetOwnersResponse.OwnersEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Owner](#owner)   | none        |

### BatchGetOwnershipsRequest

(synq.owners.v1.BatchGetOwnershipsRequest)

| Field            | Type                       | Description                             |
| ---------------- | -------------------------- | --------------------------------------- |
| ids              | [repeated string](#string) | Ownership ids to fetch (1–200, unique). |
| include\_deleted | [ bool](#bool)             | Include soft-deleted ownerships.        |

### BatchGetOwnershipsResponse

(synq.owners.v1.BatchGetOwnershipsResponse)

| Field      | Type                                    | Description                                                                                  |
| ---------- | --------------------------------------- | -------------------------------------------------------------------------------------------- |
| ownerships | [map OwnershipsEntry](#ownershipsentry) | Ownerships keyed by id. Ids that do not exist (or are deleted, unless requested) are absent. |

### BatchGetOwnershipsResponse.OwnershipsEntry

(synq.owners.v1.BatchGetOwnershipsResponse.OwnershipsEntry)

| Field | Type                     | Description |
| ----- | ------------------------ | ----------- |
| key   | [ string](#string)       | none        |
| value | [ Ownership](#ownership) | none        |

### ContactList

(synq.owners.v1.ContactList)

A wrapper giving the contact set explicit presence on write, so a partial
update can distinguish "replace the contacts" (present, possibly empty) from
"leave contacts unchanged" (absent).

| Field    | Type                         | Description |
| -------- | ---------------------------- | ----------- |
| contacts | [repeated Contact](#contact) | none        |

### DeleteOwnerRequest

(synq.owners.v1.DeleteOwnerRequest)

| Field                                                                                     | Type                       | Description                                                                                                                  |
| ----------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                        | [ string](#string)         | Id of the owner to delete. Accepts the bare UUID or the `owner-<uuid>` entity\_id form (the prefix is stripped server-side). |
| purge                                                                                     | [ bool](#bool)             | Hard-delete instead of soft-delete, releasing the id for reuse.                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                       |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional.                                                                                      |

### DeleteOwnerResponse

(synq.owners.v1.DeleteOwnerResponse)

### DeleteOwnershipRequest

(synq.owners.v1.DeleteOwnershipRequest)

| Field                                                                                     | Type                       | Description                             |
| ----------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------- |
| id                                                                                        | [ string](#string)         | Id of the ownership to delete.          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.  |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional. |

### DeleteOwnershipResponse

(synq.owners.v1.DeleteOwnershipResponse)

### ListOwnersRequest

(synq.owners.v1.ListOwnersRequest)

| Field            | Type                       | Description                  |
| ---------------- | -------------------------- | ---------------------------- |
| pagination       | [ Pagination](#pagination) | Pagination.                  |
| include\_deleted | [ bool](#bool)             | Include soft-deleted owners. |

### ListOwnersResponse

(synq.owners.v1.ListOwnersResponse)

| Field      | Type                     | Description                          |
| ---------- | ------------------------ | ------------------------------------ |
| owners     | [repeated Owner](#owner) | The matching owners.                 |
| page\_info | [ PageInfo](#pageinfo)   | Pagination cursor for the next page. |

### ListOwnershipsRequest

(synq.owners.v1.ListOwnershipsRequest)

| Field            | Type                       | Description                                                                                                                                 |
| ---------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| owner\_id        | [ string](#string)         | Id of the owner whose ownerships to list. Accepts the bare UUID or the `owner-<uuid>` entity\_id form (the prefix is stripped server-side). |
| pagination       | [ Pagination](#pagination) | Pagination.                                                                                                                                 |
| include\_deleted | [ bool](#bool)             | Include soft-deleted ownerships.                                                                                                            |

### ListOwnershipsResponse

(synq.owners.v1.ListOwnershipsResponse)

| Field      | Type                             | Description                          |
| ---------- | -------------------------------- | ------------------------------------ |
| ownerships | [repeated Ownership](#ownership) | The owner's ownerships.              |
| page\_info | [ PageInfo](#pageinfo)           | Pagination cursor for the next page. |

### UpsertOwnerRequest

(synq.owners.v1.UpsertOwnerRequest)

| Field                                                                                             | Type                                 | Description                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                | [ string](#string)                   | Opaque id of the owner. Accepts either the bare UUID or the `entity_id` form this API returns (`owner-<uuid>`) — the prefix is stripped server-side, so the value you read back from any API can be passed straight in. The same id updates the same owner; a new id creates a new owner. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_title.title       | [optional string](#string)           | Owner name. Required when creating; omit to keep the existing name on update.                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_contacts.contacts | [optional ContactList](#contactlist) | Notification channels. Omit to leave the existing contacts unchanged; pass a present (possibly empty) list to replace them.                                                                                                                                                               |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source.source     | [optional Source](#source)           | Source. Omit to keep the existing source (defaults to SOURCE\_SYNQ on create).                                                                                                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag         | [optional string](#string)           | Optional optimistic-concurrency guard. When set, the update fails with a conflict if the owner was modified since this etag was read.                                                                                                                                                     |
| actor                                                                                             | [ Actor](#actor)                     | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user.                                                                                                                                          |

### UpsertOwnerResponse

(synq.owners.v1.UpsertOwnerResponse)

| Field | Type             | Description                        |
| ----- | ---------------- | ---------------------------------- |
| owner | [ Owner](#owner) | The stored owner after the upsert. |

### UpsertOwnershipRequest

(synq.owners.v1.UpsertOwnershipRequest)

| Field                                                                                     | Type                                       | Description                                                                                                                                  |
| ----------------------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| owner\_id                                                                                 | [ string](#string)                         | Id of the owner this ownership belongs to. Accepts the bare UUID or the `owner-<uuid>` entity\_id form (the prefix is stripped server-side). |
| id                                                                                        | [ string](#string)                         | Opaque id of the ownership (a UUID). The same id updates the same ownership; a new id creates a new one.                                     |
| selection                                                                                 | [ OwnershipSelection](#ownershipselection) | Which assets this ownership covers.                                                                                                          |
| alert                                                                                     | [ AlertConfig](#alertconfig)               | How alerts fire for the covered assets. Optional.                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string)                 | Optional optimistic-concurrency guard.                                                                                                       |
| actor                                                                                     | [ Actor](#actor)                           | Who is performing this write. Optional.                                                                                                      |

### UpsertOwnershipResponse

(synq.owners.v1.UpsertOwnershipResponse)

| Field     | Type                     | Description                            |
| --------- | ------------------------ | -------------------------------------- |
| ownership | [ Ownership](#ownership) | The stored ownership after the upsert. |

### AlertConfig

(synq.owners.v1.AlertConfig)

How alerts fire for the assets an ownership covers. Deliberately mirrors the
settings on the public alerts API (`synq.alerts.v1`) so alerting behaviour
reads the same across SYNQ.

| Field                         | Type                                             | Description                                                                                                                                                                                                                   |
| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| severities                    | [repeated Severity](#severity)                   | Failure severities that fire an alert (Warning / Error / Fatal). Empty means no severity is selected and the ownership routes no failure alerts.                                                                              |
| notify\_upstream              | [ bool](#bool)                                   | Also alert on issues in the upstream dependencies of the covered assets.                                                                                                                                                      |
| ongoing                       | [ OngoingAlertsStrategy](#ongoingalertsstrategy) | How repeat notifications for a still-open issue are handled: no repeats (Disabled), a scheduled digest (Schedule — a daily digest in the app), or one on every failed run (Stream). Leave unset for no ongoing notifications. |
| allow\_sql\_test\_audit\_link | [ bool](#bool)                                   | Include a link to the SQL test audit report in notifications.                                                                                                                                                                 |
| is\_disabled                  | [ bool](#bool)                                   | When true this ownership's alerts are turned off while the assignment itself stays in place.                                                                                                                                  |

### Ownership

(synq.owners.v1.Ownership)

An ownership assigns a set of data assets to an owner and configures the
alerts routed to that owner about those assets. In the app this is the
owner's "Owned assets". One owner can hold many ownerships; deleting the
owner deletes all of its ownerships.

| Field                                                                                                   | Type                                       | Description                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                         | Opaque id of the ownership (a UUID) supplied by the caller on create, which makes UpsertOwnership idempotent. This is the same value `synq.alerts.v1.AlertsService` reports as the ownership reference (`synq.alerts.v1.Alert.Owner.ownership_id`) on an alert attributed to this owner. |
| owner\_id                                                                                               | [ string](#string)                         | Id of the Owner this ownership belongs to (the owner's `id`, a UUID).                                                                                                                                                                                                                    |
| selection                                                                                               | [ OwnershipSelection](#ownershipselection) | Which assets this ownership covers.                                                                                                                                                                                                                                                      |
| alert                                                                                                   | [ AlertConfig](#alertconfig)               | How alerts fire for the covered assets.                                                                                                                                                                                                                                                  |
| etag                                                                                                    | [ string](#string)                         | Entity tag for optimistic concurrency: pass it back on UpsertOwnership / DeleteOwnership to guard against overwriting a concurrent change. Form: `W/"<id>-<version>"`. Opaque — do not parse.                                                                                            |
| created\_by                                                                                             | [ Actor](#actor)                           | Who created the ownership. Output-only.                                                                                                                                                                                                                                                  |
| updated\_by                                                                                             | [ Actor](#actor)                           | Who last edited the ownership. Output-only.                                                                                                                                                                                                                                              |
| created\_at                                                                                             | [ Timestamp](#timestamp)                   | When the ownership was created. Output-only.                                                                                                                                                                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp)           | When the ownership was soft-deleted, if it has been. Output-only.                                                                                                                                                                                                                        |

### OwnershipQuery

(synq.owners.v1.OwnershipQuery)

A named asset selection behind an ownership, expressed for the public API.
Uses the same write/read bridge as saved views and data products.

On write, provide the query in ONE of two forms:

* `public_query` — a structured query (the same shape used elsewhere for
  asset selection), convenient to build from a filter UI; or
* `resolver_ql` — the resolver query language, a compact text form that is
  the canonical way to author selections as code.
  When both are set, `resolver_ql` wins. The server compiles and stores the
  query canonically; the raw text is not preserved verbatim.

On read, the server returns `rendered_resolver_ql` (the stored query rendered
back to canonical resolver query language) and, best-effort, `public_query`
(the structured representation). `resolver_ql` is not echoed back — read
`rendered_resolver_ql`.

| Field                  | Type               | Description                                                                                                                                                                      |
| ---------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name                   | [ string](#string) | Human-readable name of the asset group (shown as "Asset group name").                                                                                                            |
| resolver\_ql           | [ string](#string) | WRITE (option A). The query in resolver query language.                                                                                                                          |
| rendered\_resolver\_ql | [ string](#string) | READ, output-only. The stored query rendered back to canonical resolver query language. Deterministically derived; does not preserve original hand-typed formatting or comments. |
| public\_query          | [ Query](#query)   | WRITE (option B) and READ. On write, the structured query to store (used when `resolver_ql` is empty). On read, a best-effort structured representation of the stored query.     |

### OwnershipSelection

(synq.owners.v1.OwnershipSelection)

The set of assets an ownership covers.

| Field                                                                                                   | Type                               | Description                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) selection.query           | [ OwnershipQuery](#ownershipquery) | Assets matched by a query. Covers both a custom "asset group" and the "all assets" case (a match-all query). Unlike a data product definition (which must be a leaf), an ownership query MAY reference data products and domains — routing alerts for everything in a data product/domain is a first-class use.                                                                                                                           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) selection.dataproduct\_id | [ string](#string)                 | All assets belonging to a single data product, referenced by its opaque id (the `id` of a `synq.dataproducts.v2.Dataproduct`, as returned by `synq.dataproducts.v2.DataproductsService`). Accepts either the bare UUID or the `entity_id` form (`dataproduct-<uuid>`) — the prefix is stripped server-side, so a product's `entity_id` from lineage can be assigned directly. The data product must exist in the workspace at write time. |

### Owner

(synq.owners.v1.Owner)

An owner: a named responsible party (a team or a person) that data assets can
be assigned to, together with the notification channels alerts about those
assets are delivered to. Assets are attached to an owner through Ownerships
(see OwnershipsService), so an owner on its own routes nothing until at least
one ownership assigns it some assets.

| Field                                                                                                   | Type                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)               | Opaque id of the owner (a UUID) supplied by the caller on create, which makes UpsertOwner idempotent. This is the id used to address the owner on this API (creating ownerships under it, deleting it).                                                                                                                                                                                                                      |
| entity\_id                                                                                              | [ string](#string)               | Stable, opaque platform identifier of this owner (of the form "owner-\<uuid>"). Output-only — the server derives it; never construct it by hand. This is the exact value other SYNQ APIs accept as an owner reference (for example the `synq.alerts.v1.AlertsService` owner path — see `synq.alerts.v1.Alert.Owner`), so read it here and pass it there to point at the same owner without needing to know how it is formed. |
| title                                                                                                   | [ string](#string)               | Human-readable name of the owner (shown as "Owner name" in the app).                                                                                                                                                                                                                                                                                                                                                         |
| contacts                                                                                                | [repeated Contact](#contact)     | Notification channels for this owner. A fired alert is delivered to every contact.                                                                                                                                                                                                                                                                                                                                           |
| source                                                                                                  | [ Source](#source)               | none                                                                                                                                                                                                                                                                                                                                                                                                                         |
| etag                                                                                                    | [ string](#string)               | Entity tag for optimistic concurrency: pass it back on UpsertOwner / DeleteOwner to guard against overwriting a concurrent change. Form: `W/"<id>-<version>"`. Opaque — do not parse.                                                                                                                                                                                                                                        |
| created\_by                                                                                             | [ Actor](#actor)                 | Who created the owner. Output-only.                                                                                                                                                                                                                                                                                                                                                                                          |
| updated\_by                                                                                             | [ Actor](#actor)                 | Who last edited the owner. Output-only.                                                                                                                                                                                                                                                                                                                                                                                      |
| created\_at                                                                                             | [ Timestamp](#timestamp)         | When the owner was created. Output-only.                                                                                                                                                                                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp) | When the owner was soft-deleted, if it has been. Output-only.                                                                                                                                                                                                                                                                                                                                                                |

### Contact

(synq.owners.v1.Contact)

A notification channel attached to an owner. An owner can hold several
contacts of different kinds; when an owner's ownership fires an alert, the
notification is delivered to every one of the owner's contacts.

| Field                                                                                                   | Type                                         | Description                             |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) contact\_method.slack     | [ SlackChannelContact](#slackchannelcontact) | Post to a Slack channel.                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) contact\_method.email     | [ EmailContact](#emailcontact)               | Send to a fixed set of email addresses. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) contact\_method.ms\_teams | [ MsTeamsContact](#msteamscontact)           | Post to a Microsoft Teams channel.      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) contact\_method.users     | [ UserContact](#usercontact)                 | Notify Coalesce Quality users by email. |

### EmailContact

(synq.owners.v1.EmailContact)

Deliver notifications by email to a fixed list of recipients.

| Field             | Type                       | Description                |
| ----------------- | -------------------------- | -------------------------- |
| recipient\_emails | [repeated string](#string) | Recipient email addresses. |

### MsTeamsContact

(synq.owners.v1.MsTeamsContact)

Deliver notifications to a Microsoft Teams channel, optionally @-mentioning
members.

| Field       | Type                                       | Description                                         |
| ----------- | ------------------------------------------ | --------------------------------------------------- |
| channel\_id | [ string](#string)                         | Teams channel id to post in.                        |
| mentions    | [repeated MsTeamsMention](#msteamsmention) | Members to @-mention in the notification. Optional. |

### MsTeamsMemberMention

(synq.owners.v1.MsTeamsMemberMention)

An @-mention of an individual Microsoft Teams member.

| Field      | Type               | Description                                                                                                                                                                                                          |
| ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| member\_id | [ string](#string) | Teams member id that is actually mentioned. A workspace user's Teams member id is available from `synq.users.v1.UsersService` — the `msteams:<id>` entry in `GetUserIdentities`, or an `ms_teams` alias on the user. |
| name       | [ string](#string) | Display name of the member (informational). Optional.                                                                                                                                                                |

### MsTeamsMention

(synq.owners.v1.MsTeamsMention)

A single @-mention in a Microsoft Teams notification.

| Field                                                                                        | Type                                           | Description                         |
| -------------------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mention.member | [ MsTeamsMemberMention](#msteamsmembermention) | Mention an individual Teams member. |

### SlackChannelContact

(synq.owners.v1.SlackChannelContact)

Deliver notifications to a Slack channel, optionally @-mentioning users or
user groups in the message.

| Field      | Type                                   | Description                                                                                                                                       |
| ---------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| channel    | [ string](#string)                     | Channel to post in — a channel name (e.g. "#data-alerts") or a channel id (e.g. "C0123456789").                                                   |
| team\_name | [ string](#string)                     | Name of the Slack workspace (team) the channel belongs to. Optional; only needed to disambiguate when more than one Slack workspace is connected. |
| mentions   | [repeated SlackMention](#slackmention) | Users and/or user groups to @-mention in the notification. Optional.                                                                              |

### SlackGroupMention

(synq.owners.v1.SlackGroupMention)

An @-mention of a Slack user group.

| Field       | Type               | Description                                                          |
| ----------- | ------------------ | -------------------------------------------------------------------- |
| group\_name | [ string](#string) | Display name of the group. Optional.                                 |
| slack\_id   | [ string](#string) | Slack user-group id that is actually mentioned (e.g. "S0123456789"). |

### SlackMention

(synq.owners.v1.SlackMention)

A single @-mention in a Slack notification.

| Field                                                                                       | Type                                     | Description                       |
| ------------------------------------------------------------------------------------------- | ---------------------------------------- | --------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mention.user  | [ SlackUserMention](#slackusermention)   | Mention an individual Slack user. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) mention.group | [ SlackGroupMention](#slackgroupmention) | Mention a Slack user group.       |

### SlackUserMention

(synq.owners.v1.SlackUserMention)

An @-mention of an individual Slack user.

| Field      | Type               | Description                                                                                                                                                                                                                |
| ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user\_name | [ string](#string) | Display handle of the user (informational; helps readers recognise the mention). Optional.                                                                                                                                 |
| slack\_id  | [ string](#string) | Slack user id that is actually mentioned (e.g. "U0123456789"). A workspace user's Slack id is available from `synq.users.v1.UsersService` — the `slack:<id>` entry in `GetUserIdentities`, or a `slack` alias on the user. |

### UserContact

(synq.owners.v1.UserContact)

Deliver notifications to Coalesce Quality users, identified by email. Each
email should match a user in the workspace; the notification reaches them
through their own configured notification preferences.

Enumerate the valid users (and their emails) with `synq.users.v1.UsersService`
— `ListUsers` for the full set, or `GetByEmail` to validate a single address.

| Field        | Type                       | Description                                                                                                                                |
| ------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| user\_emails | [repeated string](#string) | Emails of the users to notify. Each should match a workspace user; look them up via `synq.users.v1.UsersService.ListUsers` / `GetByEmail`. |

### Domain

(synq.domains.v2.Domain)

A data domain: a named area of ownership that groups the assets, data products
and sub-domains belonging to one part of the business.

Domains form a hierarchy through `parent_id`, and a parent's membership
includes everything its sub-domains contain.

| Field                                                                                                   | Type                                   | Description                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                     | Opaque id of the domain (a UUID). Supplied by the caller on create, which makes Upsert idempotent. This is the value to pass wherever another API accepts a domain reference (for example the `in_domain` query operand). |
| name                                                                                                    | [ string](#string)                     | Human-readable name.                                                                                                                                                                                                      |
| description                                                                                             | [ string](#string)                     | Optional longer description.                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id   | [optional string](#string)             | Id of the parent domain, if this is a sub-domain. Absent for a top-level domain.                                                                                                                                          |
| source                                                                                                  | [ Source](#source)                     | none                                                                                                                                                                                                                      |
| definition                                                                                              | [ DomainDefinition](#domaindefinition) | The membership definition. Omitted when a read requests `exclude_definition`.                                                                                                                                             |
| etag                                                                                                    | [ string](#string)                     | Entity tag for optimistic concurrency: pass back on Upsert / Delete / definition writes to guard against overwriting a concurrent change. Form: `W/"<id>-<version>"`. Opaque — do not parse.                              |
| created\_by                                                                                             | [ Actor](#actor)                       | Who created the domain. Output-only.                                                                                                                                                                                      |
| updated\_by                                                                                             | [ Actor](#actor)                       | Who last edited the domain. Output-only.                                                                                                                                                                                  |
| created\_at                                                                                             | [ Timestamp](#timestamp)               | When the domain was created. Output-only.                                                                                                                                                                                 |
| updated\_at                                                                                             | [ Timestamp](#timestamp)               | When the domain was last updated. Output-only. Absent for a domain that has not been written since this field was introduced.                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp)       | When the domain was soft-deleted, if it has been. Output-only.                                                                                                                                                            |

### DomainDefinition

(synq.domains.v2.DomainDefinition)

The membership of a domain: which assets belong to it. A definition is an
ordered list of parts; an asset is a member if it matches ANY part (the parts
are OR'd together).

Unlike a data product, a domain is NOT a leaf: a part may pull in a whole data
product or another domain, and membership is then resolved recursively. The
server maintains the reference graph across domains and data products and
rejects any write that would close a loop, naming the offending path — so a
definition can always be resolved in finite time. The domain hierarchy counts
as a reference too: a parent domain aggregates its sub-domains.

| Field | Type                   | Description                                                               |
| ----- | ---------------------- | ------------------------------------------------------------------------- |
| parts | [repeated Part](#part) | The parts of the definition. An asset is a member if it matches any part. |

### DomainDefinition.Part

(synq.domains.v2.DomainDefinition.Part)

A single piece of a domain definition: a pinned asset, a whole data product,
a whole other domain, or a selection query.

| Field                                                                                              | Type                         | Description                                                                                                                                                                                                                                                               |
| -------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                 | [ string](#string)           | Stable id of this part (a UUID). Supplied by the caller for idempotent part upserts; the server mints one if left empty on create.                                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.entity\_id      | [ string](#string)           | Pin a single asset by its opaque entity id (as returned by resolve / listing APIs). Never constructed by hand.                                                                                                                                                            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.dataproduct\_id | [ string](#string)           | Include everything that belongs to a data product. Accepts either the bare data-product UUID or the `dataproduct-<uuid>` form that API returns as its `entity_id` — the prefix is stripped server-side.                                                                   |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.domain\_id      | [ string](#string)           | Include everything that belongs to another domain, including that domain's own sub-domains. Accepts either the bare domain UUID or the `domain-<uuid>` form — the prefix is stripped server-side. Rejected when it would make the domains reference each other in a loop. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query           | [ DomainQuery](#domainquery) | Select assets by a query.                                                                                                                                                                                                                                                 |

A query whose whole content is a single domain reference is equivalent to `domain_id` and is returned in that form on read, since both describe the same membership. |

### DomainQuery

(synq.domains.v2.DomainQuery)

The selection query behind a domain definition part, expressed for the public
API.

On write, provide the query in ONE of three forms:

* `resolver_ql` — the resolver query language, a compact text form that is
  the canonical way to author selections as code;
* `public_query` — a structured query (the same shape used elsewhere for
  asset selection), convenient to build from a filter UI; or
* `asset_selection_query` — the structured form domains have always
  accepted, kept so an existing definition can be moved across unchanged.
  When more than one is set the first of that list wins. The server compiles the
  query and stores it canonically; the raw text is not preserved verbatim.

On read, the server returns `rendered_resolver_ql` (the stored query rendered
back to canonical resolver query language) plus, best-effort, both structured
forms. `resolver_ql` is not echoed back — read `rendered_resolver_ql`.

A domain query may reference another domain or a data product (via the
`in_domain` / `in_dataproduct` operands, or their resolver-query-language
equivalents). Such a reference is resolved recursively and is rejected only
when it would close a reference loop.

| Field                   | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ----------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| resolver\_ql            | [ string](#string)                           | WRITE (option A). The query in resolver query language.                                                                                                                                                                                                                                                                                                                                                                                               |
| rendered\_resolver\_ql  | [ string](#string)                           | READ, output-only. The stored query rendered back to canonical resolver query language. Deterministically derived; does not preserve original hand-typed formatting or comments.                                                                                                                                                                                                                                                                      |
| public\_query           | [ Query](#query)                             | WRITE (option B) and READ. On write, the structured query to store (used when `resolver_ql` is empty). On read, a best-effort structured representation of the stored query.                                                                                                                                                                                                                                                                          |
| asset\_selection\_query | [ AssetSelectionQuery](#assetselectionquery) | WRITE (option C) and READ. The structured form carried over from `synq.domains.v1`, for definitions authored against that API. On write it is used only when neither `resolver_ql` nor `public_query` is set. On read it is the stored query as-is, so a v1 definition round-trips through v2 unchanged. `public_query` is the richer form — prefer it for new integrations, since it can express domain and data-product references this one cannot. |

### BatchGetRequest

(synq.domains.v2.BatchGetRequest)

| Field               | Type                       | Description                                                                                                                      |
| ------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| ids                 | [repeated string](#string) | Ids to fetch (1–200, unique). Each accepts either the bare UUID or the `domain-<uuid>` form; the prefix is stripped server-side. |
| include\_deleted    | [ bool](#bool)             | Include soft-deleted domains.                                                                                                    |
| exclude\_definition | [ bool](#bool)             | Omit the (potentially large) membership definition from each domain.                                                             |

### BatchGetResponse

(synq.domains.v2.BatchGetResponse)

| Field   | Type                              | Description                                                                               |
| ------- | --------------------------------- | ----------------------------------------------------------------------------------------- |
| domains | [map DomainsEntry](#domainsentry) | Domains keyed by id. Ids that do not exist (or are deleted, unless requested) are absent. |

### BatchGetResponse.DomainsEntry

(synq.domains.v2.BatchGetResponse.DomainsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Domain](#domain) | none        |

### DeleteRequest

(synq.domains.v2.DeleteRequest)

| Field                                                                                     | Type                       | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the domain to delete. Accepts the bare UUID or the `domain-<uuid>` form (the prefix is stripped server-side).                              |
| purge                                                                                     | [ bool](#bool)             | Hard-delete instead of soft-delete, releasing the id for reuse. Refused while the domain still has sub-domains — delete or re-parent them first. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                                           |

### DeleteResponse

(synq.domains.v2.DeleteResponse)

### FetchDomainWithSubDomainsRequest

(synq.domains.v2.FetchDomainWithSubDomainsRequest)

| Field               | Type               | Description                                                          |
| ------------------- | ------------------ | -------------------------------------------------------------------- |
| id                  | [ string](#string) | Id of the domain. Accepts the bare UUID or the `domain-<uuid>` form. |
| exclude\_definition | [ bool](#bool)     | Omit the membership definition from each domain.                     |

### FetchDomainWithSubDomainsResponse

(synq.domains.v2.FetchDomainWithSubDomainsResponse)

| Field   | Type                              | Description                                         |
| ------- | --------------------------------- | --------------------------------------------------- |
| domains | [map DomainsEntry](#domainsentry) | The domain and its direct sub-domains, keyed by id. |

### FetchDomainWithSubDomainsResponse.DomainsEntry

(synq.domains.v2.FetchDomainWithSubDomainsResponse.DomainsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Domain](#domain) | none        |

### GetUsageRequest

(synq.domains.v2.GetUsageRequest)

### GetUsageResponse

(synq.domains.v2.GetUsageResponse)

| Field             | Type             | Description                          |
| ----------------- | ---------------- | ------------------------------------ |
| num\_domains      | [ int32](#int32) | Number of top-level domains.         |
| num\_sub\_domains | [ int32](#int32) | Number of sub-domains, at any depth. |

### ListMembersRequest

(synq.domains.v2.ListMembersRequest)

| Field      | Type                       | Description                                                                                                                     |
| ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| id         | [ string](#string)         | Id of the domain whose members to list. Accepts the bare UUID or the `domain-<uuid>` form (the prefix is stripped server-side). |
| pagination | [ Pagination](#pagination) | Pagination.                                                                                                                     |

### ListMembersResponse

(synq.domains.v2.ListMembersResponse)

| Field       | Type                       | Description                                                          |
| ----------- | -------------------------- | -------------------------------------------------------------------- |
| entity\_ids | [repeated string](#string) | Opaque entity ids of the assets that currently belong to the domain. |
| page\_info  | [ PageInfo](#pageinfo)     | Pagination cursor for the next page.                                 |

### ListRequest

(synq.domains.v2.ListRequest)

| Field                                                                                                 | Type                       | Description                                                                                                                              |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| pagination                                                                                            | [ Pagination](#pagination) | Pagination.                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id | [optional string](#string) | Restrict to the children of one domain. Pass an empty string to return only top-level domains. Omit to return every domain at any level. |
| include\_deleted                                                                                      | [ bool](#bool)             | Include soft-deleted domains.                                                                                                            |
| exclude\_definition                                                                                   | [ bool](#bool)             | Omit the membership definition from each domain.                                                                                         |

### ListResponse

(synq.domains.v2.ListResponse)

| Field      | Type                       | Description                          |
| ---------- | -------------------------- | ------------------------------------ |
| domains    | [repeated Domain](#domain) | The matching domains.                |
| page\_info | [ PageInfo](#pageinfo)     | Pagination cursor for the next page. |

### RemoveDefinitionPartRequest

(synq.domains.v2.RemoveDefinitionPartRequest)

| Field                                                                                     | Type                       | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the domain. Accepts the bare UUID or the `domain-<uuid>` form (the prefix is stripped server-side).                                        |
| part\_id                                                                                  | [ string](#string)         | Id of the part to remove.                                                                                                                        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                                           |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user. |

### RemoveDefinitionPartResponse

(synq.domains.v2.RemoveDefinitionPartResponse)

| Field  | Type               | Description                               |
| ------ | ------------------ | ----------------------------------------- |
| domain | [ Domain](#domain) | The stored domain after the part removal. |

### SetDefinitionRequest

(synq.domains.v2.SetDefinitionRequest)

| Field                                                                                     | Type                                   | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)                     | Id of the domain whose definition to replace. Accepts the bare UUID or the `domain-<uuid>` form (the prefix is stripped server-side).            |
| definition                                                                                | [ DomainDefinition](#domaindefinition) | The new membership definition (replaces the existing one entirely).                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string)             | Optional optimistic-concurrency guard.                                                                                                           |
| actor                                                                                     | [ Actor](#actor)                       | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user. |

### SetDefinitionResponse

(synq.domains.v2.SetDefinitionResponse)

| Field  | Type               | Description                                   |
| ------ | ------------------ | --------------------------------------------- |
| domain | [ Domain](#domain) | The stored domain after the definition write. |

### UpsertDefinitionPartRequest

(synq.domains.v2.UpsertDefinitionPartRequest)

| Field                                                                                     | Type                       | Description                                                                                                                                      |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| id                                                                                        | [ string](#string)         | Id of the domain. Accepts the bare UUID or the `domain-<uuid>` form (the prefix is stripped server-side).                                        |
| part                                                                                      | [ Part](#part)             | The part to add or replace (matched by its part id).                                                                                             |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag | [optional string](#string) | Optional optimistic-concurrency guard.                                                                                                           |
| actor                                                                                     | [ Actor](#actor)           | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user. |

### UpsertDefinitionPartResponse

(synq.domains.v2.UpsertDefinitionPartResponse)

| Field  | Type               | Description                             |
| ------ | ------------------ | --------------------------------------- |
| domain | [ Domain](#domain) | The stored domain after the part write. |

### UpsertRequest

(synq.domains.v2.UpsertRequest)

| Field                                                                                                   | Type                                           | Description                                                                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                                                                                                      | [ string](#string)                             | Opaque id of the domain. Accepts either the bare UUID or the `domain-<uuid>` form — the prefix is stripped server-side, so the value you read back from any API can be passed straight in. The same id updates the same domain; a new id creates a new domain.                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_name.name               | [optional string](#string)                     | Name. Required when creating; omit to keep the existing name on update.                                                                                                                                                                                                                     |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_description.description | [optional string](#string)                     | Description. Omit to keep the existing description.                                                                                                                                                                                                                                         |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id   | [optional string](#string)                     | Parent domain, making this a sub-domain. Omit to keep the current parent; pass an empty string to detach the domain and make it top-level. Accepts the bare UUID or the `domain-<uuid>` form. The parent must already exist, and the write is rejected if it would make the hierarchy loop. |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_source.source           | [optional Source](#source)                     | Source. Omit to keep the existing source (defaults to SOURCE\_SYNQ on create).                                                                                                                                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_definition.definition   | [optional DomainDefinition](#domaindefinition) | Membership definition. Omit to keep the existing definition; pass a present (possibly empty) definition to replace it.                                                                                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_etag.etag               | [optional string](#string)                     | Optional optimistic-concurrency guard. When set, the update fails with a conflict if the domain was modified since this etag was read.                                                                                                                                                      |
| actor                                                                                                   | [ Actor](#actor)                               | Who is performing this write. Optional — identity is completed from the calling credentials; set it to attribute the change on behalf of a user.                                                                                                                                            |

### UpsertResponse

(synq.domains.v2.UpsertResponse)

| Field  | Type               | Description                         |
| ------ | ------------------ | ----------------------------------- |
| domain | [ Domain](#domain) | The stored domain after the upsert. |

### DomainMembership

(synq.domains.members.v1.DomainMembership)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| user\_id    | [ string](#string) | none        |
| domain\_id  | [ string](#string) | none        |
| is\_default | [ bool](#bool)     | none        |

### AddDomainMembersRequest

(synq.domains.members.v1.AddDomainMembersRequest)

| Field      | Type                       | Description |
| ---------- | -------------------------- | ----------- |
| domain\_id | [ string](#string)         | none        |
| user\_ids  | [repeated string](#string) | none        |

### AddDomainMembersResponse

(synq.domains.members.v1.AddDomainMembersResponse)

### ListDomainMembersRequest

(synq.domains.members.v1.ListDomainMembersRequest)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |

### ListDomainMembersResponse

(synq.domains.members.v1.ListDomainMembersResponse)

| Field       | Type                                           | Description |
| ----------- | ---------------------------------------------- | ----------- |
| memberships | [repeated DomainMembership](#domainmembership) | none        |

### ListUserDomainsRequest

(synq.domains.members.v1.ListUserDomainsRequest)

| Field    | Type               | Description |
| -------- | ------------------ | ----------- |
| user\_id | [ string](#string) | none        |

### ListUserDomainsResponse

(synq.domains.members.v1.ListUserDomainsResponse)

| Field       | Type                                           | Description |
| ----------- | ---------------------------------------------- | ----------- |
| memberships | [repeated DomainMembership](#domainmembership) | none        |

### RemoveDomainMembersRequest

(synq.domains.members.v1.RemoveDomainMembersRequest)

| Field      | Type                       | Description |
| ---------- | -------------------------- | ----------- |
| domain\_id | [ string](#string)         | none        |
| user\_ids  | [repeated string](#string) | none        |

### RemoveDomainMembersResponse

(synq.domains.members.v1.RemoveDomainMembersResponse)

### SetDefaultUserDomainRequest

(synq.domains.members.v1.SetDefaultUserDomainRequest)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |
| user\_id   | [ string](#string) | none        |

### SetDefaultUserDomainResponse

(synq.domains.members.v1.SetDefaultUserDomainResponse)

### AssetSelectionQuery

(synq.domains.v1.AssetSelectionQuery)

| Field   | Type                             | Description |
| ------- | -------------------------------- | ----------- |
| parts   | [repeated QueryPart](#querypart) | none        |
| operand | [ QueryOperand](#queryoperand)   | none        |

### AssetSelectionQuery.QueryPart

(synq.domains.v1.AssetSelectionQuery.QueryPart)

| Field                                                                                                            | Type                                                 | Description |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier\_list              | [ IdentifierList](#identifierlist)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_name\_search            | [ WithNameSearch](#withnamesearch)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_type                    | [ WithType](#withtype)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_annotation              | [ WithAnnotation](#withannotation)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_data\_platform            | [ InDataPlatform](#indataplatform)                   | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.in\_folder                    | [ InFolder](#infolder)                               | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_data\_platform\_type    | [ WithDataPlatformType](#withdataplatformtype)       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identities\_of                | [ IdentitiesOf](#identitiesof)                       | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.with\_default\_visible\_types | [ WithDefaultVisibleTypes](#withdefaultvisibletypes) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query                         | [ AssetSelectionQuery](#assetselectionquery)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.unsupported                   | [ Unsupported](#unsupported)                         | none        |

### DomainDefinition

(synq.domains.v1.DomainDefinition)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| parts | [repeated Part](#part) | none        |

### DomainDefinition.Part

(synq.domains.v1.DomainDefinition.Part)

| Field                                                                                          | Type                                             | Description     |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------- |
| id                                                                                             | [ string](#string)                               | part identifier |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.identifier  | [ Identifier](#identifier)                       | none            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.dataproduct | [ DataproductIdentifier](#dataproductidentifier) | none            |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) part.query       | [ AssetSelectionQuery](#assetselectionquery)     | none            |

### Domain

(synq.domains.v1.Domain)

| Field                                                                                                   | Type                                   | Description                                   |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------- | --------------------------------------------- |
| id                                                                                                      | [ string](#string)                     | none                                          |
| name                                                                                                    | [ string](#string)                     | none                                          |
| description                                                                                             | [ string](#string)                     | none                                          |
| created\_at                                                                                             | [ Timestamp](#timestamp)               | none                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_deleted\_at.deleted\_at | [optional Timestamp](#timestamp)       | none                                          |
| definition                                                                                              | [ DomainDefinition](#domaindefinition) | none                                          |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id   | [optional string](#string)             | none                                          |
| source                                                                                                  | [ Source](#source)                     | Source for creation and management of domain. |

### BatchGetRequest

(synq.domains.v1.BatchGetRequest)

| Field       | Type                       | Description |
| ----------- | -------------------------- | ----------- |
| domain\_ids | [repeated string](#string) | none        |

### BatchGetResponse

(synq.domains.v1.BatchGetResponse)

| Field   | Type                              | Description |
| ------- | --------------------------------- | ----------- |
| domains | [map DomainsEntry](#domainsentry) | none        |

### BatchGetResponse.DomainsEntry

(synq.domains.v1.BatchGetResponse.DomainsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Domain](#domain) | none        |

### DeleteRequest

(synq.domains.v1.DeleteRequest)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |

### DeleteResponse

(synq.domains.v1.DeleteResponse)

### FetchDomainWithSubDomainsRequest

(synq.domains.v1.FetchDomainWithSubDomainsRequest)

| Field               | Type               | Description |
| ------------------- | ------------------ | ----------- |
| domain\_id          | [ string](#string) | none        |
| exclude\_definition | [ bool](#bool)     | none        |

### FetchDomainWithSubDomainsResponse

(synq.domains.v1.FetchDomainWithSubDomainsResponse)

| Field   | Type                              | Description |
| ------- | --------------------------------- | ----------- |
| domains | [map DomainsEntry](#domainsentry) | none        |

### FetchDomainWithSubDomainsResponse.DomainsEntry

(synq.domains.v1.FetchDomainWithSubDomainsResponse.DomainsEntry)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| key   | [ string](#string) | none        |
| value | [ Domain](#domain) | none        |

### GetUsageRequest

(synq.domains.v1.GetUsageRequest)

### GetUsageResponse

(synq.domains.v1.GetUsageResponse)

| Field             | Type             | Description |
| ----------------- | ---------------- | ----------- |
| num\_domains      | [ int32](#int32) | none        |
| num\_sub\_domains | [ int32](#int32) | none        |

### ListRequest

(synq.domains.v1.ListRequest)

| Field                                                                                                 | Type                       | Description |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id | [optional string](#string) | none        |
| exclude\_definition                                                                                   | [ bool](#bool)             | none        |

### ListResponse

(synq.domains.v1.ListResponse)

| Field   | Type                       | Description |
| ------- | -------------------------- | ----------- |
| domains | [repeated Domain](#domain) | none        |

### RemoveDefinitionPartRequest

(synq.domains.v1.RemoveDefinitionPartRequest)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |
| part\_id   | [ string](#string) | none        |

### RemoveDefinitionPartResponse

(synq.domains.v1.RemoveDefinitionPartResponse)

### SetDefinitionRequest

(synq.domains.v1.SetDefinitionRequest)

| Field      | Type                                   | Description |
| ---------- | -------------------------------------- | ----------- |
| domain\_id | [ string](#string)                     | none        |
| definition | [ DomainDefinition](#domaindefinition) | none        |

### SetDefinitionResponse

(synq.domains.v1.SetDefinitionResponse)

### UpsertDefinitionPartRequest

(synq.domains.v1.UpsertDefinitionPartRequest)

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| domain\_id | [ string](#string) | none        |
| part       | [ Part](#part)     | none        |

### UpsertDefinitionPartResponse

(synq.domains.v1.UpsertDefinitionPartResponse)

### UpsertRequest

(synq.domains.v1.UpsertRequest)

| Field                                                                                                 | Type                       | Description |
| ----------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| id                                                                                                    | [ string](#string)         | none        |
| name                                                                                                  | [ string](#string)         | none        |
| description                                                                                           | [ string](#string)         | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_parent\_id.parent\_id | [optional string](#string) | none        |
| source                                                                                                | [ Source](#source)         | none        |

### UpsertResponse

(synq.domains.v1.UpsertResponse)

### SetPlatformAuthenticationRequest

(synq.platforms.v1.SetPlatformAuthenticationRequest)

| Field          | Type                                               | Description            |
| -------------- | -------------------------------------------------- | ---------------------- |
| platform       | [ DataPlatformIdentifier](#dataplatformidentifier) | Platform identifier    |
| authentication | [ PlatformAuthentication](#platformauthentication) | Authentication details |

### SetPlatformAuthenticationResponse

(synq.platforms.v1.SetPlatformAuthenticationResponse)

| Field                                                                                                         | Type                                                       | Description                                                                                               |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| success                                                                                                       | [ bool](#bool)                                             | none                                                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_authentication.authentication | [optional PlatformAuthentication](#platformauthentication) | The authentication is returned in case there is a server side set information to be passed to the client. |

### OAuthAuthentication

(synq.platforms.v1.OAuthAuthentication)

Authentication using OAuth credentials

| Field          | Type               | Description |
| -------------- | ------------------ | ----------- |
| client\_id     | [ string](#string) | none        |
| client\_secret | [ string](#string) | none        |

### PasswordAuthentication

(synq.platforms.v1.PasswordAuthentication)

Authentication using a username and password

| Field    | Type               | Description |
| -------- | ------------------ | ----------- |
| username | [ string](#string) | none        |
| password | [ string](#string) | none        |

### PlatformAuthentication

(synq.platforms.v1.PlatformAuthentication)

| Field                                                                                                                 | Type                                                                   | Description |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.token                    | [ TokenAuthentication](#tokenauthentication)                           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.oauth                    | [ OAuthAuthentication](#oauthauthentication)                           | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.password                 | [ PasswordAuthentication](#passwordauthentication)                     | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.synq\_managed\_key\_pair | [ SynqManagedKeyPairAuthentication](#synqmanagedkeypairauthentication) | none        |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) authentication.user\_managed\_key\_pair | [ UserManagedKeyPairAuthentication](#usermanagedkeypairauthentication) | none        |

### SynqManagedKeyPairAuthentication

(synq.platforms.v1.SynqManagedKeyPairAuthentication)

Authentication using a managed key pair.
The public key will be set and returned by the server after the authentication is created.

| Field                                                                                                   | Type                       | Description |
| ------------------------------------------------------------------------------------------------------- | -------------------------- | ----------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_public\_key.public\_key | [optional string](#string) | none        |

### TokenAuthentication

(synq.platforms.v1.TokenAuthentication)

Authentication using a token (API key, PAT, etc)

| Field | Type               | Description |
| ----- | ------------------ | ----------- |
| token | [ string](#string) | none        |

### UserManagedKeyPairAuthentication

(synq.platforms.v1.UserManagedKeyPairAuthentication)

Authentication using a user-managed key pair.
The private key is stored safely as a secret. The response does not include the private key for security.

| Field        | Type               | Description |
| ------------ | ------------------ | ----------- |
| private\_key | [ string](#string) | none        |

### AthenaIdentifier

(synq.platforms.v1.AthenaIdentifier)

| Field    | Type               | Description                                                                                                                                                                                             |
| -------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| instance | [ string](#string) | AWS account and region the Athena workgroup runs in, formatted as "\<account-id>.\<region>" (e.g. "123456789012.eu-west-1"). Auto-derived by SYNQ from sts:GetCallerIdentity at integration setup time. |
| catalog  | [ string](#string) | Glue Data Catalog name. Almost always "AwsDataCatalog" — the default catalog for Athena unless the customer registered a federated catalog.                                                             |

### BigqueryIdentifier

(synq.platforms.v1.BigqueryIdentifier)

| Field   | Type               | Description      |
| ------- | ------------------ | ---------------- |
| project | [ string](#string) | BigQuery project |

### ClickhouseIdentifier

(synq.platforms.v1.ClickhouseIdentifier)

| Field  | Type               | Description                       |
| ------ | ------------------ | --------------------------------- |
| host   | [ string](#string) | Clickhouse host inclusive of port |
| schema | [ string](#string) | Clickhouse database               |

### DataPlatformIdentifier

(synq.platforms.v1.DataPlatformIdentifier)

DataPlatformIdentifier is a unique reference to a data platform integrated with Coalesce Quality.

| Field                                                                                                  | Type                                           | Description                                                                                       |
| ------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.unknown               | [ UnknownDataPlatform](#unknowndataplatform)   | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.bigquery              | [ BigqueryIdentifier](#bigqueryidentifier)     | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.clickhouse            | [ ClickhouseIdentifier](#clickhouseidentifier) | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.snowflake             | [ SnowflakeIdentifier](#snowflakeidentifier)   | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.redshift              | [ RedshiftIdentifier](#redshiftidentifier)     | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.postgres              | [ PostgresIdentifier](#postgresidentifier)     | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.mysql                 | [ MysqlIdentifier](#mysqlidentifier)           | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.databricks            | [ DatabricksIdentifier](#databricksidentifier) | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.dbt\_cloud            | [ DbtCloudIdentifier](#dbtcloudidentifier)     | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.sql\_mesh             | [ SqlMeshIdentifier](#sqlmeshidentifier)       | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.duckdb                | [ DuckDbIdentifier](#duckdbidentifier)         | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.trino                 | [ TrinoIdentifier](#trinoidentifier)           | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.mssql                 | [ MssqlIdentifier](#mssqlidentifier)           | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.oracle                | [ OracleIdentifier](#oracleidentifier)         | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.athena                | [ AthenaIdentifier](#athenaidentifier)         | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.fabric                | [ FabricIdentifier](#fabricidentifier)         | none                                                                                              |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) id.synq\_integration\_id | [ string](#string)                             | Coalesce Quality integration ID maps to the created integration on the Coalesce Quality platform. |

### DatabricksIdentifier

(synq.platforms.v1.DatabricksIdentifier)

| Field     | Type               | Description                     |
| --------- | ------------------ | ------------------------------- |
| workspace | [ string](#string) | URL of the databricks workspace |

### DbtCloudIdentifier

(synq.platforms.v1.DbtCloudIdentifier)

| Field         | Type               | Description                |
| ------------- | ------------------ | -------------------------- |
| api\_endpoint | [ string](#string) | API endpoint for Dbt Cloud |
| account\_id   | [ string](#string) | Account ID                 |
| project\_id   | [ string](#string) | Project ID                 |

### DuckDbIdentifier

(synq.platforms.v1.DuckDbIdentifier)

| Field               | Type               | Description |
| ------------------- | ------------------ | ----------- |
| motherduck\_account | [ string](#string) | none        |

### FabricIdentifier

(synq.platforms.v1.FabricIdentifier)

| Field         | Type               | Description                                                                                                                                                                                                                                                                                                                                                                       |
| ------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| instance      | [ string](#string) | Workspace SQL analytics endpoint host, e.g. "\<workspace-id>.datawarehouse.fabric.microsoft.com". Identifies the Fabric workspace the integration connects to. Fabric is workspace-scoped with cross-database queries, so the workspace host alone identifies the platform (like Databricks' workspace URL); a specific warehouse/table is addressed by FabricTableIdentifier.    |
| workspace\_id | [ string](#string) | Fabric workspace GUID — the identifier used by the Fabric REST API for workspace-scoped resources. The Fabric endpoint host in `instance` encodes the tenant and workspace GUIDs; this is the decoded workspace GUID, provided so you don't have to decode it yourself. `instance` remains the identifying value. Optional: empty when the host isn't a standard Fabric endpoint. |
| tenant\_id    | [ string](#string) | Entra (Azure AD) tenant GUID, decoded from the endpoint host in `instance` alongside workspace\_id. Optional: empty when the host isn't a standard Fabric endpoint.                                                                                                                                                                                                               |

### MssqlIdentifier

(synq.platforms.v1.MssqlIdentifier)

| Field    | Type               | Description     |
| -------- | ------------------ | --------------- |
| host     | [ string](#string) | SQL Server host |
| database | [ string](#string) | Database name   |

### MysqlIdentifier

(synq.platforms.v1.MysqlIdentifier)

| Field | Type               | Description                  |
| ----- | ------------------ | ---------------------------- |
| host  | [ string](#string) | Mysql host inclusive of port |

### OracleIdentifier

(synq.platforms.v1.OracleIdentifier)

| Field         | Type               | Description               |
| ------------- | ------------------ | ------------------------- |
| host          | [ string](#string) | Oracle host               |
| service\_name | [ string](#string) | Oracle service name (PDB) |

### PostgresIdentifier

(synq.platforms.v1.PostgresIdentifier)

| Field    | Type               | Description                     |
| -------- | ------------------ | ------------------------------- |
| host     | [ string](#string) | Postgres host inclusive of port |
| database | [ string](#string) | Postgres database               |

### RedshiftIdentifier

(synq.platforms.v1.RedshiftIdentifier)

| Field    | Type               | Description       |
| -------- | ------------------ | ----------------- |
| cluster  | [ string](#string) | Redshift cluster  |
| database | [ string](#string) | Redshift database |

### SnowflakeIdentifier

(synq.platforms.v1.SnowflakeIdentifier)

| Field    | Type               | Description        |
| -------- | ------------------ | ------------------ |
| account  | [ string](#string) | Snowflake account  |
| database | [ string](#string) | Snowflake database |

### SqlMeshIdentifier

(synq.platforms.v1.SqlMeshIdentifier)

| Field                       | Type               | Description                            |
| --------------------------- | ------------------ | -------------------------------------- |
| default\_database\_instance | [ string](#string) | Default database instance for SQL Mesh |

### TrinoIdentifier

(synq.platforms.v1.TrinoIdentifier)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| coordinator | [ string](#string) | none        |

### UnknownDataPlatform

(synq.platforms.v1.UnknownDataPlatform)

### AddIssuesToIncidentRequest

(synq.incidents.v1.AddIssuesToIncidentRequest)

| Field        | Type                       | Description                                                        |
| ------------ | -------------------------- | ------------------------------------------------------------------ |
| incident\_id | [ string](#string)         | ID of the incident to add issues to                                |
| actor        | [ Actor](#actor)           | Actor adding the issues                                            |
| at           | [ Timestamp](#timestamp)   | Time at which the issues were added. Defaults to the current time. |
| issue\_ids   | [repeated string](#string) | IDs of issues to add to the incident                               |

### AddIssuesToIncidentResponse

(synq.incidents.v1.AddIssuesToIncidentResponse)

### AssignIncidentOwnerRequest

(synq.incidents.v1.AssignIncidentOwnerRequest)

| Field        | Type               | Description                               |
| ------------ | ------------------ | ----------------------------------------- |
| incident\_id | [ string](#string) | ID of the incident to assign the owner to |
| owner\_email | [ string](#string) | none                                      |
| actor        | [ Actor](#actor)   | none                                      |

### AssignIncidentOwnerResponse

(synq.incidents.v1.AssignIncidentOwnerResponse)

### BatchGetIncidentsRequest

(synq.incidents.v1.BatchGetIncidentsRequest)

| Field         | Type                       | Description                 |
| ------------- | -------------------------- | --------------------------- |
| incident\_ids | [repeated string](#string) | IDs of the incidents to get |

### BatchGetIncidentsResponse

(synq.incidents.v1.BatchGetIncidentsResponse)

| Field     | Type                                  | Description                  |
| --------- | ------------------------------------- | ---------------------------- |
| incidents | [map IncidentsEntry](#incidentsentry) | Incidents keyed by their IDs |

### BatchGetIncidentsResponse.IncidentsEntry

(synq.incidents.v1.BatchGetIncidentsResponse.IncidentsEntry)

| Field | Type                   | Description |
| ----- | ---------------------- | ----------- |
| key   | [ string](#string)     | none        |
| value | [ Incident](#incident) | none        |

### CancelIncidentRequest

(synq.incidents.v1.CancelIncidentRequest)

| Field        | Type                     | Description                                                             |
| ------------ | ------------------------ | ----------------------------------------------------------------------- |
| incident\_id | [ string](#string)       | ID of the incident to cancel                                            |
| actor        | [ Actor](#actor)         | Actor cancelling the incident                                           |
| at           | [ Timestamp](#timestamp) | Time at which the incident was cancelled. Defaults to the current time. |

### CancelIncidentResponse

(synq.incidents.v1.CancelIncidentResponse)

### CloseIncidentRequest

(synq.incidents.v1.CloseIncidentRequest)

| Field        | Type                     | Description                                                          |
| ------------ | ------------------------ | -------------------------------------------------------------------- |
| incident\_id | [ string](#string)       | ID of the incident to close                                          |
| actor        | [ Actor](#actor)         | Actor closing the incident                                           |
| at           | [ Timestamp](#timestamp) | Time at which the incident was closed. Defaults to the current time. |

### CloseIncidentResponse

(synq.incidents.v1.CloseIncidentResponse)

### CreateIncidentRequest

(synq.incidents.v1.CreateIncidentRequest)

| Field        | Type                       | Description                                                           |
| ------------ | -------------------------- | --------------------------------------------------------------------- |
| issue\_ids   | [repeated string](#string) | IDs of issues to add to the incident                                  |
| name         | [ string](#string)         | Name of the incident                                                  |
| actor        | [ Actor](#actor)           | Actor creating the incident                                           |
| at           | [ Timestamp](#timestamp)   | Time at which the incident was created. Defaults to the current time. |
| group\_ids   | [repeated string](#string) | Optional group IDs associated with the incident                       |
| owner\_email | [ string](#string)         | none                                                                  |

### CreateIncidentResponse

(synq.incidents.v1.CreateIncidentResponse)

| Field    | Type                   | Description |
| -------- | ---------------------- | ----------- |
| incident | [ Incident](#incident) | none        |

### ListIncidentsRequest

(synq.incidents.v1.ListIncidentsRequest)

| Field                                                                                                 | Type                               | Description                 |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------- | --------------------------- |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_time.time             | [optional Time](#time)             | Time range filter           |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_sort.sort             | [optional Sort](#sort)             | Sort options                |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_pagination.pagination | [optional Pagination](#pagination) | Pagination                  |
| states                                                                                                | [repeated State](#state)           | Filter by states            |
| affected\_entities                                                                                    | [repeated Identifier](#identifier) | Filter by affected entities |

### ListIncidentsRequest.Sort

(synq.incidents.v1.ListIncidentsRequest.Sort)

| Field    | Type             | Description |
| -------- | ---------------- | ----------- |
| sort\_by | [ Field](#field) | none        |
| order    | [ Order](#order) | none        |

### ListIncidentsRequest.Time

(synq.incidents.v1.ListIncidentsRequest.Time)

| Field | Type                     | Description |
| ----- | ------------------------ | ----------- |
| field | [ Field](#field)         | none        |
| from  | [ Timestamp](#timestamp) | none        |
| to    | [ Timestamp](#timestamp) | none        |

### ListIncidentsResponse

(synq.incidents.v1.ListIncidentsResponse)

| Field     | Type                           | Description |
| --------- | ------------------------------ | ----------- |
| incidents | [repeated Incident](#incident) | none        |

### MergeIncidentsRequest

(synq.incidents.v1.MergeIncidentsRequest)

| Field                | Type                       | Description                                                            |
| -------------------- | -------------------------- | ---------------------------------------------------------------------- |
| incident\_id         | [ string](#string)         | ID of the primary incident to merge into                               |
| actor                | [ Actor](#actor)           | Actor performing the merge                                             |
| at                   | [ Timestamp](#timestamp)   | Time at which the incidents were merged. Defaults to the current time. |
| other\_incident\_ids | [repeated string](#string) | IDs of other incidents to merge into the primary incident              |

### MergeIncidentsResponse

(synq.incidents.v1.MergeIncidentsResponse)

### PostCommentRequest

(synq.incidents.v1.PostCommentRequest)

| Field                                                                                 | Type                             | Description                                                                           |
| ------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------- |
| incident\_id                                                                          | [ string](#string)               | ID of the incident to post a comment on.                                              |
| actor                                                                                 | [ Actor](#actor)                 | Actor posting the comment.                                                            |
| comment                                                                               | [ string](#string)               | Comment to post.                                                                      |
| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) \_at.at | [optional Timestamp](#timestamp) | Time at which the comment was posted. Defaults to the current time when not provided. |

### PostCommentResponse

(synq.incidents.v1.PostCommentResponse)

| Field       | Type               | Description |
| ----------- | ------------------ | ----------- |
| comment\_id | [ string](#string) | none        |

### RemoveIssuesFromIncidentRequest

(synq.incidents.v1.RemoveIssuesFromIncidentRequest)

| Field        | Type                       | Description                                                          |
| ------------ | -------------------------- | -------------------------------------------------------------------- |
| incident\_id | [ string](#string)         | ID of the incident to remove issues from                             |
| actor        | [ Actor](#actor)           | Actor removing the issues                                            |
| at           | [ Timestamp](#timestamp)   | Time at which the issues were removed. Defaults to the current time. |
| issue\_ids   | [repeated string](#string) | IDs of issues to remove from the incident                            |

### RemoveIssuesFromIncidentResponse

(synq.incidents.v1.RemoveIssuesFromIncidentResponse)

### RenameIncidentRequest

(synq.incidents.v1.RenameIncidentRequest)

| Field        | Type                     | Description                                                           |
| ------------ | ------------------------ | --------------------------------------------------------------------- |
| incident\_id | [ string](#string)       | ID of the incident to rename                                          |
| actor        | [ Actor](#actor)         | Actor renaming the incident                                           |
| at           | [ Timestamp](#timestamp) | Time at which the incident was renamed. Defaults to the current time. |
| name         | [ string](#string)       | New name for the incident                                             |

### RenameIncidentResponse

(synq.incidents.v1.RenameIncidentResponse)

### SplitIncidentRequest

(synq.incidents.v1.SplitIncidentRequest)

| Field                 | Type                       | Description                                                         |
| --------------------- | -------------------------- | ------------------------------------------------------------------- |
| incident\_id          | [ string](#string)         | ID of the incident to split                                         |
| actor                 | [ Actor](#actor)           | Actor performing the split                                          |
| at                    | [ Timestamp](#timestamp)   | Time at which the incident was split. Defaults to the current time. |
| split\_issue\_ids     | [repeated string](#string) | IDs of issues to move to the new incident                           |
| split\_incident\_name | [ string](#string)         | Name for the new incident                                           |

### SplitIncidentResponse

(synq.incidents.v1.SplitIncidentResponse)

| Field           | Type                   | Description |
| --------------- | ---------------------- | ----------- |
| incident        | [ Incident](#incident) | none        |
| split\_incident | [ Incident](#incident) | none        |

### UpdateIncidentStateRequest

(synq.incidents.v1.UpdateIncidentStateRequest)

| Field        | Type                     | Description                                                                 |
| ------------ | ------------------------ | --------------------------------------------------------------------------- |
| incident\_id | [ string](#string)       | none                                                                        |
| actor        | [ Actor](#actor)         | Actor updating the incident state                                           |
| at           | [ Timestamp](#timestamp) | Time at which the incident state was updated. Defaults to the current time. |
| state        | [ State](#state)         | New state for the incident                                                  |

### UpdateIncidentStateResponse

(synq.incidents.v1.UpdateIncidentStateResponse)

| Field    | Type                   | Description |
| -------- | ---------------------- | ----------- |
| incident | [ Incident](#incident) | none        |

### Incident

(synq.incidents.v1.Incident)

| Field       | Type                                         | Description                                            |
| ----------- | -------------------------------------------- | ------------------------------------------------------ |
| id          | [ string](#string)                           | ID of the incident.                                    |
| index       | [ int32](#int32)                             | Index of the incident (for human-readable references). |
| name        | [ string](#string)                           | Name of the incident.                                  |
| issue\_ids  | [repeated string](#string)                   | IDs of issues associated with this incident.           |
| created\_by | [ Actor](#actor)                             | Actor who created the incident.                        |
| owner       | [ User](#user)                               | Owner of the incident.                                 |
| created\_at | [ Timestamp](#timestamp)                     | Time at which the incident was created.                |
| updated\_by | [ Actor](#actor)                             | Actor who last updated the incident.                   |
| updated\_at | [ Timestamp](#timestamp)                     | Time at which the incident was last updated.           |
| state       | [ State](#state)                             | State of the incident.                                 |
| comments    | [repeated IncidentComment](#incidentcomment) | List of comments posted on the incident.               |

### IncidentComment

(synq.incidents.v1.IncidentComment)

| Field       | Type                     | Description |
| ----------- | ------------------------ | ----------- |
| id          | [ string](#string)       | none        |
| message     | [ string](#string)       | none        |
| created\_at | [ Timestamp](#timestamp) | none        |
| actor       | [ Actor](#actor)         | none        |

# Enums

### SkipReason

(synq.deliveries.v1.SkipReason)

SkipReason says why a delivery sent nothing. Every code path that declines to
send names one, so an integration that appears silent can be explained rather
than guessed at.

It is an enum rather than a message we wrote once, so a caller can act on the
reason: a not-subscribed event is fixed in the integration's settings, a
disabled integration is fixed by enabling it, and an unsupported event type is
not fixable at all.

| Name                                                    | Number | Description                                                         |
| ------------------------------------------------------- | ------ | ------------------------------------------------------------------- |
| SKIP\_REASON\_UNSPECIFIED                               | 0      | none                                                                |
| SKIP\_REASON\_EVENT\_TYPE\_NOT\_SUBSCRIBED              | 1      | The event type is not among the ones the integration subscribes to. |
| SKIP\_REASON\_EVENT\_TYPE\_UNSUPPORTED\_BY\_INTEGRATION | 2      | The destination has no representation for this kind of event.       |
| SKIP\_REASON\_NO\_ACTION\_FOR\_LIFECYCLE\_STATE         | 3      | The change of state maps to no action on the destination.           |
| SKIP\_REASON\_INTEGRATION\_NOT\_FOUND                   | 4      | The integration the event was addressed to no longer exists.        |
| SKIP\_REASON\_INTEGRATION\_DISABLED                     | 5      | The integration exists but is disabled.                             |
| SKIP\_REASON\_EMPTY\_EVENT\_SUBJECT                     | 6      | The event carried no issue or incident to describe.                 |

### Outcome

(synq.deliveries.v1.Outcome)

Outcome is what became of a delivery. It is a state the service maintains,
not something to recompute from status codes: a 500 that will be retried and
a 500 that exhausted the retries are the same status and different outcomes.

| Name                 | Number | Description                                                                                                                                                                                     |
| -------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OUTCOME\_UNSPECIFIED | 0      | none                                                                                                                                                                                            |
| OUTCOME\_PENDING     | 1      | Accepted and queued, with at least one attempt still to come.                                                                                                                                   |
| OUTCOME\_DELIVERED   | 2      | Every request the delivery produced was accepted by the destination.                                                                                                                            |
| OUTCOME\_FAILED      | 3      | The destination rejected it, or it was still failing when the retries ran out. No further attempt will be made — use `Redeliver` to try again.                                                  |
| OUTCOME\_SKIPPED     | 4      | The integration was reached and declined to send anything; `skip_reason` says why. Nothing was attempted and nothing will be.                                                                   |
| OUTCOME\_NOT\_ROUTED | 5      | No integration could be resolved for the event at all; `skip_reason` says why. Distinct from `OUTCOME_SKIPPED`, where the integration was found and it was its own configuration that declined. |

### SubjectType

(synq.deliveries.v1.SubjectType)

| Name                          | Number | Description                                                                 |
| ----------------------------- | ------ | --------------------------------------------------------------------------- |
| SUBJECT\_TYPE\_UNSPECIFIED    | 0      | none                                                                        |
| SUBJECT\_TYPE\_ISSUE          | 1      | none                                                                        |
| SUBJECT\_TYPE\_INCIDENT       | 2      | none                                                                        |
| SUBJECT\_TYPE\_DELIVERY\_TEST | 3      | A delivery sent by `SendTestDelivery`, which is about no issue or incident. |

### StatusClass

(synq.deliveries.v1.StatusClass)

StatusClass groups HTTP statuses the way a delivery report reads them.

| Name                         | Number | Description                                                                                                                                                            |
| ---------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| STATUS\_CLASS\_UNSPECIFIED   | 0      | none                                                                                                                                                                   |
| STATUS\_CLASS\_SUCCESS       | 2      | 2xx — accepted. The only class that counts as delivered.                                                                                                               |
| STATUS\_CLASS\_REDIRECT      | 3      | 3xx. Redirects are not followed: a delivery carries credentials scoped to one host, so a destination answering with one is treated as not having accepted the payload. |
| STATUS\_CLASS\_CLIENT\_ERROR | 4      | 4xx — the destination rejected the request.                                                                                                                            |
| STATUS\_CLASS\_SERVER\_ERROR | 5      | 5xx — the destination failed to handle it.                                                                                                                             |
| STATUS\_CLASS\_NO\_RESPONSE  | 6      | No response arrived at all: a connection failure, a TLS error, a timeout.                                                                                              |

### GrantRole

(synq.savedviews.v1.GrantRole)

The access level a grant confers on its grantee.

| Name                     | Number | Description                                                       |
| ------------------------ | ------ | ----------------------------------------------------------------- |
| GRANT\_ROLE\_UNSPECIFIED | 0      | Unspecified is treated as VIEW.                                   |
| GRANT\_ROLE\_VIEW        | 1      | The grantee can see the view.                                     |
| GRANT\_ROLE\_MANAGE      | 2      | The grantee can also edit the view and change its sharing/grants. |

### SavedViewConfig.Layout

(synq.savedviews.v1.SavedViewConfig.Layout)

Layout used to render the view's results.

| Name                | Number | Description |
| ------------------- | ------ | ----------- |
| LAYOUT\_UNSPECIFIED | 0      | none        |
| LAYOUT\_LIST        | 1      | none        |
| LAYOUT\_CARDS       | 2      | none        |
| LAYOUT\_TABLE       | 3      | none        |

### SavedViewContext

(synq.savedviews.v1.SavedViewContext)

The surface a saved view applies to. A view saved on the catalog/assets screen
is not shown on the checks or issues screens, so listing is normally filtered
by the context the caller is rendering.

| Name                              | Number | Description                             |
| --------------------------------- | ------ | --------------------------------------- |
| SAVED\_VIEW\_CONTEXT\_UNSPECIFIED | 0      | Catalog / assets — the default surface. |
| SAVED\_VIEW\_CONTEXT\_CHECKS      | 1      | Checks / monitors screen.               |
| SAVED\_VIEW\_CONTEXT\_ISSUES      | 2      | Issues / incidents screen.              |

### SavedViewRelationship

(synq.savedviews.v1.SavedViewRelationship)

How a returned saved view relates to the calling user. Output-only: computed
per request from the view's owner, visibility and grants against the caller's
identity. Clients group their "views" UI by this value.

| Name                                             | Number | Description                                                                                   |
| ------------------------------------------------ | ------ | --------------------------------------------------------------------------------------------- |
| SAVED\_VIEW\_RELATIONSHIP\_UNSPECIFIED           | 0      | none                                                                                          |
| SAVED\_VIEW\_RELATIONSHIP\_MINE                  | 1      | The caller owns the view.                                                                     |
| SAVED\_VIEW\_RELATIONSHIP\_WORKSPACE             | 2      | Owned by the workspace itself (e.g. created by a workspace-level token), visible to everyone. |
| SAVED\_VIEW\_RELATIONSHIP\_SHARED\_TO\_WORKSPACE | 3      | Another user's view that they shared with the whole workspace.                                |
| SAVED\_VIEW\_RELATIONSHIP\_SHARED\_TO\_ME        | 4      | Another user's view that was explicitly granted to the caller.                                |

### SavedViewVisibility

(synq.savedviews.v1.SavedViewVisibility)

Who can see a saved view. This is the absolute sharing state stored on the
view; how it relates to the calling user is reported separately as a
SavedViewRelationship on each returned view.

| Name                                 | Number | Description                                                                |
| ------------------------------------ | ------ | -------------------------------------------------------------------------- |
| SAVED\_VIEW\_VISIBILITY\_UNSPECIFIED | 0      | Private — only the owner can see it.                                       |
| SAVED\_VIEW\_VISIBILITY\_SHARED      | 1      | Shared with the whole workspace — everyone in the workspace can see it.    |
| SAVED\_VIEW\_VISIBILITY\_GRANTED     | 2      | Granted — the owner plus the users explicitly listed in the view's grants. |

### LifecycleState

(synq.issues.issues.v1.LifecycleState)

Issue LifecycleState represents the current state of the issue in its life-cycle.
The state is exclusively determined as per the priority which is in the order of the fields below.

| Name                                            | Number | Description                                                                                                             |
| ----------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------- |
| LIFECYCLE\_STATE\_UNSPECIFIED                   | 0      | none                                                                                                                    |
| LIFECYCLE\_STATE\_UNTRIAGED                     | 1      | Issue has not been triaged yet. A triaged issue is one that has been acted upon (status update or incident declaration) |
| LIFECYCLE\_STATE\_CLOSED                        | 2      | Issue is closed. This is a terminal state.                                                                              |
| LIFECYCLE\_STATE\_ONGOING\_RESOLVED             | 3      | Open issue that has been marked as resolved by the user.                                                                |
| LIFECYCLE\_STATE\_ONGOING\_DECLARED             | 4      | Open issue that has been declared as an incident.                                                                       |
| LIFECYCLE\_STATE\_ONGOING\_STATUS\_SET          | 5      | Open issue that has status set.                                                                                         |
| LIFECYCLE\_STATE\_AUTOTRIAGE\_QUEUED            | 11     | Open issue that has been queued for autotriage.                                                                         |
| LIFECYCLE\_STATE\_AUTOTRIAGE\_ACTION\_SUGGESTED | 12     | Issue has been autotriaged and an action has been suggested.                                                            |

### Severity

(synq.issues.issues.v1.Severity)

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| SEVERITY\_UNSPECIFIED | 0      | none        |
| SEVERITY\_INFO        | 1      | none        |
| SEVERITY\_WARN        | 2      | none        |
| SEVERITY\_ERROR       | 3      | none        |
| SEVERITY\_FATAL       | 4      | none        |

### State

(synq.issues.issues.v1.State)

Whether the issue is open / close.

| Name               | Number | Description |
| ------------------ | ------ | ----------- |
| STATE\_UNSPECIFIED | 0      | none        |
| STATE\_OPEN        | 1      | none        |
| STATE\_CLOSED      | 2      | none        |

### Status

(synq.issues.issues.v1.Status)

Progress status of the issue.

| Name                       | Number | Description |
| -------------------------- | ------ | ----------- |
| STATUS\_UNSPECIFIED        | 0      | none        |
| STATUS\_INVESTIGATING      | 1      | none        |
| STATUS\_EXPECTED           | 2      | none        |
| STATUS\_FIXED              | 3      | none        |
| STATUS\_NO\_ACTION\_NEEDED | 4      | none        |

### ListIssuesRequest.Field

(synq.issues.v2.ListIssuesRequest.Field)

| Name               | Number | Description                               |
| ------------------ | ------ | ----------------------------------------- |
| FIELD\_UPDATED\_AT | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| FIELD\_STARTED\_AT | 1      | none                                      |

### ListIssuesRequest.Sort.Order

(synq.issues.v2.ListIssuesRequest.Sort.Order)

| Name        | Number | Description                               |
| ----------- | ------ | ----------------------------------------- |
| ORDER\_ASC  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| ORDER\_DESC | 1      | none                                      |

### Actor.Via

(synq.issues.actor.v1.Actor.Via)

| Name             | Number | Description           |
| ---------------- | ------ | --------------------- |
| VIA\_UNSPECIFIED | 0      | Unknown / not set     |
| VIA\_API         | 1      | Public API            |
| VIA\_MCP         | 2      | Official MCP server   |
| VIA\_SLACK       | 3      | Slack bot integration |
| VIA\_PAGERDUTY   | 4      | PagerDuty webhook     |

### ClickhouseClusterMode

(synq.integrations.v1.ClickhouseClusterMode)

| Name                                     | Number | Description                                                                                                                                                                                                                                          |
| ---------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CLICKHOUSE\_CLUSTER\_MODE\_UNSPECIFIED   | 0      | Treated as CLICKHOUSE\_CLUSTER\_MODE\_ALL\_REPLICAS. Reading across a cluster is the behaviour of an integration that has never set this, so single-node reads have to be asked for rather than inherited from an unset field.                       |
| CLICKHOUSE\_CLUSTER\_MODE\_ALL\_REPLICAS | 1      | Read system tables across the named cluster, so metadata covers every replica. Requires `GRANT REMOTE ON *.*`.                                                                                                                                       |
| CLICKHOUSE\_CLUSTER\_MODE\_SINGLE\_NODE  | 2      | Read system tables on the connected node only. The one option that works on a ClickHouse whose remote\_servers defines no cluster, and it needs no REMOTE grant — but on a service that does have replicas it reports the metadata of a single node. |

### HealthStatus

(synq.integrations.v1.HealthStatus)

Health status of an integration, derived from its most recent runs.

| Name                        | Number | Description                                                                      |
| --------------------------- | ------ | -------------------------------------------------------------------------------- |
| HEALTH\_STATUS\_UNSPECIFIED | 0      | Unknown — no runs observed yet.                                                  |
| HEALTH\_STATUS\_OK          | 1      | Last run succeeded.                                                              |
| HEALTH\_STATUS\_WARN        | 2      | Last run completed with warnings.                                                |
| HEALTH\_STATUS\_ERROR       | 3      | Last run failed.                                                                 |
| HEALTH\_STATUS\_CRITICAL    | 4      | Last run failed critically (for example authentication or connectivity failure). |

### QueryOperand

(synq.queries.v1.QueryOperand)

QueryOperand defines how multiple QueryParts within a Query are combined.

| Name                        | Number | Description                                                                                                    |
| --------------------------- | ------ | -------------------------------------------------------------------------------------------------------------- |
| QUERY\_OPERAND\_UNSPECIFIED | 0      | Defaults to AND behaviour.                                                                                     |
| QUERY\_OPERAND\_AND         | 1      | Intersection: returns only entities present in ALL parts.                                                      |
| QUERY\_OPERAND\_OR          | 2      | Union: returns entities present in ANY part.                                                                   |
| QUERY\_OPERAND\_EXCEPT      | 3      | Set difference: requires exactly 2 parts. Returns entities from parts\[0] that are NOT in parts\[1].           |
| QUERY\_OPERAND\_UPSTREAM    | 4      | Lineage traversal: returns all upstream dependencies of the entities matched by the parts (combined with AND). |
| QUERY\_OPERAND\_DOWNSTREAM  | 5      | Lineage traversal: returns all downstream dependents of the entities matched by the parts (combined with AND). |

### DelayModel

(synq.monitors.v1.DelayModel)

How the expected arrival time of new data is modelled, for the delay and volume change
delay metrics. Only table stats monitors produce those metrics, so the choice has no
effect on any other monitor type.

| Name                          | Number | Description                                                                                                                                                                                                                          |
| ----------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| DELAY\_MODEL\_UNSPECIFIED     | 0      | Not set — the workspace default applies.                                                                                                                                                                                             |
| DELAY\_MODEL\_STANDARD        | 1      | Expects data to keep arriving at the cadence it has been arriving at, regardless of which day it is. The default, and the right choice for a pipeline that runs daily.                                                               |
| DELAY\_MODEL\_WEEKLY\_PATTERN | 2      | Learns a separate cadence for each day of the week, so a pipeline that deliberately skips weekends is not reported as delayed on Saturday and Sunday. Needs roughly two weeks of history before it has a pattern to compare against. |

### DeploymentRuleType

(synq.monitors.automated\_monitors.v1.DeploymentRuleType)

DeploymentRuleType identifies which kind of selection a deployment rule uses.
The value corresponds to the populated `config` oneof arm on
MonitorsDeploymentRule / MonitorsDeploymentRuleView. Use it with
ListDeploymentRulesRequest.rule\_types to return only rules of selected kinds.

| Name                                            | Number | Description                                                                                                                              |
| ----------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| DEPLOYMENT\_RULE\_TYPE\_UNSPECIFIED             | 0      | No filter — when used in a request, rules of any type are returned.                                                                      |
| DEPLOYMENT\_RULE\_TYPE\_QUERY                   | 1      | Rule with `query_config`: selects entities by a ResolverQL query and deploys monitors on the matches.                                    |
| DEPLOYMENT\_RULE\_TYPE\_EXCLUSIVE\_QUERY        | 2      | Rule with `exclusive_query_config`: a ResolverQL query whose matches are exclusively owned (monitors outside the match set are removed). |
| DEPLOYMENT\_RULE\_TYPE\_STATIC\_PATH            | 3      | Rule with `static_config`: targets a single fixed entity path.                                                                           |
| DEPLOYMENT\_RULE\_TYPE\_EXCLUSIVE\_STATIC\_PATH | 4      | Rule with `exclusive_static_config`: a single fixed path, exclusively owned.                                                             |
| DEPLOYMENT\_RULE\_TYPE\_PRODUCT                 | 5      | Rule with `product_config`: deploys monitors across a data product's entities per its upstream/self selection strategy.                  |

### MetricId

(synq.monitors.automated\_monitors.v1.MetricId)

| Name                              | Number | Description |
| --------------------------------- | ------ | ----------- |
| METRIC\_ID\_UNSPECIFIED           | 0      | none        |
| METRIC\_ID\_ROW\_COUNT            | 1      | none        |
| METRIC\_ID\_DELAY                 | 2      | none        |
| METRIC\_ID\_VOLUME\_CHANGE\_DELAY | 3      | none        |

### Sensitivity

(synq.monitors.automated\_monitors.v1.Sensitivity)

| Name                     | Number | Description |
| ------------------------ | ------ | ----------- |
| SENSITIVITY\_UNSPECIFIED | 0      | none        |
| SENSITIVITY\_PRECISE     | 1      | none        |
| SENSITIVITY\_BALANCED    | 2      | none        |
| SENSITIVITY\_RELAXED     | 3      | none        |

### Severity

(synq.monitors.automated\_monitors.v1.Severity)

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| SEVERITY\_UNSPECIFIED | 0      | none        |
| SEVERITY\_WARNING     | 1      | none        |
| SEVERITY\_ERROR       | 2      | none        |
| SEVERITY\_INFO        | 3      | none        |

### MonitorDefinition.Source

(synq.monitors.custom\_monitors.v1.MonitorDefinition.Source)

| Name        | Number | Description                               |
| ----------- | ------ | ----------------------------------------- |
| SOURCE\_APP | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_API | 1      | none                                      |

### Sensitivity

(synq.monitors.custom\_monitors.v1.Sensitivity)

| Name                     | Number | Description |
| ------------------------ | ------ | ----------- |
| SENSITIVITY\_UNSPECIFIED | 0      | none        |
| SENSITIVITY\_PRECISE     | 1      | none        |
| SENSITIVITY\_BALANCED    | 2      | none        |
| SENSITIVITY\_RELAXED     | 3      | none        |

### Severity

(synq.monitors.custom\_monitors.v1.Severity)

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| SEVERITY\_UNSPECIFIED | 0      | none        |
| SEVERITY\_WARNING     | 1      | none        |
| SEVERITY\_ERROR       | 2      | none        |
| SEVERITY\_INFO        | 3      | none        |

### ExecutionStatus

(synq.entities.executions.v2.ExecutionStatus)

ExecutionStatus represents the outcome of an execution.

| Name                           | Number | Description |
| ------------------------------ | ------ | ----------- |
| EXECUTION\_STATUS\_UNSPECIFIED | 0      | none        |
| EXECUTION\_STATUS\_OK          | 1      | none        |
| EXECUTION\_STATUS\_WARN        | 2      | none        |
| EXECUTION\_STATUS\_ERROR       | 3      | none        |
| EXECUTION\_STATUS\_CRITICAL    | 4      | none        |

### ExecutionStatus

(synq.entities.executions.v1.ExecutionStatus)

| Name                           | Number | Description |
| ------------------------------ | ------ | ----------- |
| EXECUTION\_STATUS\_UNSPECIFIED | 0      | none        |
| EXECUTION\_STATUS\_OK          | 1      | none        |
| EXECUTION\_STATUS\_WARN        | 2      | none        |
| EXECUTION\_STATUS\_ERROR       | 3      | none        |
| EXECUTION\_STATUS\_CRITICAL    | 4      | none        |

### CllState

(synq.entities.lineage.v1.CllState)

| Name                           | Number | Description                                                                                                   |
| ------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------- |
| CLL\_STATE\_UNSPECIFIED        | 0      | Unspecified state.                                                                                            |
| CLL\_STATE\_PARSE\_FAILED      | 1      | Parsing of the asset SQL failed. No upstream dependencies can be found.                                       |
| CLL\_STATE\_EXTRACTION\_FAILED | 2      | Extraction of the asset SQL failed. Some unsupported SQL features may be used. Some details might be missing. |
| CLL\_STATE\_RESOLUTION\_FAILED | 3      | Not all columns or tables were found upstream, lineage is not complete.                                       |
| CLL\_STATE\_OK                 | 10     | No known issues present.                                                                                      |

### NodePosition

(synq.entities.lineage.v1.NodePosition)

| Name                        | Number | Description                                      |
| --------------------------- | ------ | ------------------------------------------------ |
| NODE\_POSITION\_UNSPECIFIED | 0      | none                                             |
| NODE\_POSITION\_START\_NODE | 1      | Node is one of the requested start point.        |
| NODE\_POSITION\_UPSTREAM    | 2      | Node is upstream of the requested start point.   |
| NODE\_POSITION\_DOWNSTREAM  | 3      | Node is downstream of the requested start point. |

### LineageDirection

(synq.entities.lineage.v1.LineageDirection)

Direction of the lineage to query.

| Name                                     | Number | Description |
| ---------------------------------------- | ------ | ----------- |
| LINEAGE\_DIRECTION\_UNSPECIFIED          | 0      | none        |
| LINEAGE\_DIRECTION\_UPSTREAM             | 1      | none        |
| LINEAGE\_DIRECTION\_DOWNSTREAM           | 2      | none        |
| LINEAGE\_DIRECTION\_UPSTREAM\_DOWNSTREAM | 3      | none        |

### CategorySource

(synq.entities.checks.v2.CategorySource)

Where a check's effective category came from. The three sources are a strict
precedence: an admin override beats a producer-explicit category, which beats
a computed one.

| Name                          | Number | Description                                                                                                                                                                                |
| ----------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CATEGORY\_SOURCE\_UNSPECIFIED | 0      | The check has no category on this dimension — it is uncategorised.                                                                                                                         |
| CATEGORY\_SOURCE\_OVERRIDE    | 1      | Admin override — pinned on the check itself through UpsertCheckCategories. Overrides always win.                                                                                           |
| CATEGORY\_SOURCE\_PRODUCER    | 2      | Producer-explicit — declared by the tool that produced the check, either directly or as a `quality.check_category` / `quality.governance_category` annotation carried on the source asset. |
| CATEGORY\_SOURCE\_RULE        | 3      | Computed — derived from the workspace's categorisation rules.                                                                                                                              |

### RuleScope

(synq.entities.checks.v2.RuleScope)

Whether a categorisation rule belongs to the workspace or is one of the
platform-provided defaults.

| Name                     | Number | Description                                                                                       |
| ------------------------ | ------ | ------------------------------------------------------------------------------------------------- |
| RULE\_SCOPE\_UNSPECIFIED | 0      | none                                                                                              |
| RULE\_SCOPE\_GLOBAL      | 1      | Platform-provided rule, shared by every workspace and read-only for workspace users.              |
| RULE\_SCOPE\_WORKSPACE   | 2      | Rule defined in the caller's workspace. A workspace rule always wins over a matching global rule. |

### RecategorisationStatus.State

(synq.entities.checks.v2.RecategorisationStatus.State)

| Name                | Number | Description                                                                              |
| ------------------- | ------ | ---------------------------------------------------------------------------------------- |
| STATE\_UNSPECIFIED  | 0      | none                                                                                     |
| STATE\_IDLE         | 1      | No sweep is scheduled or running — the workspace's checks are up to date with its rules. |
| STATE\_SCHEDULED    | 2      | A sweep is queued but has not started.                                                   |
| STATE\_IN\_PROGRESS | 3      | A sweep is running.                                                                      |

### CategoryDimension

(synq.entities.checks.v2.CategoryDimension)

The dimension a category classifies a check along. A check carries at most
one category per dimension, and the two resolve independently of each other.

| Name                             | Number | Description                                                                                                                                   |
| -------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| CATEGORY\_DIMENSION\_UNSPECIFIED | 0      | none                                                                                                                                          |
| CATEGORY\_DIMENSION\_TECHNICAL   | 1      | Technical — what kind of check this is, mechanically. Values such as "nullness", "uniqueness", "referential integrity", "freshness".          |
| CATEGORY\_DIMENSION\_GOVERNANCE  | 2      | Governance — what the check is for, in data-quality terms. Values such as "Completeness", "Accuracy", "Validity", "Timeliness", "Uniqueness". |

### CategorisationFilter

(synq.entities.checks.v2.CategorisationFilter)

Narrows a listing to checks that do — or do not — have an effective category
on a dimension.

| Name                                  | Number | Description                                                   |
| ------------------------------------- | ------ | ------------------------------------------------------------- |
| CATEGORISATION\_FILTER\_UNSPECIFIED   | 0      | No filter.                                                    |
| CATEGORISATION\_FILTER\_CATEGORISED   | 1      | Only checks that have an effective category on the dimension. |
| CATEGORISATION\_FILTER\_UNCATEGORISED | 2      | Only checks with no effective category on the dimension.      |

### OverrideFilter

(synq.entities.checks.v2.OverrideFilter)

Narrows a listing to checks that do — or do not — carry a category set
explicitly on them on a dimension.

| Name                              | Number | Description                                                         |
| --------------------------------- | ------ | ------------------------------------------------------------------- |
| OVERRIDE\_FILTER\_UNSPECIFIED     | 0      | No filter.                                                          |
| OVERRIDE\_FILTER\_OVERRIDDEN      | 1      | Only checks whose category on the dimension was set explicitly.     |
| OVERRIDE\_FILTER\_NOT\_OVERRIDDEN | 2      | Only checks whose category on the dimension was not set explicitly. |

### PropagationFilter

(synq.entities.checks.v1.PropagationFilter)

PropagationFilter controls which types of checks are included in the coverage response.

| Name                                  | Number | Description                                                                                                                                         |
| ------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| PROPAGATION\_FILTER\_UNSPECIFIED      | 0      | PROPAGATION\_FILTER\_UNSPECIFIED - Default behavior: returns both direct and propagated checks                                                      |
| PROPAGATION\_FILTER\_DIRECT\_ONLY     | 1      | PROPAGATION\_FILTER\_DIRECT\_ONLY - Returns only direct checks, skips lineage resolution and propagation                                            |
| PROPAGATION\_FILTER\_PROPAGATED\_ONLY | 2      | PROPAGATION\_FILTER\_PROPAGATED\_ONLY - Returns only propagated checks from upstream entities, direct checks arrays will be empty but still present |

### IssueStatus

(synq.entities.status.v1.IssueStatus)

| Name                       | Number | Description |
| -------------------------- | ------ | ----------- |
| ISSUE\_STATUS\_UNSPECIFIED | 0      | none        |
| ISSUE\_STATUS\_OK          | 10     | none        |
| ISSUE\_STATUS\_WARN        | 20     | none        |
| ISSUE\_STATUS\_ERROR       | 30     | none        |
| ISSUE\_STATUS\_CRITICAL    | 40     | none        |

### EntityType

(synq.entities.v1.EntityType)

| Name                                            | Number | Description |
| ----------------------------------------------- | ------ | ----------- |
| ENTITY\_TYPE\_UNSPECIFIED                       | 0      | none        |
| ENTITY\_TYPE\_BQ\_TABLE                         | 103    | none        |
| ENTITY\_TYPE\_BQ\_VIEW                          | 105    | none        |
| ENTITY\_TYPE\_LOOKER\_LOOK                      | 201    | none        |
| ENTITY\_TYPE\_LOOKER\_EXPLORE                   | 203    | none        |
| ENTITY\_TYPE\_LOOKER\_VIEW                      | 207    | none        |
| ENTITY\_TYPE\_LOOKER\_DASHBOARD                 | 208    | none        |
| ENTITY\_TYPE\_DBT\_MODEL                        | 301    | none        |
| ENTITY\_TYPE\_DBT\_TEST                         | 302    | none        |
| ENTITY\_TYPE\_DBT\_SOURCE                       | 303    | none        |
| ENTITY\_TYPE\_DBT\_PROJECT                      | 306    | none        |
| ENTITY\_TYPE\_DBT\_METRIC                       | 307    | none        |
| ENTITY\_TYPE\_DBT\_SNAPSHOT                     | 310    | none        |
| ENTITY\_TYPE\_DBT\_SEED                         | 311    | none        |
| ENTITY\_TYPE\_DBT\_ANALYSIS                     | 312    | none        |
| ENTITY\_TYPE\_DBT\_EXPOSURE                     | 313    | none        |
| ENTITY\_TYPE\_DBT\_GROUP                        | 314    | none        |
| ENTITY\_TYPE\_DBT\_SEMANTIC\_MODEL              | 315    | none        |
| ENTITY\_TYPE\_DBT\_CLOUD\_PROJECT               | 352    | none        |
| ENTITY\_TYPE\_DBT\_CLOUD\_JOB                   | 353    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_TABLE                  | 503    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_VIEW                   | 508    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_STREAM                 | 509    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_DYNAMIC\_TABLE         | 510    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_TASK                   | 511    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_EXTERNAL\_TABLE        | 512    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_MATERIALIZED\_VIEW     | 513    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_PROCEDURE              | 514    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_FUNCTION               | 515    | none        |
| ENTITY\_TYPE\_SNOWFLAKE\_SEMANTIC\_VIEW         | 516    | none        |
| ENTITY\_TYPE\_REDSHIFT\_TABLE                   | 803    | none        |
| ENTITY\_TYPE\_REDSHIFT\_VIEW                    | 805    | none        |
| ENTITY\_TYPE\_REDSHIFT\_PROCEDURE               | 806    | none        |
| ENTITY\_TYPE\_REDSHIFT\_FUNCTION                | 807    | none        |
| ENTITY\_TYPE\_TABLEAU\_EMBEDDED                 | 1101   | none        |
| ENTITY\_TYPE\_TABLEAU\_PUBLISHED                | 1102   | none        |
| ENTITY\_TYPE\_TABLEAU\_CUSTOM\_SQL              | 1103   | none        |
| ENTITY\_TYPE\_TABLEAU\_TABLE                    | 1104   | none        |
| ENTITY\_TYPE\_TABLEAU\_SHEET                    | 1105   | none        |
| ENTITY\_TYPE\_TABLEAU\_DASHBOARD                | 1106   | none        |
| ENTITY\_TYPE\_AIRFLOW\_DAG                      | 1201   | none        |
| ENTITY\_TYPE\_AIRFLOW\_TASK                     | 1202   | none        |
| ENTITY\_TYPE\_CLICKHOUSE\_TABLE                 | 1303   | none        |
| ENTITY\_TYPE\_CLICKHOUSE\_VIEW                  | 1305   | none        |
| ENTITY\_TYPE\_ANOMALY\_MONITOR                  | 1403   | none        |
| ENTITY\_TYPE\_ANOMALY\_MONITOR\_SEGMENT         | 1404   | none        |
| ENTITY\_TYPE\_SQLTEST\_TEST                     | 1421   | none        |
| ENTITY\_TYPE\_RECON\_SUITE                      | 1431   | none        |
| ENTITY\_TYPE\_RECON\_CASE                       | 1432   | none        |
| ENTITY\_TYPE\_POSTGRES\_TABLE                   | 1603   | none        |
| ENTITY\_TYPE\_POSTGRES\_VIEW                    | 1605   | none        |
| ENTITY\_TYPE\_MYSQL\_TABLE                      | 1703   | none        |
| ENTITY\_TYPE\_MYSQL\_VIEW                       | 1705   | none        |
| ENTITY\_TYPE\_DATABRICKS\_WAREHOUSE             | 1801   | none        |
| ENTITY\_TYPE\_DATABRICKS\_TABLE                 | 1804   | none        |
| ENTITY\_TYPE\_DATABRICKS\_VIEW                  | 1805   | none        |
| ENTITY\_TYPE\_DATABRICKS\_JOB                   | 1807   | none        |
| ENTITY\_TYPE\_DATABRICKS\_JOB\_TASK             | 1808   | none        |
| ENTITY\_TYPE\_DATABRICKS\_NOTEBOOK              | 1809   | none        |
| ENTITY\_TYPE\_DATABRICKS\_QUERY                 | 1810   | none        |
| ENTITY\_TYPE\_DATABRICKS\_DASHBOARD             | 1811   | none        |
| ENTITY\_TYPE\_SQLMESH\_PROJECT                  | 1901   | none        |
| ENTITY\_TYPE\_SQLMESH\_SQL\_MODEL               | 1902   | none        |
| ENTITY\_TYPE\_SQLMESH\_PYTHON\_MODEL            | 1903   | none        |
| ENTITY\_TYPE\_SQLMESH\_EXTERNAL                 | 1904   | none        |
| ENTITY\_TYPE\_SQLMESH\_SEED                     | 1905   | none        |
| ENTITY\_TYPE\_SQLMESH\_AUDIT                    | 1906   | none        |
| ENTITY\_TYPE\_SQLMESH\_UNIT\_TEST               | 1907   | none        |
| ENTITY\_TYPE\_SQLMESH\_ENVIRONMENT              | 1908   | none        |
| ENTITY\_TYPE\_SQLMESH\_SNAPSHOT                 | 1909   | none        |
| ENTITY\_TYPE\_DUCKDB\_TABLE                     | 2003   | none        |
| ENTITY\_TYPE\_DUCKDB\_VIEW                      | 2005   | none        |
| ENTITY\_TYPE\_TRINO\_TABLE                      | 2104   | none        |
| ENTITY\_TYPE\_TRINO\_VIEW                       | 2105   | none        |
| ENTITY\_TYPE\_ATLAN\_ASSET                      | 2201   | none        |
| ENTITY\_TYPE\_ATLAN\_INTEGRATION                | 2202   | none        |
| ENTITY\_TYPE\_COALESCE\_PROJECT                 | 2301   | none        |
| ENTITY\_TYPE\_COALESCE\_ENVIRONMENT             | 2302   | none        |
| ENTITY\_TYPE\_COALESCE\_NODE                    | 2303   | none        |
| ENTITY\_TYPE\_COALESCE\_NODE\_TEST              | 2304   | none        |
| ENTITY\_TYPE\_COALESCE\_JOB                     | 2305   | none        |
| ENTITY\_TYPE\_CASTORDOC\_TABLE                  | 2404   | none        |
| ENTITY\_TYPE\_CASTORDOC\_DASHBOARD              | 2405   | none        |
| ENTITY\_TYPE\_CASTORDOC\_VIEW                   | 2406   | none        |
| ENTITY\_TYPE\_CASTORDOC\_TILE                   | 2407   | none        |
| ENTITY\_TYPE\_CASTORDOC\_VIZ\_MODEL             | 2408   | none        |
| ENTITY\_TYPE\_POWERBI\_REPORT                   | 3001   | none        |
| ENTITY\_TYPE\_POWERBI\_TILE                     | 3002   | none        |
| ENTITY\_TYPE\_POWERBI\_DATASET                  | 3003   | none        |
| ENTITY\_TYPE\_POWERBI\_DASHBOARD                | 3004   | none        |
| ENTITY\_TYPE\_POWERBI\_TENANT                   | 3005   | none        |
| ENTITY\_TYPE\_THOUGHTSPOT\_LIVEBOARD            | 3101   | none        |
| ENTITY\_TYPE\_THOUGHTSPOT\_WORKSHEET            | 3102   | none        |
| ENTITY\_TYPE\_SIGMA\_WORKBOOK                   | 3201   | none        |
| ENTITY\_TYPE\_SIGMA\_DATA\_MODEL                | 3202   | none        |
| ENTITY\_TYPE\_SIGMA\_ORGANIZATION               | 3203   | none        |
| ENTITY\_TYPE\_DOMO\_PAGE                        | 3301   | none        |
| ENTITY\_TYPE\_DOMO\_DATASET                     | 3302   | none        |
| ENTITY\_TYPE\_MSSQL\_TABLE                      | 3403   | none        |
| ENTITY\_TYPE\_MSSQL\_VIEW                       | 3405   | none        |
| ENTITY\_TYPE\_ORACLE\_TABLE                     | 3503   | none        |
| ENTITY\_TYPE\_ORACLE\_VIEW                      | 3505   | none        |
| ENTITY\_TYPE\_ATHENA\_TABLE                     | 3604   | none        |
| ENTITY\_TYPE\_ATHENA\_VIEW                      | 3605   | none        |
| ENTITY\_TYPE\_FABRIC\_TABLE                     | 3704   | none        |
| ENTITY\_TYPE\_FABRIC\_VIEW                      | 3705   | none        |
| ENTITY\_TYPE\_CUSTOM\_ENTITY\_GENERIC           | 50000  | none        |
| ENTITY\_TYPE\_CUSTOM\_ENTITY\_CUSTOM\_TYPE\_MIN | 50001  | none        |
| ENTITY\_TYPE\_CUSTOM\_ENTITY\_CUSTOM\_TYPE\_MAX | 59999  | none        |

### TableConstraintType

(synq.entities.v1.TableConstraintType)

TableConstraintType represents the type of a database table constraint or index.

| Name                                       | Number | Description                            |
| ------------------------------------------ | ------ | -------------------------------------- |
| TABLE\_CONSTRAINT\_TYPE\_UNSPECIFIED       | 0      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_PRIMARY\_KEY      | 1      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_FOREIGN\_KEY      | 2      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_UNIQUE            | 3      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_CHECK             | 4      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_INDEX             | 5      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_SORTING\_KEY      | 6      | DWH-specific constraint/ordering types |
| TABLE\_CONSTRAINT\_TYPE\_PARTITION\_BY     | 7      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_CLUSTER\_BY       | 8      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_DISTRIBUTION\_KEY | 9      | none                                   |
| TABLE\_CONSTRAINT\_TYPE\_PROJECTION        | 10     | none                                   |

### CodeType

(synq.entities.v1.CodeType)

CodeType enum represents different types of code that can be processed in the Coalesce Quality platform

| Name                    | Number | Description                                                                        |
| ----------------------- | ------ | ---------------------------------------------------------------------------------- |
| CODE\_TYPE\_UNSPECIFIED | 0      | none                                                                               |
| CODE\_TYPE\_SQL         | 1      | SQL code (e.g., SELECT, INSERT, UPDATE statements)                                 |
| CODE\_TYPE\_PYTHON      | 2      | Python code (e.g., scripts, functions, classes)                                    |
| CODE\_TYPE\_JSON        | 3      | JSON data or configuration files                                                   |
| CODE\_TYPE\_YAML        | 4      | YAML configuration or data files                                                   |
| CODE\_TYPE\_DBT         | 5      | dbt (data build tool) models and configurations                                    |
| CODE\_TYPE\_SQLMESH     | 6      | SQLMesh models and configurations. In most cases this will be similar to SQL code. |
| CODE\_TYPE\_LOOKML      | 7      | LookML (Looker Modeling Language) files                                            |

### SqlDialect

(synq.entities.v1.SqlDialect)

| Name                      | Number | Description |
| ------------------------- | ------ | ----------- |
| SQL\_DIALECT\_UNSPECIFIED | 0      | none        |
| SQL\_DIALECT\_BIGQUERY    | 1      | none        |
| SQL\_DIALECT\_CLICKHOUSE  | 2      | none        |
| SQL\_DIALECT\_DATABRICKS  | 3      | none        |
| SQL\_DIALECT\_MYSQL       | 4      | none        |
| SQL\_DIALECT\_POSTGRESQL  | 5      | none        |
| SQL\_DIALECT\_REDSHIFT    | 6      | none        |
| SQL\_DIALECT\_SNOWFLAKE   | 7      | none        |
| SQL\_DIALECT\_DUCKDB      | 8      | none        |
| SQL\_DIALECT\_TRINO       | 9      | none        |
| SQL\_DIALECT\_MSSQL       | 10     | none        |
| SQL\_DIALECT\_ORACLE      | 11     | none        |
| SQL\_DIALECT\_ATHENA      | 12     | none        |
| SQL\_DIALECT\_FABRIC      | 13     | none        |

### SqlConstruct

(synq.entities.v1.SqlConstruct)

SqlConstruct enumerates the SQL features detected in an entity's query.
Multiple values can be set on a single statement (e.g. a query with both a
CTE and an INNER JOIN carries HAS\_CTE, HAS\_ANY\_JOIN and INNER\_JOIN).

| Name                                     | Number | Description                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SQL\_CONSTRUCT\_UNSPECIFIED              | 0      | none                                                                                                                                                                                                                                                                                                                                                                      |
| SQL\_CONSTRUCT\_HAS\_ANY\_JOIN           | 1      | Aggregate flag: the query contains at least one join of any kind. Always emitted alongside the specific JOIN variant for that join.                                                                                                                                                                                                                                       |
| SQL\_CONSTRUCT\_HAS\_ANY\_SET\_OPERATION | 2      | Aggregate flag: the query contains at least one UNION / INTERSECT / EXCEPT at any nesting level. Always emitted alongside the specific SET variant.                                                                                                                                                                                                                       |
| SQL\_CONSTRUCT\_HAS\_GROUP\_BY           | 3      | The query has a GROUP BY (including GROUP BY ALL).                                                                                                                                                                                                                                                                                                                        |
| SQL\_CONSTRUCT\_HAS\_CTE                 | 4      | The query has a WITH clause (CTEs, recursive or not).                                                                                                                                                                                                                                                                                                                     |
| SQL\_CONSTRUCT\_SET\_UNION               | 10     | UNION / UNION ALL set operation. Emitted alongside HAS\_ANY\_SET\_OPERATION.                                                                                                                                                                                                                                                                                              |
| SQL\_CONSTRUCT\_SET\_INTERSECT           | 11     | INTERSECT set operation. Emitted alongside HAS\_ANY\_SET\_OPERATION.                                                                                                                                                                                                                                                                                                      |
| SQL\_CONSTRUCT\_SET\_EXCEPT              | 12     | EXCEPT / MINUS set operation. Emitted alongside HAS\_ANY\_SET\_OPERATION.                                                                                                                                                                                                                                                                                                 |
| SQL\_CONSTRUCT\_INNER\_JOIN              | 20     | INNER JOIN. Also emitted for an unqualified `JOIN`, which defaults to INNER. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                            |
| SQL\_CONSTRUCT\_CROSS\_APPLY\_JOIN       | 21     | T-SQL `CROSS APPLY`. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                    |
| SQL\_CONSTRUCT\_OUTER\_APPLY\_JOIN       | 22     | T-SQL `OUTER APPLY`. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                    |
| SQL\_CONSTRUCT\_ARRAY\_JOIN              | 23     | ClickHouse `ARRAY JOIN` / `LEFT ARRAY JOIN`. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                            |
| SQL\_CONSTRUCT\_CROSS\_JOIN              | 24     | Explicit CROSS JOIN (cartesian product). Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                |
| SQL\_CONSTRUCT\_LEFT\_SEMI\_JOIN         | 25     | LEFT SEMI JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                         |
| SQL\_CONSTRUCT\_RIGHT\_SEMI\_JOIN        | 26     | RIGHT SEMI JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                        |
| SQL\_CONSTRUCT\_LEFT\_ANTI\_JOIN         | 27     | LEFT ANTI JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                         |
| SQL\_CONSTRUCT\_RIGHT\_ANTI\_JOIN        | 28     | RIGHT ANTI JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                        |
| SQL\_CONSTRUCT\_LEFT\_OUTER\_JOIN        | 29     | LEFT \[OUTER] JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                     |
| SQL\_CONSTRUCT\_RIGHT\_OUTER\_JOIN       | 30     | RIGHT \[OUTER] JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                    |
| SQL\_CONSTRUCT\_FULL\_OUTER\_JOIN        | 31     | FULL \[OUTER] JOIN. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                                     |
| SQL\_CONSTRUCT\_ASOF\_JOIN               | 32     | Snowflake / Databricks `ASOF JOIN`. Emitted alongside HAS\_ANY\_JOIN.                                                                                                                                                                                                                                                                                                     |
| SQL\_CONSTRUCT\_READS\_SEMANTIC\_VIEW    | 33     | Query reads a Snowflake semantic view via the `SEMANTIC_VIEW(...)` table-valued function. One occurrence is recorded per semantic-view reference. The companion CREATE SEMANTIC VIEW DDL is classified separately, not via this construct.                                                                                                                                |
| SQL\_CONSTRUCT\_HAS\_AGGREGATE\_FUNCTION | 34     | The query invokes at least one aggregate function (SUM, COUNT, AVG, ...) used as a grouping aggregate. A windowed aggregate (`SUM(x) OVER (...)`) does NOT set this flag — it sets HAS\_WINDOW\_FUNCTION instead, because it produces one row per input row rather than collapsing groups. Aggregate names are recognised per-dialect, including user-defined aggregates. |
| SQL\_CONSTRUCT\_HAS\_WINDOW\_FUNCTION    | 35     | The query invokes at least one window function — any function call carrying an `OVER (...)` clause, whether the base is an aggregate (`SUM(x) OVER (...)`) or a dedicated window function (`ROW_NUMBER() OVER (...)`). The window-ness is the `OVER` clause, not the base name.                                                                                           |
| SQL\_CONSTRUCT\_UNSUPPORTED\_SQL\_SYNTAX | 100    | Set when the SQL could not be parsed. Lets unparseable entities be filtered without inspecting the underlying parse error.                                                                                                                                                                                                                                                |

### EntityChangeType

(synq.entities.v1.EntityChangeType)

| Name                                          | Number | Description |
| --------------------------------------------- | ------ | ----------- |
| ENTITY\_CHANGE\_TYPE\_UNSPECIFIED             | 0      | none        |
| ENTITY\_CHANGE\_TYPE\_GIT\_COMMIT             | 1      | none        |
| ENTITY\_CHANGE\_TYPE\_SQL\_DEFINITION\_CHANGE | 2      | none        |
| ENTITY\_CHANGE\_TYPE\_SCHEMA\_CHANGE          | 3      | none        |

### ExecutionType

(synq.entities.v1.ExecutionType)

| Name                                                                                  | Number | Description |
| ------------------------------------------------------------------------------------- | ------ | ----------- |
| EXECUTION\_TYPE\_UNSPECIFIED                                                          | 0      | none        |
| EXECUTION\_TYPE\_DELETION                                                             | 1      | none        |
| EXECUTION\_TYPE\_SCHEMA\_CHANGE                                                       | 2      | none        |
| EXECUTION\_TYPE\_SQL\_DEFINITION\_CHANGE                                              | 3      | none        |
| EXECUTION\_TYPE\_BQ\_QUERY\_JOB                                                       | 101    | none        |
| EXECUTION\_TYPE\_BQ\_LOAD\_JOB                                                        | 102    | none        |
| EXECUTION\_TYPE\_BQ\_COPY\_JOB                                                        | 103    | none        |
| EXECUTION\_TYPE\_BQ\_EXTRACT\_JOB                                                     | 104    | none        |
| EXECUTION\_TYPE\_BQ\_QUERY\_LOG                                                       | 105    | none        |
| EXECUTION\_TYPE\_LOOKER\_USAGE\_REPORT                                                | 201    | none        |
| EXECUTION\_TYPE\_DBT\_INVOCATION                                                      | 301    | none        |
| EXECUTION\_TYPE\_DBT\_NODE\_INVOCATION                                                | 302    | none        |
| EXECUTION\_TYPE\_DBT\_NODE\_FRESHNESS                                                 | 303    | none        |
| EXECUTION\_TYPE\_DBT\_CATALOG\_REFRESH                                                | 304    | none        |
| EXECUTION\_TYPE\_DBT\_CLOUD\_JOB\_RUN                                                 | 351    | none        |
| EXECUTION\_TYPE\_DBT\_CLOUD\_JOB\_RUN\_STEP                                           | 352    | none        |
| EXECUTION\_TYPE\_DATABOX\_FRESHNESS                                                   | 401    | none        |
| EXECUTION\_TYPE\_GIT\_COMMIT                                                          | 501    | none        |
| EXECUTION\_TYPE\_CLICKHOUSE\_QUERY\_LOG                                               | 601    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG                                                | 701    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_SELECT                                        | 702    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DROP                                          | 703    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE                                        | 704    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_TABLE                                 | 705    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_INSERT                                        | 706    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_MERGE                                         | 707    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_UPDATE                                        | 708    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_TABLE\_AS\_SELECT                     | 709    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DELETE                                        | 710    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_SHOW                                          | 711    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_VIEW                                  | 712    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_MULTI\_STATEMENT                              | 713    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ROLLBACK                                      | 714    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_TRUNCATE\_TABLE                               | 715    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_COMMIT                                        | 716    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_BEGIN\_TRANSACTION                            | 717    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_UNKNOWN                                       | 718    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_SET                                           | 719    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_RENAME\_TABLE                                 | 720    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_GRANT                                         | 721    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER\_TABLE\_ADD\_COLUMN                     | 722    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_USE                                           | 723    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_COPY                                          | 724    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CALL                                          | 725    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER\_TABLE\_DROP\_COLUMN                    | 726    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER\_TABLE\_MODIFY\_COLUMN                  | 727    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_RENAME\_COLUMN                                | 728    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DROP\_ROLE                                    | 729    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DESCRIBE\_QUERY                               | 730    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_CONSTRAINT                            | 731    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_EXPLAIN                                       | 732    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_ROLE                                  | 733    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER                                         | 734    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DESCRIBE                                      | 735    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_PUT\_FILES                                    | 736    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_GET\_FILES                                    | 737    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER\_SESSION                                | 738    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_LIST\_FILES                                   | 739    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_EXTERNAL\_TABLE\_REFRESH                      | 740    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_REFRESH\_DYNAMIC\_TABLE\_AT\_REFRESH\_VERSION | 741    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_REMOVE\_FILES                                 | 742    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_EXECUTE\_TASK                                 | 743    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_ALTER\_TABLE                                  | 744    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_EXECUTE\_STREAMLIT                            | 745    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_CREATE\_TASK                                  | 746    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_UNLOAD                                        | 747    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_QUERY\_LOG\_DROP\_TASK                                    | 748    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_TASK\_EXECUTION                                           | 790    | none        |
| EXECUTION\_TYPE\_SNOWFLAKE\_TASK\_GROUP\_EXECUTION                                    | 791    | none        |
| EXECUTION\_TYPE\_REDSHIFT\_QUERY\_LOG                                                 | 801    | none        |
| EXECUTION\_TYPE\_DATAHUB\_DATA\_PROCESS\_INSTANCE                                     | 901    | none        |
| EXECUTION\_TYPE\_DATAHUB\_USAGE\_REPORT                                               | 902    | none        |
| EXECUTION\_TYPE\_SYNQ\_CUSTOM\_ENTITY\_EXECUTION                                      | 1001   | none        |
| EXECUTION\_TYPE\_SYNQ\_CUSTOM\_ENTITY\_LOG                                            | 1002   | none        |
| EXECUTION\_TYPE\_SYNQ\_CUSTOM\_ENTITY\_MEASUREMENT                                    | 1003   | none        |
| EXECUTION\_TYPE\_TABLEAU\_USAGE\_REPORT                                               | 1101   | none        |
| EXECUTION\_TYPE\_TABLEAU\_EXTRACT                                                     | 1102   | none        |
| EXECUTION\_TYPE\_AIRFLOW\_DAG                                                         | 1201   | none        |
| EXECUTION\_TYPE\_AIRFLOW\_TASK                                                        | 1202   | none        |
| EXECUTION\_TYPE\_ANOMALY\_INTEGRATION\_RUN                                            | 1402   | none        |
| EXECUTION\_TYPE\_ANOMALY\_MONITOR\_RUN                                                | 1403   | none        |
| EXECUTION\_TYPE\_ANOMALY\_MONITOR\_CORRECTION                                         | 1404   | none        |
| EXECUTION\_TYPE\_ANOMALY\_MONITOR\_SEGMENT\_RUN                                       | 1405   | none        |
| EXECUTION\_TYPE\_ANOMALY\_MONITOR\_SEGMENT\_CORRECTION                                | 1406   | none        |
| EXECUTION\_TYPE\_ANOMALY\_MONITOR\_FETCH\_RUN                                         | 1407   | none        |
| EXECUTION\_TYPE\_SQL\_TEST\_RUN                                                       | 1421   | none        |
| EXECUTION\_TYPE\_DATABRICKS\_QUERY\_LOG                                               | 1501   | none        |
| EXECUTION\_TYPE\_DATABRICKS\_JOB\_RUN                                                 | 1502   | none        |
| EXECUTION\_TYPE\_DATABRICKS\_JOB\_TASK\_RUN                                           | 1503   | none        |
| EXECUTION\_TYPE\_SQLMESH\_PROJECT\_EXECUTION                                          | 1601   | none        |
| EXECUTION\_TYPE\_SQLMESH\_MODEL\_EVALUATION                                           | 1602   | none        |
| EXECUTION\_TYPE\_SQLMESH\_AUDIT\_CHECK                                                | 1603   | none        |
| EXECUTION\_TYPE\_TRINO\_QUERY\_LOG                                                    | 2101   | none        |
| EXECUTION\_TYPE\_COALESCE\_ENVIRONMENT\_RUN                                           | 2301   | none        |
| EXECUTION\_TYPE\_COALESCE\_DEPLOY\_RUN                                                | 2302   | none        |
| EXECUTION\_TYPE\_COALESCE\_REFRESH\_RUN                                               | 2303   | none        |
| EXECUTION\_TYPE\_COALESCE\_NODE\_RUN                                                  | 2304   | none        |
| EXECUTION\_TYPE\_COALESCE\_SQL\_TEST\_RUN                                             | 2305   | none        |
| EXECUTION\_TYPE\_MSSQL\_QUERY\_LOG                                                    | 2401   | none        |
| EXECUTION\_TYPE\_ORACLE\_QUERY\_LOG                                                   | 2501   | none        |
| EXECUTION\_TYPE\_RECON\_SUITE\_RUN                                                    | 2601   | none        |
| EXECUTION\_TYPE\_RECON\_CASE\_RUN                                                     | 2602   | none        |
| EXECUTION\_TYPE\_RECON\_DEPLOYMENT                                                    | 2603   | none        |
| EXECUTION\_TYPE\_FABRIC\_QUERY\_LOG                                                   | 2701   | none        |

### ExecutionStatus

(synq.entities.custom.v1.ExecutionStatus)

| Name                           | Number | Description |
| ------------------------------ | ------ | ----------- |
| EXECUTION\_STATUS\_UNSPECIFIED | 0      | none        |
| EXECUTION\_STATUS\_OK          | 1      | none        |
| EXECUTION\_STATUS\_WARN        | 2      | none        |
| EXECUTION\_STATUS\_ERROR       | 3      | none        |
| EXECUTION\_STATUS\_CRITICAL    | 4      | none        |

### FolderRole

(synq.entities.folders.v1.FolderRole)

FolderRole describes how a folder placement participates in browsing. It
mirrors the placement roles carried by the catalog.

| Name                      | Number | Description                                                                                                                             |
| ------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| FOLDER\_ROLE\_UNSPECIFIED | 0      | Unknown / not reported. Treat as VISIBLE.                                                                                               |
| FOLDER\_ROLE\_PRIMARY     | 1      | Browsable and the default display location (breadcrumb) for its members.                                                                |
| FOLDER\_ROLE\_VISIBLE     | 2      | Browsable, but not the default display location.                                                                                        |
| FOLDER\_ROLE\_HIDDEN      | 3      | Match-only: folder filters still match entities through this placement, but it is not shown when browsing. Kept for legacy hierarchies. |

### DatacheckStatus

(synq.datachecks.v1.DatacheckStatus)

Result of a datacheck execution

| Name                           | Number | Description                                |
| ------------------------------ | ------ | ------------------------------------------ |
| DATACHECK\_STATUS\_UNSPECIFIED | 0      | none                                       |
| DATACHECK\_STATUS\_PASSED      | 1      | Check passed successfully.                 |
| DATACHECK\_STATUS\_FAILED      | 2      | Check failed due to violations.            |
| DATACHECK\_STATUS\_ERROR       | 3      | Check failed due to error in check itself. |
| DATACHECK\_STATUS\_SKIPPED     | 4      | Check was skipped (e.g. not applicable)    |

### SqlTestDeploymentRuleType

(synq.datachecks.sqltests.v1.SqlTestDeploymentRuleType)

SqlTestDeploymentRuleType identifies which kind of selection a deployment rule
uses. The value corresponds to the populated `config` oneof arm on
SqlTestDeploymentRule / SqlTestDeploymentRuleView. Use it with
ListSqlTestDeploymentRulesRequest.rule\_types to return only rules of selected
kinds.

| Name                                                 | Number | Description                                                                                   |
| ---------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
| SQL\_TEST\_DEPLOYMENT\_RULE\_TYPE\_UNSPECIFIED       | 0      | No filter — when used in a request, rules of any type are returned.                           |
| SQL\_TEST\_DEPLOYMENT\_RULE\_TYPE\_QUERY             | 1      | Rule with `query_config`: selects tables/views by query and deploys tests on the matches.     |
| SQL\_TEST\_DEPLOYMENT\_RULE\_TYPE\_EXCLUSIVE\_QUERY  | 2      | Rule with `exclusive_query_config`: a query whose matches are exclusively owned by this rule. |
| SQL\_TEST\_DEPLOYMENT\_RULE\_TYPE\_STATIC            | 3      | Rule with `static_config`: targets a single fixed table or view.                              |
| SQL\_TEST\_DEPLOYMENT\_RULE\_TYPE\_EXCLUSIVE\_STATIC | 4      | Rule with `exclusive_static_config`: a single fixed table or view, exclusively owned.         |

### Severity

(synq.datachecks.sqltests.v1.Severity)

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| SEVERITY\_UNSPECIFIED | 0      | none        |
| SEVERITY\_WARNING     | 1      | none        |
| SEVERITY\_ERROR       | 2      | none        |
| SEVERITY\_INFO        | 3      | none        |

### Status

(synq.extensions.atlan.workflows.v1.Status)

| Name                | Number | Description |
| ------------------- | ------ | ----------- |
| STATUS\_UNSPECIFIED | 0      | none        |
| STATUS\_OK          | 1      | none        |
| STATUS\_FAILED      | 2      | none        |

### SnapDirection

(synq.schedule.v1.SnapDirection)

SnapDirection constrains which way an occurrence may move to reach the grid.

| Name                         | Number | Description                                                            |
| ---------------------------- | ------ | ---------------------------------------------------------------------- |
| SNAP\_DIRECTION\_UNSPECIFIED | 0      | Move to whichever grid point is closest. Same as NEAREST.              |
| SNAP\_DIRECTION\_NEAREST     | 1      | Move to whichever grid point is closest.                               |
| SNAP\_DIRECTION\_FORWARD     | 2      | Only delay an occurrence to a later grid point, never move it earlier. |
| SNAP\_DIRECTION\_BACKWARD    | 3      | Only move an occurrence earlier to a prior grid point, never delay it. |

### Event.EventType

(synq.webhooks.v1.Event.EventType)

| Name                                | Number | Description |
| ----------------------------------- | ------ | ----------- |
| EVENT\_TYPE\_UNSPECIFIED            | 0      | none        |
| EVENT\_TYPE\_PING                   | 10     | none        |
| EVENT\_TYPE\_ISSUE\_CREATED         | 11     | none        |
| EVENT\_TYPE\_ISSUE\_UPDATED         | 12     | none        |
| EVENT\_TYPE\_ISSUE\_STATUS\_UPDATED | 13     | none        |
| EVENT\_TYPE\_ISSUE\_CLOSED          | 14     | none        |
| EVENT\_TYPE\_INCIDENT\_OPEN         | 20     | none        |
| EVENT\_TYPE\_INCIDENT\_CLOSED       | 21     | none        |
| EVENT\_TYPE\_INCIDENT\_CANCELLED    | 22     | none        |

### IssueSummary.IssueStatus

(synq.webhooks.v1.IssueSummary.IssueStatus)

| Name                              | Number | Description |
| --------------------------------- | ------ | ----------- |
| ISSUE\_STATUS\_UNSPECIFIED        | 0      | none        |
| ISSUE\_STATUS\_INVESTIGATING      | 1      | none        |
| ISSUE\_STATUS\_EXPECTED           | 2      | none        |
| ISSUE\_STATUS\_FIXED              | 3      | none        |
| ISSUE\_STATUS\_NO\_ACTION\_NEEDED | 4      | none        |

### Scope

(synq.v1.Scope)

| Name                                     | Number | Description |
| ---------------------------------------- | ------ | ----------- |
| SCOPE\_UNSPECIFIED                       | 0      | none        |
| SCOPE\_ISSUES\_EDIT                      | 10     | none        |
| SCOPE\_ISSUES\_READ                      | 11     | none        |
| SCOPE\_INCIDENTS\_EDIT                   | 13     | none        |
| SCOPE\_INCIDENTS\_READ                   | 14     | none        |
| SCOPE\_ENTITY\_EDIT                      | 30     | none        |
| SCOPE\_ENTITY\_READ                      | 31     | none        |
| SCOPE\_ENTITY\_TYPE\_EDIT                | 32     | none        |
| SCOPE\_ENTITY\_TYPE\_READ                | 33     | none        |
| SCOPE\_LINEAGE\_EDIT                     | 34     | none        |
| SCOPE\_LINEAGE\_READ                     | 35     | none        |
| SCOPE\_CODE\_READ                        | 37     | none        |
| SCOPE\_STATUS\_READ                      | 40     | none        |
| SCOPE\_INGEST\_DBT                       | 41     | none        |
| SCOPE\_INGEST\_SQLMESH                   | 42     | none        |
| SCOPE\_INGEST\_DWH                       | 43     | none        |
| SCOPE\_INGEST\_SRE                       | 44     | none        |
| SCOPE\_INGEST\_AIRFLOW                   | 45     | none        |
| SCOPE\_INGEST\_CLOUDWATCH                | 46     | none        |
| SCOPE\_INGEST\_OPENLINEAGE               | 47     | none        |
| SCOPE\_DATACHECKS\_SQLTESTS\_EDIT        | 50     | none        |
| SCOPE\_DATACHECKS\_SQLTESTS\_READ        | 51     | none        |
| SCOPE\_DATACHECKS\_SQLTESTS\_AUDIT\_READ | 52     | none        |
| SCOPE\_DATACHECKS\_TESTSUGGESTIONS\_EDIT | 53     | none        |
| SCOPE\_DATACHECKS\_TESTSUGGESTIONS\_READ | 54     | none        |
| SCOPE\_DATACHECKS\_TRIGGER               | 55     | none        |
| SCOPE\_EXECUTION\_EDIT                   | 60     | none        |
| SCOPE\_EXECUTION\_LOG\_EDIT              | 61     | none        |
| SCOPE\_EXECUTION\_READ                   | 62     | none        |
| SCOPE\_HOOK                              | 70     | none        |
| SCOPE\_SRE\_AGENT                        | 71     | none        |
| SCOPE\_SRE\_LLM                          | 72     | none        |
| SCOPE\_INTEGRATION\_EDIT                 | 80     | none        |
| SCOPE\_INTEGRATION\_READ                 | 81     | none        |
| SCOPE\_USER\_EDIT                        | 90     | none        |
| SCOPE\_USER\_READ                        | 91     | none        |
| SCOPE\_USER\_ASSIGN                      | 92     | none        |
| SCOPE\_MONITORS\_READ                    | 111    | none        |
| SCOPE\_MONITORS\_AUTOMATIC\_EDIT         | 112    | none        |
| SCOPE\_MONITORS\_CUSTOM\_EDIT            | 113    | none        |
| SCOPE\_MONITORS\_CUSTOM\_SQL\_EDIT       | 116    | none        |
| SCOPE\_ALERTS\_EDIT                      | 130    | none        |
| SCOPE\_ALERTS\_READ                      | 131    | none        |
| SCOPE\_OWNERS\_EDIT                      | 140    | none        |
| SCOPE\_OWNERS\_READ                      | 141    | none        |
| SCOPE\_OWNERSHIP\_EDIT                   | 144    | none        |
| SCOPE\_OWNERSHIP\_READ                   | 145    | none        |
| SCOPE\_DATAPRODUCT\_EDIT                 | 150    | none        |
| SCOPE\_DATAPRODUCT\_READ                 | 151    | none        |
| SCOPE\_DOMAIN\_EDIT                      | 160    | none        |
| SCOPE\_DOMAIN\_READ                      | 161    | none        |
| SCOPE\_EXTENSIONS\_MANAGE                | 180    | none        |
| SCOPE\_USAGE\_GET                        | 192    | none        |
| SCOPE\_MCP\_READ                         | 200    | none        |
| SCOPE\_MCP\_WRITE                        | 201    | none        |
| SCOPE\_RECON\_READ                       | 210    | none        |
| SCOPE\_RECON\_EDIT                       | 211    | none        |
| SCOPE\_INGEST\_RECON                     | 212    | none        |
| SCOPE\_RECON\_PROMOTE                    | 213    | none        |
| SCOPE\_POLICIES\_EDIT                    | 220    | none        |
| SCOPE\_POLICIES\_READ                    | 221    | none        |
| SCOPE\_SAVED\_VIEW\_READ                 | 230    | none        |
| SCOPE\_SAVED\_VIEW\_EDIT                 | 231    | none        |
| SCOPE\_SAVED\_VIEW\_ADMIN                | 232    | none        |
| SCOPE\_FOLDERS\_READ                     | 240    | none        |
| SCOPE\_FOLDERS\_EDIT                     | 241    | none        |
| SCOPE\_DELIVERY\_READ                    | 242    | none        |
| SCOPE\_DELIVERY\_EDIT                    | 243    | none        |

### Severity

(synq.v1.Severity)

| Name                  | Number | Description                  |
| --------------------- | ------ | ---------------------------- |
| SEVERITY\_UNSPECIFIED | 0      | Invalid/unspecified severity |
| SEVERITY\_WARN        | 1      | Warning level failures       |
| SEVERITY\_ERROR       | 2      | Error level failures         |
| SEVERITY\_FATAL       | 3      | Fatal/critical failures      |

### Source

(synq.v1.Source)

| Name        | Number | Description                               |
| ----------- | ------ | ----------------------------------------- |
| SOURCE\_APP | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_API | 1      | none                                      |

### Dataproduct.Priority

(synq.dataproducts.v2.Dataproduct.Priority)

Priority. P1 is the highest.

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| PRIORITY\_UNSPECIFIED | 0      | none        |
| PRIORITY\_P3          | 3      | none        |
| PRIORITY\_P2          | 4      | none        |
| PRIORITY\_P1          | 5      | none        |

### Dataproduct.Source

(synq.dataproducts.v2.Dataproduct.Source)

Where this data product is managed. Products from an external source
(e.g. Atlan) are read-only in the app.

| Name          | Number | Description                               |
| ------------- | ------ | ----------------------------------------- |
| SOURCE\_SYNQ  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_ATLAN | 1      | none                                      |

### Dataproduct.Priority

(synq.dataproducts.v1.Dataproduct.Priority)

| Name                  | Number | Description |
| --------------------- | ------ | ----------- |
| PRIORITY\_UNSPECIFIED | 0      | none        |
| PRIORITY\_P3          | 3      | none        |
| PRIORITY\_P2          | 4      | none        |
| PRIORITY\_P1          | 5      | none        |

### Dataproduct.Source

(synq.dataproducts.v1.Dataproduct.Source)

| Name          | Number | Description                               |
| ------------- | ------ | ----------------------------------------- |
| SOURCE\_SYNQ  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_ATLAN | 1      | none                                      |

### PromptField

(synq.agent.sre.v1.PromptField)

PromptField identifies which SRE agent system-prompt a suggestion targets.
Mirrors the four `*_system_prompt` fields returned by `GetConfig`.

| Name                           | Number | Description |
| ------------------------------ | ------ | ----------- |
| PROMPT\_FIELD\_UNSPECIFIED     | 0      | none        |
| PROMPT\_FIELD\_TRIAGE          | 1      | none        |
| PROMPT\_FIELD\_TESTER          | 2      | none        |
| PROMPT\_FIELD\_WORKSPACE       | 3      | none        |
| PROMPT\_FIELD\_ISSUE\_GROUPING | 4      | none        |

### PromptSuggestionStatus

(synq.agent.sre.v1.PromptSuggestionStatus)

PromptSuggestionStatus is the review lifecycle of a single prompt suggestion.
`SUPERSEDED` indicates a newer pending suggestion for the same field replaced
this one before it was reviewed.

| Name                                    | Number | Description |
| --------------------------------------- | ------ | ----------- |
| PROMPT\_SUGGESTION\_STATUS\_UNSPECIFIED | 0      | none        |
| PROMPT\_SUGGESTION\_STATUS\_PENDING     | 1      | none        |
| PROMPT\_SUGGESTION\_STATUS\_ACCEPTED    | 2      | none        |
| PROMPT\_SUGGESTION\_STATUS\_DISMISSED   | 3      | none        |
| PROMPT\_SUGGESTION\_STATUS\_SUPERSEDED  | 4      | none        |

### IssueTriageStatus

(synq.agent.sre.v1.IssueTriageStatus)

IssueTriageStatus represents the current stage of an issue in the SRE agent's investigation workflow.
The status progresses as the agent collects evidence and reaches conclusions about the issue.

| Name                                | Number | Description                                                                                    |
| ----------------------------------- | ------ | ---------------------------------------------------------------------------------------------- |
| ISSUE\_TRIAGE\_STATUS\_UNSPECIFIED  | 0      | Default value, should not be used                                                              |
| ISSUE\_TRIAGE\_STATUS\_SCHEDULED    | 1      | Issue has been queued for investigation but the SRE agent has not started processing it yet    |
| ISSUE\_TRIAGE\_STATUS\_IN\_PROGRESS | 2      | SRE agent is actively investigating the issue, collecting evidence and analyzing the situation |
| ISSUE\_TRIAGE\_STATUS\_CANCELLED    | 7      | Issue has been scheduled but later cancelled                                                   |
| ISSUE\_TRIAGE\_STATUS\_FAILED       | 8      | Issue wasn't triaged as such process failed. Scheduling again is possible.                     |
| ISSUE\_TRIAGE\_STATUS\_TRIAGED      | 3      | SRE agent has generated conclusion for the issue                                               |
| ISSUE\_TRIAGE\_STATUS\_ACCEPTED     | 4      | User accepted the issue conclusion SRE agent has determined                                    |
| ISSUE\_TRIAGE\_STATUS\_IGNORED      | 5      | User Discarded the issue conclusion SRE agent has determined                                   |
| ISSUE\_TRIAGE\_STATUS\_CLOSED       | 6      | Issue was closed by the system                                                                 |

### TriageFailureCategory

(synq.agent.sre.v1.TriageFailureCategory)

TriageFailureCategory classifies why a triage attempt failed.
The frontend can use this to render appropriate user-facing messages and actions.

| Name                                              | Number | Description                                                                                        |
| ------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------- |
| TRIAGE\_FAILURE\_CATEGORY\_UNSPECIFIED            | 0      | Default value, should not be used                                                                  |
| TRIAGE\_FAILURE\_CATEGORY\_BUDGET\_EXCEEDED       | 1      | Daily AI budget limit reached, triage will resume automatically the next day                       |
| TRIAGE\_FAILURE\_CATEGORY\_CONTEXT\_TOO\_LARGE    | 2      | Issue context is too large for the AI agent to process                                             |
| TRIAGE\_FAILURE\_CATEGORY\_MAX\_ITERATIONS        | 3      | AI agent couldn't reach a conclusion within the allowed number of steps                            |
| TRIAGE\_FAILURE\_CATEGORY\_INVALID\_AGENT\_OUTPUT | 4      | AI agent produced an invalid or unparseable response                                               |
| TRIAGE\_FAILURE\_CATEGORY\_CONNECTIVITY           | 5      | Temporary connectivity issue to upstream services                                                  |
| TRIAGE\_FAILURE\_CATEGORY\_RESOURCE\_NOT\_FOUND   | 6      | Referenced resource (e.g. monitor) no longer exists                                                |
| TRIAGE\_FAILURE\_CATEGORY\_INTERNAL               | 7      | An unexpected internal error occurred                                                              |
| TRIAGE\_FAILURE\_CATEGORY\_NOT\_CONFIGURED        | 8      | Scout is not enabled for this workspace, so no triage can run until an administrator configures it |

### MessageRole

(synq.agent.sre.v1.MessageRole)

Role of the message in the conversation.

| Name                       | Number | Description                     |
| -------------------------- | ------ | ------------------------------- |
| MESSAGE\_ROLE\_UNSPECIFIED | 0      | none                            |
| MESSAGE\_ROLE\_USER        | 1      | Message from the user/human.    |
| MESSAGE\_ROLE\_ASSISTANT   | 2      | Message from the assistant/LLM. |

### ModelType

(synq.agent.sre.v1.ModelType)

Type of model to use for the evaluation.

| Name                     | Number | Description                                                                                            |
| ------------------------ | ------ | ------------------------------------------------------------------------------------------------------ |
| MODEL\_TYPE\_UNSPECIFIED | 0      | none                                                                                                   |
| MODEL\_TYPE\_SUMMARY     | 1      | Summary model - faster and cheaper, suitable for simple tasks. This is the default when not specified. |
| MODEL\_TYPE\_THINKING    | 2      | Thinking model - more capable, suitable for complex reasoning tasks.                                   |

### TestSuggestionStatus

(synq.agent.sre.v1.TestSuggestionStatus)

| Name                                  | Number | Description |
| ------------------------------------- | ------ | ----------- |
| TEST\_SUGGESTION\_STATUS\_UNSPECIFIED | 0      | none        |
| TEST\_SUGGESTION\_STATUS\_SCHEDULED   | 1      | none        |
| TEST\_SUGGESTION\_STATUS\_RUNNING     | 2      | none        |
| TEST\_SUGGESTION\_STATUS\_COMPLETED   | 3      | none        |
| TEST\_SUGGESTION\_STATUS\_FAILED      | 4      | none        |
| TEST\_SUGGESTION\_STATUS\_CANCELLED   | 5      | none        |

### AggregateDivergenceType

(synq.agent.recon.v1.AggregateDivergenceType)

AggregateDivergenceType categorizes how an aggregate group diverges.

| Name                                             | Number | Description                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| AGGREGATE\_DIVERGENCE\_TYPE\_UNSPECIFIED         | 0      | none                                                                                                                                                                                                                                                                                                                                                           |
| AGGREGATE\_DIVERGENCE\_TYPE\_SUBGROUP\_MISMATCH  | 1      | The group is present on both sides and its measures diverge, at a level that still has a grouping level beneath it. Where drill\_down is populated the divergence is accounted for by the descendants, so this node is a path to the mismatches rather than a mismatch in its own right. Only when drill\_down is absent does it stand as the mismatch itself. |
| AGGREGATE\_DIVERGENCE\_TYPE\_MISSING\_IN\_SOURCE | 2      | Group exists in target but not in source.                                                                                                                                                                                                                                                                                                                      |
| AGGREGATE\_DIVERGENCE\_TYPE\_MISSING\_IN\_TARGET | 3      | Group exists in source but not in target.                                                                                                                                                                                                                                                                                                                      |
| AGGREGATE\_DIVERGENCE\_TYPE\_MEASURE\_MISMATCH   | 4      | The group is present on both sides and its measures diverge at the deepest grouping level, so it is a mismatch in its own right and carries the investigation queries. Not a synonym for MISMATCH: the two differ by whether anything is grouped below, and only this one is counted directly in the divergent-group totals.                                   |

### AuditOutcome

(synq.agent.recon.v1.AuditOutcome)

AuditOutcome describes the overall outcome of a reconciliation run.
Values are ordered by severity: passed \< within\_threshold \< mismatched \< failed.

| Name                                          | Number | Description                                                                                                                                                        |
| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| AUDIT\_OUTCOME\_UNSPECIFIED                   | 0      | none                                                                                                                                                               |
| AUDIT\_OUTCOME\_PASSED                        | 1      | All reconciliations completed and matched exactly.                                                                                                                 |
| AUDIT\_OUTCOME\_MISMATCHED\_WITHIN\_THRESHOLD | 2      | Differences were found but all were within configured thresholds. No reconciliation had hard mismatches or infrastructure errors. This is a warning-level outcome. |
| AUDIT\_OUTCOME\_MISMATCHED                    | 3      | At least one reconciliation found data differences exceeding configured thresholds (or no thresholds were configured).                                             |
| AUDIT\_OUTCOME\_FAILED                        | 4      | At least one reconciliation encountered an infrastructure error (connection failure, query error, setup failure, etc.).                                            |

### DrillStopReason

(synq.agent.recon.v1.DrillStopReason)

DrillStopReason explains why bisection stopped at a particular node.

| Name                                     | Number | Description                                                                                                                                                                                                                |
| ---------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DRILL\_STOP\_REASON\_UNSPECIFIED         | 0      | none                                                                                                                                                                                                                       |
| DRILL\_STOP\_REASON\_THRESHOLD\_REACHED  | 1      | The segment narrowed to at most the configured number of rows, so it is reported as-is. Drilling further would still narrow it, which is why this and MAX\_DEPTH\_REACHED are the two reasons a later run can resume from. |
| DRILL\_STOP\_REASON\_MAX\_DEPTH\_REACHED | 2      | The configured depth limit was hit before the segment got small enough. Resumable: raising the limit and drilling again narrows it further.                                                                                |
| DRILL\_STOP\_REASON\_EMPTY\_SEGMENT      | 3      | Neither side had any rows in the segment, so there was nothing to compare.                                                                                                                                                 |
| DRILL\_STOP\_REASON\_CANNOT\_SPLIT       | 4      | The key range cannot be subdivided any further — every remaining row shares one key value. Unlike the two resumable reasons above, drilling again will not narrow this segment.                                            |
| DRILL\_STOP\_REASON\_MATCHED             | 5      | Source and target agreed, so the segment needed no further drilling.                                                                                                                                                       |
| DRILL\_STOP\_REASON\_ERROR               | 6      | A query failed while comparing the segment; its result is unknown rather than matched or mismatched. The failure is on the run's query records.                                                                            |

### MeasureVerdictReason

(synq.agent.recon.v1.MeasureVerdictReason)

MeasureVerdictReason explains the threshold evaluation outcome.
MeasureVerdictReason explains why a measure was or was not treated as
diverging. Thresholds are tried in order — absolute first, then percentage —
and the first one the difference falls inside decides the verdict.

| Name                                                    | Number | Description                                                                                                                                                                                                                                    |
| ------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| MEASURE\_VERDICT\_REASON\_UNSPECIFIED                   | 0      | none                                                                                                                                                                                                                                           |
| MEASURE\_VERDICT\_REASON\_EXACT\_MATCH                  | 1      | Source and target agreed exactly, so no threshold was consulted.                                                                                                                                                                               |
| MEASURE\_VERDICT\_REASON\_WITHIN\_ABSOLUTE\_THRESHOLD   | 2      | The values differ, but by no more than the configured absolute threshold. Not treated as divergent.                                                                                                                                            |
| MEASURE\_VERDICT\_REASON\_WITHIN\_PERCENTAGE\_THRESHOLD | 3      | The values differ by more than the absolute threshold allowed (or none was set), but fall inside the configured percentage threshold. Not treated as divergent. The percentage is computed against whichever side the PercentageBasis selects. |
| MEASURE\_VERDICT\_REASON\_EXCEEDED\_ALL\_THRESHOLDS     | 4      | The values differ by more than every configured threshold. Divergent.                                                                                                                                                                          |
| MEASURE\_VERDICT\_REASON\_NO\_THRESHOLDS\_CONFIGURED    | 5      | The values differ and no threshold was configured to tolerate it, so any difference counts. Divergent — distinct from EXCEEDED\_ALL\_THRESHOLDS, where thresholds existed and were exceeded.                                                   |

### QueryRole

(synq.agent.recon.v1.QueryRole)

QueryRole identifies whether a query targets the source or target database.

| Name                     | Number | Description |
| ------------------------ | ------ | ----------- |
| QUERY\_ROLE\_UNSPECIFIED | 0      | none        |
| QUERY\_ROLE\_SOURCE      | 1      | none        |
| QUERY\_ROLE\_TARGET      | 2      | none        |

### ReconciliationOutcome

(synq.agent.recon.v1.ReconciliationOutcome)

ReconciliationOutcome describes the outcome of a single reconciliation.
Distinguishes infrastructure errors from data comparison results.
Values are ordered by severity: passed \< within\_threshold \< mismatched \< failed.

| Name                                                   | Number | Description                                                                                                                                                                  |
| ------------------------------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RECONCILIATION\_OUTCOME\_UNSPECIFIED                   | 0      | none                                                                                                                                                                         |
| RECONCILIATION\_OUTCOME\_PASSED                        | 1      | Reconciliation completed and data matched exactly — no differences found.                                                                                                    |
| RECONCILIATION\_OUTCOME\_MISMATCHED\_WITHIN\_THRESHOLD | 2      | Reconciliation found data differences but all differences were within configured thresholds. This is a warning-level outcome — data differs but within acceptable tolerance. |
| RECONCILIATION\_OUTCOME\_MISMATCHED                    | 3      | Reconciliation completed but found data differences that exceed configured thresholds (or no thresholds were configured).                                                    |
| RECONCILIATION\_OUTCOME\_FAILED                        | 4      | Reconciliation encountered an infrastructure error (connection failure, query error, setup failure, etc.) and could not complete the comparison.                             |

### RowMismatchType

(synq.agent.recon.v1.RowMismatchType)

RowMismatchType categorizes a single row-level mismatch.

The source/target sense of these values matches SegmentMismatchType and
AggregateDivergenceType: source is numbered before target everywhere.

| Name                                     | Number | Description                                                  |
| ---------------------------------------- | ------ | ------------------------------------------------------------ |
| ROW\_MISMATCH\_TYPE\_UNSPECIFIED         | 0      | none                                                         |
| ROW\_MISMATCH\_TYPE\_MISSING\_IN\_SOURCE | 1      | The row is present in the target but absent from the source. |
| ROW\_MISMATCH\_TYPE\_MISSING\_IN\_TARGET | 2      | The row is present in the source but absent from the target. |
| ROW\_MISMATCH\_TYPE\_MODIFIED            | 3      | The row exists on both sides but its contents differ.        |

### SegmentMismatchType

(synq.agent.recon.v1.SegmentMismatchType)

SegmentMismatchType categorizes how rows differ between source and target.

A mismatch leaf carries every type that applies, so a segment whose two
sides differ in both row count and content reports COUNT\_MISMATCH and
DATA\_MISMATCH together.

| Name                                         | Number | Description                                                                                                                                      |
| -------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| SEGMENT\_MISMATCH\_TYPE\_UNSPECIFIED         | 0      | none                                                                                                                                             |
| SEGMENT\_MISMATCH\_TYPE\_MISSING\_IN\_SOURCE | 1      | The segment holds rows on the target side but none on the source side.                                                                           |
| SEGMENT\_MISMATCH\_TYPE\_MISSING\_IN\_TARGET | 2      | The segment holds rows on the source side but none on the target side.                                                                           |
| SEGMENT\_MISMATCH\_TYPE\_COUNT\_MISMATCH     | 3      | Both sides hold rows, but not the same number of them.                                                                                           |
| SEGMENT\_MISMATCH\_TYPE\_DATA\_MISMATCH      | 4      | Both sides hold rows and their checksums disagree, so at least one row differs in content. Reported independently of the row counts.             |
| SEGMENT\_MISMATCH\_TYPE\_UNKNOWN             | 5      | The segment was reported as mismatched but none of the categories above applied. Distinct from UNSPECIFIED, which means the field was never set. |

### StageType

(synq.agent.recon.v1.StageType)

StageType identifies the type of reconciliation stage.

| Name                          | Number | Description                                                 |
| ----------------------------- | ------ | ----------------------------------------------------------- |
| STAGE\_TYPE\_UNSPECIFIED      | 0      | none                                                        |
| STAGE\_TYPE\_QUICK\_CHECK     | 1      | Single-query count + checksum comparison.                   |
| STAGE\_TYPE\_BISECTION\_DRILL | 2      | Recursive bisection drill-down to locate mismatches.        |
| STAGE\_TYPE\_AGGREGATE\_CHECK | 3      | Aggregate GROUP BY comparison with measures and thresholds. |

### AggregateFunction

(synq.agent.recon.v1.AggregateFunction)

AggregateFunction defines the supported SQL aggregate functions
for measure comparisons in aggregate reconciliation mode.

| Name                             | Number | Description                                         |
| -------------------------------- | ------ | --------------------------------------------------- |
| AGGREGATE\_FUNCTION\_UNSPECIFIED | 0      | none                                                |
| AGGREGATE\_FUNCTION\_SUM         | 1      | SQL SUM() — total of all values in the group.       |
| AGGREGATE\_FUNCTION\_COUNT       | 2      | SQL COUNT() — number of rows in the group.          |
| AGGREGATE\_FUNCTION\_AVG         | 3      | SQL AVG() — arithmetic mean of values in the group. |
| AGGREGATE\_FUNCTION\_MIN         | 4      | SQL MIN() — smallest value in the group.            |
| AGGREGATE\_FUNCTION\_MAX         | 5      | SQL MAX() — largest value in the group.             |

### PercentageBasis

(synq.agent.recon.v1.PercentageBasis)

PercentageBasis controls which percentage formula is used for threshold comparison.
The choice affects how "big" a difference appears when source and target values
differ in magnitude.

| Name                           | Number | Description      |      |     |        |                                                                                   |        |                                                                                            |
| ------------------------------ | ------ | ---------------- | ---- | --- | ------ | --------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------ |
| PERCENTAGE\_BASIS\_UNSPECIFIED | 0      | Default: source. |      |     |        |                                                                                   |        |                                                                                            |
| PERCENTAGE\_BASIS\_SOURCE      | 1      |                  | diff | /   | source | — "target is X% off from source." Best when source is the authoritative baseline. |        |                                                                                            |
| PERCENTAGE\_BASIS\_TARGET      | 2      |                  | diff | /   | target | — "source is X% off from target." Best when target is the authoritative baseline. |        |                                                                                            |
| PERCENTAGE\_BASIS\_SYMMETRIC   | 3      | 2 \*             | diff | / ( | source | +                                                                                 | target | ) — symmetric, neither side is privileged. Best when both sides are equally authoritative. |

### ReconciliationRunFailureCategory

(synq.agent.recon.v1.ReconciliationRunFailureCategory)

ReconciliationRunFailureCategory classifies why a run ended in FAILED.
Clients use this to render appropriate user-facing messages.

| Name                                                     | Number | Description                                                                                   |
| -------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_UNSPECIFIED      | 0      | none                                                                                          |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_CONNECTIVITY     | 1      | Could not connect to source/target warehouse or other upstream.                               |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_CONFIG\_INVALID  | 2      | Suite config or environment was rejected at execution time.                                   |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_EXECUTION\_ERROR | 3      | Reconciliation execution itself returned an error.                                            |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_INTERNAL         | 4      | Unexpected internal error.                                                                    |
| RECONCILIATION\_RUN\_FAILURE\_CATEGORY\_TIMEOUT          | 5      | Run exceeded its configured wall-clock execution timeout and was cancelled before completing. |

### ReconciliationRunStatus

(synq.agent.recon.v1.ReconciliationRunStatus)

ReconciliationRunStatus is the lifecycle state of a single reconciliation run.

| Name                                      | Number | Description                                                                                   |
| ----------------------------------------- | ------ | --------------------------------------------------------------------------------------------- |
| RECONCILIATION\_RUN\_STATUS\_UNSPECIFIED  | 0      | none                                                                                          |
| RECONCILIATION\_RUN\_STATUS\_SCHEDULED    | 1      | Run has been queued but not yet picked up by the worker.                                      |
| RECONCILIATION\_RUN\_STATUS\_IN\_PROGRESS | 2      | Worker has started executing the run.                                                         |
| RECONCILIATION\_RUN\_STATUS\_SUCCEEDED    | 3      | Run completed successfully.                                                                   |
| RECONCILIATION\_RUN\_STATUS\_FAILED       | 4      | Run completed with a failure.                                                                 |
| RECONCILIATION\_RUN\_STATUS\_CANCELLED    | 5      | Run was skipped or cancelled before/during execution (e.g. suite deleted, deployment paused). |

### ReconciliationRunTrigger

(synq.agent.recon.v1.ReconciliationRunTrigger)

ReconciliationRunTrigger describes why a run was created.

| Name                                      | Number | Description                                                                       |
| ----------------------------------------- | ------ | --------------------------------------------------------------------------------- |
| RECONCILIATION\_RUN\_TRIGGER\_UNSPECIFIED | 0      | none                                                                              |
| RECONCILIATION\_RUN\_TRIGGER\_ADHOC       | 1      | User submitted an ad-hoc suite via SubmitAdhocSuite.                              |
| RECONCILIATION\_RUN\_TRIGGER\_SCHEDULED   | 2      | Scheduler enqueued the run from a deployment / managed-suite cron.                |
| RECONCILIATION\_RUN\_TRIGGER\_API         | 3      | External API call triggered the run (e.g. CI hook, future TriggerDeployment RPC). |

### DeploymentAction

(synq.agent.recon.v1.DeploymentAction)

| Name                                          | Number | Description                                                                                                                                                                                                     |
| --------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DEPLOYMENT\_ACTION\_UNSPECIFIED               | 0      | none                                                                                                                                                                                                            |
| DEPLOYMENT\_ACTION\_PROMOTED                  | 1      | The suite reached production for the first time, under a new deployment id. Only PROMOTED and REPROMOTED replace the frozen suite snapshot; every other action carries the previous snapshot forward unchanged. |
| DEPLOYMENT\_ACTION\_REPROMOTED                | 2      | A suite already in production was published again, keeping its deployment id and replacing the frozen snapshot with the current configuration.                                                                  |
| DEPLOYMENT\_ACTION\_SCHEDULE\_CHANGED         | 3      | The run schedule changed. The suite configuration itself is untouched.                                                                                                                                          |
| DEPLOYMENT\_ACTION\_MAPPINGS\_CHANGED         | 4      | The bindings from the suite's connection names to workspace integrations changed.                                                                                                                               |
| DEPLOYMENT\_ACTION\_PAUSED                    | 5      | Scheduled runs were suspended. The deployment stays in production.                                                                                                                                              |
| DEPLOYMENT\_ACTION\_RESUMED                   | 6      | Scheduled runs were re-enabled after a pause.                                                                                                                                                                   |
| DEPLOYMENT\_ACTION\_UNPROMOTED                | 7      | The suite was withdrawn from production. Distinct from PAUSED: this retires the deployment rather than suspending its schedule.                                                                                 |
| DEPLOYMENT\_ACTION\_ANNOTATIONS\_CHANGED      | 8      | The annotations attached to the deployment changed.                                                                                                                                                             |
| DEPLOYMENT\_ACTION\_FAILURE\_IMPACTS\_CHANGED | 9      | The per-reconciliation failure impact settings changed — which tables a failing reconciliation raises an issue on.                                                                                              |
| DEPLOYMENT\_ACTION\_CATEGORIES\_CHANGED       | 10     | The categories declared for the deployment's reconciliation checks changed.                                                                                                                                     |

### UnresolvedConnectionReason

(synq.agent.recon.v1.UnresolvedConnectionReason)

Reason why a single connection could not be resolved.

| Name                                                     | Number | Description                                                                                                                                                                           |
| -------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| UNRESOLVED\_CONNECTION\_REASON\_UNSPECIFIED              | 0      | none                                                                                                                                                                                  |
| UNRESOLVED\_CONNECTION\_REASON\_NOT\_PROVIDED            | 1      | No mapping was supplied and no workspace integration matches the connection name.                                                                                                     |
| UNRESOLVED\_CONNECTION\_REASON\_INTEGRATION\_NOT\_FOUND  | 2      | Mapping references an integration that does not exist or the caller cannot see it.                                                                                                    |
| UNRESOLVED\_CONNECTION\_REASON\_CREDENTIAL\_NOT\_ALLOWED | 3      | Mapping uses a credential plane the caller is not allowed to use (e.g. user\_integration\_id without a user identity, or workspace integration\_id without SCOPE\_INTEGRATION\_EDIT). |
| UNRESOLVED\_CONNECTION\_REASON\_CAPABILITY\_DISABLED     | 4      | Integration exists but the allow\_reconciliation\_adhoc / allow\_reconciliation\_deploy capability gate is disabled for it.                                                           |

### ResumeMode

(synq.agent.recon.v1.ResumeMode)

ResumeMode selects which replay a ResumeFromRun performs.

| Name                        | Number | Description                                                                                                                                                                                          |
| --------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RESUME\_MODE\_UNSPECIFIED   | 0      | none                                                                                                                                                                                                 |
| RESUME\_MODE\_RECHECK       | 1      | Re-run the parent's queries and report what changed: fixed, still mismatched, regressed or unchanged.                                                                                                |
| RESUME\_MODE\_DRILL\_DEEPER | 2      | Continue the parent's drill from where it stopped — the mismatch segments a bisection left open, or the divergent groups an aggregate found — instead of re-drilling the whole dataset from the top. |

### CutoffAggregateFunction

(synq.agent.recon.v1.CutoffAggregateFunction)

CutoffAggregateFunction defines the aggregate function for watermark derivation.

| Name                                     | Number | Description   |
| ---------------------------------------- | ------ | ------------- |
| CUTOFF\_AGGREGATE\_FUNCTION\_UNSPECIFIED | 0      | Default: MAX. |
| CUTOFF\_AGGREGATE\_FUNCTION\_MAX         | 1      | none          |
| CUTOFF\_AGGREGATE\_FUNCTION\_MIN         | 2      | none          |

### CutoffCombineStrategy

(synq.agent.recon.v1.CutoffCombineStrategy)

CutoffCombineStrategy defines how to combine watermarks from source and target.

| Name                                   | Number | Description                                                     |
| -------------------------------------- | ------ | --------------------------------------------------------------- |
| CUTOFF\_COMBINE\_STRATEGY\_UNSPECIFIED | 0      | Default: MIN.                                                   |
| CUTOFF\_COMBINE\_STRATEGY\_MIN         | 1      | Use the smaller of source and target watermarks (safe default). |
| CUTOFF\_COMBINE\_STRATEGY\_MAX         | 2      | Use the larger of source and target watermarks.                 |
| CUTOFF\_COMBINE\_STRATEGY\_SOURCE      | 3      | Use only the source watermark (target must not be configured).  |
| CUTOFF\_COMBINE\_STRATEGY\_TARGET      | 4      | Use only the target watermark (source must not be configured).  |

### CutoffTruncateUnit

(synq.agent.recon.v1.CutoffTruncateUnit)

CutoffTruncateUnit defines time truncation for the cutoff value.

| Name                                | Number | Description              |
| ----------------------------------- | ------ | ------------------------ |
| CUTOFF\_TRUNCATE\_UNIT\_UNSPECIFIED | 0      | No truncation (default). |
| CUTOFF\_TRUNCATE\_UNIT\_HOUR        | 1      | none                     |
| CUTOFF\_TRUNCATE\_UNIT\_DAY         | 2      | none                     |
| CUTOFF\_TRUNCATE\_UNIT\_WEEK        | 3      | none                     |
| CUTOFF\_TRUNCATE\_UNIT\_MONTH       | 4      | none                     |
| CUTOFF\_TRUNCATE\_UNIT\_QUARTER     | 5      | none                     |
| CUTOFF\_TRUNCATE\_UNIT\_YEAR        | 6      | none                     |

### HashAlgorithm

(synq.agent.recon.v1.HashAlgorithm)

HashAlgorithm specifies the hash function used for row checksums
in ROW\_CHECKSUM mode. Different databases natively support different
hash functions; choosing one supported by both sides avoids emulation overhead.

| Name                               | Number | Description                                                                                                                              |
| ---------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| HASH\_ALGORITHM\_UNSPECIFIED       | 0      | Auto-negotiates the best common algorithm between source and target. Prefers the fastest algorithm supported natively by both databases. |
| HASH\_ALGORITHM\_MD5               | 1      | MD5 — widely supported across all databases. Slowest but most compatible.                                                                |
| HASH\_ALGORITHM\_FARM\_FINGERPRINT | 2      | FarmHash Fingerprint64 — native to BigQuery. Fast for BigQuery-to-BigQuery.                                                              |
| HASH\_ALGORITHM\_XXHASH64          | 3      | xxHash64 — native to Databricks and Snowflake. Fast for those dialects.                                                                  |

### MismatchDetailLevel

(synq.agent.recon.v1.MismatchDetailLevel)

MismatchDetailLevel controls how much detail is included in results for mismatched rows.
Levels are ordered by increasing data exposure.

| Name                                 | Number | Description                                                                                                                                 |
| ------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| MISMATCH\_DETAIL\_LEVEL\_UNSPECIFIED | 0      | Default: COUNT\_ONLY.                                                                                                                       |
| MISMATCH\_DETAIL\_LEVEL\_COUNT\_ONLY | 1      | Only report mismatch counts per segment. No row-level information is exposed. Privacy-safe.                                                 |
| MISMATCH\_DETAIL\_LEVEL\_WITH\_KEYS  | 2      | Include primary key values of mismatched rows. Reveals which rows differ, but not the actual data values.                                   |
| MISMATCH\_DETAIL\_LEVEL\_DETAILED    | 3      | Include full column values for mismatched rows. Requires consent\_acknowledged = true. Warning: may expose sensitive data in the audit log. |

### ReconciliationFailureImpact

(synq.agent.recon.v1.ReconciliationFailureImpact)

ReconciliationFailureImpact controls whether a reconciliation case's referenced
tables (resolved from the source/target SQL at deploy time) inherit the
case's failure status, or are only attached to the run for visibility.
This is a deployment-time policy, not part of the suite YAML — it is
set on PromoteSuite / UpdateDeploymentCaseImpacts and stored on the
promoted deployment, not on the authored config. Letting operators
flip impact without editing the suite keeps configuration declarative
and lets the FE offer "apply to all" without round-tripping YAML.

| Name                                                      | Number | Description                                                                                                                                                                                                                                                 |
| --------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RECONCILIATION\_FAILURE\_IMPACT\_UNSPECIFIED              | 0      | Defaults to RAISE\_ISSUE\_ON\_TABLES.                                                                                                                                                                                                                       |
| RECONCILIATION\_FAILURE\_IMPACT\_RAISE\_ISSUE\_ON\_TABLES | 1      | The referenced tables are treated as outcomes of the run: a failed case opens issues on each table, and the table's overall health reflects the reconciliation result. Use this when the reconciliation authoritatively validates the tables it references. |
| RECONCILIATION\_FAILURE\_IMPACT\_SHOW\_ON\_TABLES         | 2      | The referenced tables appear on the run for visibility only. The run is listed in each table's run history but never raises an issue on them. Use this for advisory checks that should not impact the table's published health.                             |

### ReconciliationMode

(synq.agent.recon.v1.ReconciliationMode)

ReconciliationMode defines the comparison strategy for a reconciliation.
Modes are ordered by depth of comparison: ROW\_COUNT \< ROW\_CHECKSUM \< AGGREGATE.

| Name                                | Number | Description                                                                                                                                                                                                                             |
| ----------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RECONCILIATION\_MODE\_UNSPECIFIED   | 0      | none                                                                                                                                                                                                                                    |
| RECONCILIATION\_MODE\_ROW\_COUNT    | 1      | Compare row counts only — no data access, just verifies both sides have the same number of rows. Fastest mode, useful as a smoke test.                                                                                                  |
| RECONCILIATION\_MODE\_ROW\_CHECKSUM | 2      | Row-level checksum comparison with hierarchical bisection drill-down to locate individual mismatched rows. The default and most thorough mode for exact row-by-row comparison.                                                          |
| RECONCILIATION\_MODE\_AGGREGATE     | 3      | Aggregate comparison — GROUP BY with configurable measures (SUM, AVG, etc.) and tolerance thresholds. Best for large datasets where exact row matching is impractical, or when business-level metrics matter more than individual rows. |

### SegmentationStrategy

(synq.agent.recon.v1.SegmentationStrategy)

SegmentationStrategy defines how key ranges are split during bisection.
The strategy affects both performance and privacy characteristics.

| Name                                | Number | Description                                                                                                                                                                                                                                                            |
| ----------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SEGMENTATION\_STRATEGY\_UNSPECIFIED | 0      | Auto: defaults to quantile.                                                                                                                                                                                                                                            |
| SEGMENTATION\_STRATEGY\_QUANTILE    | 1      | NTILE-based key-range splitting. Uses the key column's actual values to create equal-count segments. Note: exposes key values in segment boundaries in the audit log.                                                                                                  |
| SEGMENTATION\_STRATEGY\_HASH        | 2      | Hash-based bucketing followed by range drill-down. Uses a hash of the key column for segmentation. Privacy-safe: does not expose raw key values in the audit log.                                                                                                      |
| SEGMENTATION\_STRATEGY\_TIME        | 3      | Time-based partitioning followed by range drill-down. Splits by time buckets using the configured time\_column and time\_granularity. Requires time\_column to be set. Best for time-series data with a natural temporal ordering (e.g., event logs, daily snapshots). |

### TimeGranularity

(synq.agent.recon.v1.TimeGranularity)

TimeGranularity defines the granularity for time-based segmentation.

| Name                           | Number | Description   |
| ------------------------------ | ------ | ------------- |
| TIME\_GRANULARITY\_UNSPECIFIED | 0      | Default: DAY. |
| TIME\_GRANULARITY\_HOUR        | 1      | none          |
| TIME\_GRANULARITY\_DAY         | 2      | none          |
| TIME\_GRANULARITY\_WEEK        | 3      | none          |
| TIME\_GRANULARITY\_MONTH       | 4      | none          |
| TIME\_GRANULARITY\_QUARTER     | 5      | none          |
| TIME\_GRANULARITY\_YEAR        | 6      | none          |

### WindowStrategy

(synq.agent.recon.v1.WindowStrategy)

WindowStrategy defines how the time window boundaries are computed.

| Name                          | Number | Description                                                                                                                    |
| ----------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| WINDOW\_STRATEGY\_UNSPECIFIED | 0      | Default: SLIDING.                                                                                                              |
| WINDOW\_STRATEGY\_SLIDING     | 1      | Sliding window: window\_start = now - lookback. Each run covers a different absolute time range.                               |
| WINDOW\_STRATEGY\_FIXED       | 2      | Fixed window: boundaries are aligned to calendar periods. Each run within the same period covers the same absolute time range. |

### ClickhouseClusterMode

(synq.agent.dwh.v1.ClickhouseClusterMode)

| Name                                     | Number | Description                                                                                                                                                                                                                                          |
| ---------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CLICKHOUSE\_CLUSTER\_MODE\_UNSPECIFIED   | 0      | Treated as CLICKHOUSE\_CLUSTER\_MODE\_ALL\_REPLICAS. Reading across a cluster is the behaviour of a connection that has never set this, so single-node reads have to be asked for rather than inherited from an unset field.                         |
| CLICKHOUSE\_CLUSTER\_MODE\_ALL\_REPLICAS | 1      | Read system tables across the named cluster, so metadata covers every replica. Requires `GRANT REMOTE ON *.*`.                                                                                                                                       |
| CLICKHOUSE\_CLUSTER\_MODE\_SINGLE\_NODE  | 2      | Read system tables on the connected node only. The one option that works on a ClickHouse whose remote\_servers defines no cluster, and it needs no REMOTE grant — but on a service that does have replicas it reports the metadata of a single node. |

### Config.Agent.LogLevel

(synq.agent.dwh.v1.Config.Agent.LogLevel)

| Name                    | Number | Description      |
| ----------------------- | ------ | ---------------- |
| LOG\_LEVEL\_UNSPECIFIED | 0      | Defaults to info |
| LOG\_LEVEL\_TRACE       | 1      | none             |
| LOG\_LEVEL\_DEBUG       | 2      | none             |
| LOG\_LEVEL\_INFO        | 3      | none             |
| LOG\_LEVEL\_WARN        | 4      | none             |
| LOG\_LEVEL\_ERROR       | 5      | none             |

### LogLevel

(synq.agent.dwh.v1.LogLevel)

| Name                    | Number | Description |
| ----------------------- | ------ | ----------- |
| LOG\_LEVEL\_UNSPECIFIED | 0      | none        |
| LOG\_LEVEL\_INFO        | 1      | none        |
| LOG\_LEVEL\_WARN        | 2      | none        |
| LOG\_LEVEL\_ERROR       | 3      | none        |

### LineageReplaceMode

(synq.ingest.dwh.v1.LineageReplaceMode)

LineageReplaceMode controls how an ingested batch interacts with lineage that
was ingested earlier, and therefore when previously-ingested edges become
outdated and stop contributing to dependencies.

| Name                                   | Number | Description                                                                                                                                                                                                                                                                                                                                          |
| -------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| LINEAGE\_REPLACE\_MODE\_UNSPECIFIED    | 0      | Treated as MERGE so a producer that forgets to set the mode can only add or refresh edges, never silently expire them.                                                                                                                                                                                                                               |
| LINEAGE\_REPLACE\_MODE\_MERGE          | 1      | MERGE: upsert the lineage of every downstream object present in this batch and leave every other object untouched. Use for incremental refreshes — a single query's lineage, one schema the customer just rebuilt, etc. Nothing is expired; an edge disappears only when the same downstream object is re-ingested without it.                       |
| LINEAGE\_REPLACE\_MODE\_REPLACE\_SCOPE | 2      | REPLACE\_SCOPE: treat this batch as the authoritative, complete snapshot of all lineage whose downstream object falls inside `scope`. Any previously- ingested edge whose downstream object is inside the scope but absent from this batch becomes outdated and is excluded from dependencies. Use for full periodic refreshes. `scope` MUST be set. |

### LineageObjectDomain

(synq.ingest.dwh.v1.LineageObjectDomain)

LineageObjectDomain classifies what KIND of warehouse object sits at one end
of a lineage edge. It lets the platform tell real table-to-table lineage
apart from edges that touch warehouse-internal or non-tabular objects (load
stages, streams, semantic views, ...), which are rendered differently (or
hidden) in the lineage graph. The values mirror the object domains a
warehouse's native lineage feature reports (for example the domains returned
by Snowflake's GET\_LINEAGE) plus the common equivalents on other warehouses.
Set UNSPECIFIED when the producer cannot determine the domain — the edge is
still stored, just without the table-vs-builtin distinction.

| Name                                        | Number | Description                                                                                                                   |
| ------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| LINEAGE\_OBJECT\_DOMAIN\_UNSPECIFIED        | 0      | none                                                                                                                          |
| LINEAGE\_OBJECT\_DOMAIN\_TABLE              | 1      | An ordinary table.                                                                                                            |
| LINEAGE\_OBJECT\_DOMAIN\_VIEW               | 2      | A non-materialized view.                                                                                                      |
| LINEAGE\_OBJECT\_DOMAIN\_MATERIALIZED\_VIEW | 3      | A materialized view.                                                                                                          |
| LINEAGE\_OBJECT\_DOMAIN\_EXTERNAL\_TABLE    | 4      | A table backed by external storage (external/iceberg table, etc.).                                                            |
| LINEAGE\_OBJECT\_DOMAIN\_DYNAMIC\_TABLE     | 5      | A table refreshed by the warehouse from a query (Snowflake dynamic table, BigQuery materialized view with auto-refresh, ...). |
| LINEAGE\_OBJECT\_DOMAIN\_STREAM             | 6      | A change-data-capture object over a table (Snowflake stream, ...).                                                            |
| LINEAGE\_OBJECT\_DOMAIN\_STAGE              | 7      | A load/unload staging area — warehouse-internal, not a customer table.                                                        |
| LINEAGE\_OBJECT\_DOMAIN\_SEMANTIC\_VIEW     | 8      | A semantic/metrics layer object (Snowflake semantic view, ...).                                                               |
| LINEAGE\_OBJECT\_DOMAIN\_DATASET            | 9      | A dataset/grouping object exposed by the warehouse's lineage feature.                                                         |
| LINEAGE\_OBJECT\_DOMAIN\_MODULE             | 10     | A module/package object exposed by the warehouse's lineage feature.                                                           |
| LINEAGE\_OBJECT\_DOMAIN\_OTHER              | 99     | A recognised object that does not fit any category above.                                                                     |

### LineageSource

(synq.ingest.dwh.v1.LineageSource)

LineageSource records HOW the lineage was derived. The platform uses it both
to set the precedence of the resulting edges and to keep lineage of different
origins from silently overwriting one another: declared lineage is additive
to observed lineage, it never replaces it. Pick the single value that best
describes the whole batch.

| Name                              | Number | Description                                                                                                                           |
| --------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| LINEAGE\_SOURCE\_UNSPECIFIED      | 0      | none                                                                                                                                  |
| LINEAGE\_SOURCE\_DWH\_NATIVE      | 1      | Read from the warehouse's own lineage feature (for example Snowflake SNOWFLAKE.CORE.GET\_LINEAGE). Authoritative, highest fidelity.   |
| LINEAGE\_SOURCE\_QUERY\_HISTORY   | 2      | Derived by parsing query history / access history.                                                                                    |
| LINEAGE\_SOURCE\_DECLARED         | 3      | Declared by the customer or a modelling tool (dbt refs, hand-authored edges, BI relationships) rather than observed in the warehouse. |
| LINEAGE\_SOURCE\_VIEW\_DEFINITION | 4      | Derived from a view or materialization definition.                                                                                    |

### SqlObfuscationMode

(synq.ingest.dwh.v1.SqlObfuscationMode)

SqlObfuscationMode represents the level of SQL obfuscation applied to query logs.
This is critical for on-premise deployments where customers want to prevent
sensitive data in SQL queries from being sent to Coalesce Quality backend.

| Name                                     | Number | Description                                                                                                  |
| ---------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------ |
| SQL\_OBFUSCATION\_MODE\_NONE             | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX No obfuscation was applied                                         |
| SQL\_OBFUSCATION\_MODE\_REDACT\_LITERALS | 1      | String and numeric literals were replaced with placeholders while preserving query structure for SQL parsing |

### Owner.Source

(synq.owners.v1.Owner.Source)

Where the owner is managed. Owners from an external source (e.g. Atlan) are
read-only.

| Name          | Number | Description                               |
| ------------- | ------ | ----------------------------------------- |
| SOURCE\_SYNQ  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_ATLAN | 1      | none                                      |

### Domain.Source

(synq.domains.v2.Domain.Source)

Where this domain is managed. Domains from an external source are read-only
in the app.

| Name          | Number | Description                               |
| ------------- | ------ | ----------------------------------------- |
| SOURCE\_SYNQ  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_ATLAN | 1      | none                                      |

### Domain.Source

(synq.domains.v1.Domain.Source)

| Name          | Number | Description                               |
| ------------- | ------ | ----------------------------------------- |
| SOURCE\_SYNQ  | 0      | buf:lint:ignore ENUM\_ZERO\_VALUE\_SUFFIX |
| SOURCE\_ATLAN | 1      | none                                      |

### DataPlatformType

(synq.platforms.v1.DataPlatformType)

| Name                                    | Number | Description |
| --------------------------------------- | ------ | ----------- |
| DATA\_PLATFORM\_TYPE\_UNSPECIFIED       | 0      | none        |
| DATA\_PLATFORM\_TYPE\_BIGQUERY          | 10     | none        |
| DATA\_PLATFORM\_TYPE\_LOOKER            | 20     | none        |
| DATA\_PLATFORM\_TYPE\_DBT               | 30     | none        |
| DATA\_PLATFORM\_TYPE\_DBT\_CLOUD        | 31     | none        |
| DATA\_PLATFORM\_TYPE\_DBT\_SELF\_HOSTED | 32     | none        |
| DATA\_PLATFORM\_TYPE\_SNOWFLAKE         | 50     | none        |
| DATA\_PLATFORM\_TYPE\_GCP               | 60     | none        |
| DATA\_PLATFORM\_TYPE\_GIT               | 70     | none        |
| DATA\_PLATFORM\_TYPE\_GITHUB            | 71     | none        |
| DATA\_PLATFORM\_TYPE\_REDSHIFT          | 80     | none        |
| DATA\_PLATFORM\_TYPE\_TABLEAU           | 110    | none        |
| DATA\_PLATFORM\_TYPE\_AIRFLOW           | 120    | none        |
| DATA\_PLATFORM\_TYPE\_CLICKHOUSE        | 130    | none        |
| DATA\_PLATFORM\_TYPE\_POSTGRES          | 160    | none        |
| DATA\_PLATFORM\_TYPE\_MYSQL             | 170    | none        |
| DATA\_PLATFORM\_TYPE\_DATABRICKS        | 180    | none        |
| DATA\_PLATFORM\_TYPE\_SQLMESH           | 190    | none        |
| DATA\_PLATFORM\_TYPE\_DUCKDB            | 200    | none        |
| DATA\_PLATFORM\_TYPE\_TRINO             | 210    | none        |
| DATA\_PLATFORM\_TYPE\_ATLAN             | 220    | none        |
| DATA\_PLATFORM\_TYPE\_COALESCE          | 230    | none        |
| DATA\_PLATFORM\_TYPE\_CASTORDOC         | 240    | none        |
| DATA\_PLATFORM\_TYPE\_POWERBI           | 300    | none        |
| DATA\_PLATFORM\_TYPE\_THOUGHTSPOT       | 310    | none        |
| DATA\_PLATFORM\_TYPE\_SIGMA             | 320    | none        |
| DATA\_PLATFORM\_TYPE\_DOMO              | 330    | none        |
| DATA\_PLATFORM\_TYPE\_MSSQL             | 340    | none        |
| DATA\_PLATFORM\_TYPE\_ORACLE            | 350    | none        |
| DATA\_PLATFORM\_TYPE\_ATHENA            | 360    | none        |
| DATA\_PLATFORM\_TYPE\_FABRIC            | 370    | none        |
| DATA\_PLATFORM\_TYPE\_SYNQ              | 1000   | none        |

### ListIncidentsRequest.Field

(synq.incidents.v1.ListIncidentsRequest.Field)

| Name               | Number | Description |
| ------------------ | ------ | ----------- |
| FIELD\_UNSPECIFIED | 0      | none        |
| FIELD\_CREATED\_AT | 1      | none        |
| FIELD\_UPDATED\_AT | 2      | none        |

### ListIncidentsRequest.Sort.Order

(synq.incidents.v1.ListIncidentsRequest.Sort.Order)

| Name               | Number | Description |
| ------------------ | ------ | ----------- |
| ORDER\_UNSPECIFIED | 0      | none        |
| ORDER\_ASC         | 1      | none        |
| ORDER\_DESC        | 2      | none        |

### Incident.State

(synq.incidents.v1.Incident.State)

| Name               | Number | Description |
| ------------------ | ------ | ----------- |
| STATE\_UNSPECIFIED | 0      | none        |
| STATE\_OPEN        | 1      | none        |
| STATE\_CLOSED      | 2      | none        |
| STATE\_CANCELLED   | 3      | none        |
