bundled.yaml
openapi: 3.1.0 info: title: Gable API description: > API to interact with the Gable platform
Authorization
All API requests require an API key to be passed in the `X-API-KEY` header.
For instructions on finding your API key and api endpoint check out the [API
Key documentation](../docs/api-keys.md).
Example: `curl -H "X-API-KEY: "
https://api-{organization}.gable.ai/v0/ping\`
contact:
name: Gable Engineering
url: https://gable.ai
email: engineers@gable.ai
version: 1.28.0
servers:
- url: https://{hostname}.gable.ai
description: Gable API
variables:
hostname:
default: demo-api
description: Customer environment assigned by Gable
security:
- ApiKeyAuth: []
tags:
- name: action
- name: api-keys
- name: auth
- name: changelog
- name: config
- name: contract
- name: data-asset
- name: debug
- name: s3
- name: settings
- name: slack
- name: sso
- name: webhook
- name: notifications
- name: constraints
- name: telemetry
- name: component
- name: components
- name: sca
- name: cross-service-components
- name: lineage
- name: events
- name: measurements
- name: defect-report
- name: experimental
paths:
/v0/ping:
get:
operationId: ping
description: Ping Gable
summary: Ping Gable
tags:
- debug
responses:
'200':
description: Successful ping response
content:
application/json:
schema:
$ref: '#/components/schemas/PingResponse'
/v0/_version:
get:
operationId: version
description: Gable version endpoint
summary: Gable version endpoint
tags:
- debug
responses:
'200':
description: Successful version response
content:
application/json:
schema:
$ref: '#/components/schemas/VersionResponse'
/v0/action:
post:
description: Create a new action
summary: Create a new action
tags:
- action
operationId: postAction
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostActionRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PostActionResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete an existing action
summary: Delete an existing action
tags:
- action
operationId: deleteAction
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteActionRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteActionResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
description: Update an existing action
summary: Update an existing action
tags:
- action
operationId: putAction
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PutActionRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PutActionResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/actions:
get:
description: Get all actions
summary: Get all actions
tags:
- action
operationId: getActions
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GetActionsResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/auth/npm:
post:
tags:
- auth
operationId: getNpmCredentials
description: Gets temporary npm credentials
summary: Gets temporary npm credentials
responses:
'200':
description: Npm credentials
content:
application/json:
schema:
$ref: '#/components/schemas/GetNpmCredentialsResponse'
/v0/auth/pip:
post:
tags:
- auth
operationId: getPipCredentials
description: Gets temporary aws code artfact creditial for pip
summary: Gets temporary aws code artfact creditial for pip
responses:
'200':
description: Pip credentials
content:
application/json:
schema:
$ref: '#/components/schemas/GetPipCredentialsResponse'
/v0/auth/sca-prime-artifact-bucket:
get:
tags:
- auth
operationId: getScaPrimeS3Url
description: >-
Get presigned S3 URL to SCA Prime artifact bucket containing the symbol
artifact for the given library and scaPrimeHash
summary: Get SCA Prime S3 URL
parameters:
- name: library
in: query
required: true
schema:
type: string
- name: scaPrimeHash
in: query
required: true
schema:
type: string
responses:
'200':
description: The SCA Prime artifact bucket
content:
application/json:
schema:
$ref: '#/components/schemas/GetScaPrimeArtifactBucketResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/delete/{id}:
delete:
tags:
- contract
operationId: deleteContract
description: Delete a contract by ID
summary: Delete a contract by ID
parameters:
- name: id
in: path
required: true
description: Contract ID
schema:
type: string
format: uuid
responses:
'200':
description: Contract successfully deleted
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteContractResponse'
'400':
description: Invalid contract ID format
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Contract not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/validate:
post:
description: Validate a contract
summary: Validate a contract
tags:
- contract
operationId: validateContract
requestBody:
description: Contract
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostContractRequest'
responses:
'200':
description: Response when validation could be completed
content:
application/json:
schema:
$ref: '#/components/schemas/CheckResponse'
/v0/contract/{id}:
get:
description: Get a contract by id
summary: Get a contract by id
tags:
- contract
operationId: getContract
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the contract
responses:
'200':
description: Contract
content:
application/json:
schema:
$ref: '#/components/schemas/ContractOutput'
/v0/contract/{id}/stage:
put:
tags:
- contract
operationId: putContractStage
description: Update a contract's stage
summary: Update a contract's stage
parameters:
- name: id
in: path
description: Contract ID
required: true
schema:
type: string
format: uuid
requestBody:
description: Contract stage update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PutContractStageRequest'
responses:
'200':
description: Contract stage updated
content:
application/json:
schema:
$ref: '#/components/schemas/PutContractStageResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Contract not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/{id}/violation-status:
get:
description: Get the violation status of a contract by id
summary: Get the violation status of a contract by id
tags:
- contract
operationId: getContractViolationStatus
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the contract
responses:
'200':
description: Contract
content:
application/json:
schema:
$ref: '#/components/schemas/GetContractViolationStatusResponse'
'404':
description: Contract not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contracts:
get:
description: Get all contracts
summary: Get all contracts
tags:
- contract
operationId: getContracts
parameters:
- name: resourcesLocation
in: query
description: >-
Location of the data assets resources (e.g.
'{host}:{port}.{database}.{schema}' for database resources)
required: false
schema:
type: string
- name: sourceType
in: query
description: >-
Source type of the data assets (e.g. 'postgres', 'mysql', 'avro',
'protobuf', 'json_schema', etc.)
required: false
schema:
$ref: '#/components/schemas/SourceType'
- in: query
name: limit
schema:
type: integer
description: The limit used for offset-based pagination
- in: query
name: offset
schema:
type: integer
description: The offset used for offset-based pagination
- in: query
name: status
schema:
type: string
description: The status of the contract
responses:
'200':
description: All data contracts (filtered by query parameters if provided)
content:
application/json:
schema:
oneOf:
- type: array
items:
$ref: '#/components/schemas/ContractOutput'
- $ref: '#/components/schemas/ContractOutputPaginated'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contracts/count:
get:
description: Get contracts count
summary: Get contracts count
tags:
- contract
operationId: getContractsCount
responses:
'200':
description: Contracts count
content:
application/json:
schema:
$ref: '#/components/schemas/DataCount'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract:
post:
tags:
- contract
operationId: postContract
description: Create a contract
summary: Create a contract
requestBody:
description: Contract
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostContractRequest'
responses:
'200':
description: Contracts
content:
application/json:
schema:
$ref: '#/components/schemas/PostContractResponse'
/v0/contract/{id}/activity:
get:
description: Get the activity events for a contract
summary: Get the activity events for a contract
tags:
- contract
operationId: getContractActivity
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the contract
responses:
'200':
description: Successful response containing the activity events for the contract
content:
application/json:
schema:
$ref: '#/components/schemas/ContractActivityResponse'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract-subscription/{id}:
get:
description: Get a contract subscription by id
summary: Get a contract subscription by id
tags:
- contract
operationId: getContractSubscription
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: The UUID of the contract
responses:
'200':
description: Details of a contract subscription
content:
application/json:
schema:
$ref: '#/components/schemas/ContractSubscription'
'404':
description: Contract subscription not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
description: Update a contract subscription
summary: Update a contract subscription
tags:
- contract
operationId: updateContractSubscription
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: The UUID of the contract
requestBody:
description: Contract subscription to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateContractSubscriptionRequest'
responses:
'200':
description: Contract subscription was successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/ContractSubscription'
'404':
description: Contract subscription, contract, or user not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete a subscription for a contract
summary: Delete a subscription for a contract
tags:
- contract
operationId: deleteContractSubscription
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: The UUID of the contract
responses:
'204':
description: Contract subscription was successfully deleted
'404':
description: Contract subscription not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract-subscription:
post:
description: Create a new subscription for a contract
summary: Create a new subscription for a contract
tags:
- contract
operationId: createContractSubscription
requestBody:
description: Subscription to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateContractSubscriptionRequest'
responses:
'200':
description: Contract subscription was successfully created
content:
application/json:
schema:
$ref: '#/components/schemas/ContractSubscription'
'404':
description: Contract or user not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract-subscriptions:
get:
description: Get all contract subscriptions
summary: Get all contract subscriptions
tags:
- contract
operationId: getContractSubscriptions
parameters:
- name: dataContractId
in: query
description: Filter subscriptions by contract
required: false
schema:
type: string
format: uuid
responses:
'200':
description: List of subscriptions for the contract
content:
application/json:
schema:
$ref: '#/components/schemas/GetContractSubscriptionsResponse'
'404':
description: Contract ID specified in query string param does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/check-compliance:
post:
description: Check if the asset associated with the contract is compliant
summary: Check if the asset associated with the contract is compliant
tags:
- data-asset
- contract
operationId: ContractCheckCompliance
requestBody:
description: Contract to check
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContractCheckComplianceRequest'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/ContractCheckComplianceResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/bulk-check-compliance:
post:
description: Check if multiple assets associated with a contract are compliant
summary: Check multiple assets for contract compliance
tags:
- data-asset
- contract
operationId: BulkContractCheckCompliance
requestBody:
description: Contract with multiple data assets to check
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkContractCheckComplianceRequest'
responses:
'200':
description: Compliance results for each data asset
content:
application/json:
schema:
$ref: '#/components/schemas/BulkContractCheckComplianceResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/enforcement-level/{id}:
get:
description: Get a contract enforcement level by id
summary: Get a contract enforcement level by id
tags:
- contract
operationId: getContractEnforcementLevel
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data contract
responses:
'200':
description: Get EnforcementLevel
content:
application/json:
schema:
$ref: '#/components/schemas/ContractEnforcementLevel'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
description: Update a contract enforcement level by id
summary: Update a contract enforcement level by id
tags:
- contract
operationId: putContractEnforcementLevel
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data contract
requestBody:
description: Contract enforcement level
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateContractEnforcementLevelRequest'
responses:
'200':
description: Update EnforcementLevel
content:
application/json:
schema:
$ref: '#/components/schemas/ContractEnforcementLevel'
'400':
description: Contract Dependency Deletion Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Enforcement Level Not Found Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/enforcement-level:
post:
description: create a contract enforcement level
summary: Create a contract enforcement level
tags:
- contract
operationId: postContractEnforcementLevel
requestBody:
description: Create Contract enforcement level
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateContractEnforcementLevelRequest'
responses:
'200':
description: EnforcementLevel
content:
application/json:
schema:
$ref: '#/components/schemas/ContractEnforcementLevel'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets:
get:
description: Get all data assets
summary: Get all data assets
tags:
- data-asset
operationId: getDataAssets
parameters:
- in: query
name: limit
schema:
type: integer
description: The limit used for offset-based pagination
- in: query
name: offset
schema:
type: integer
description: The offset used for offset-based pagination
- in: query
name: search
schema:
type: string
description: A query string to search data assets with
responses:
'200':
description: Data assets
content:
application/json:
schema:
oneOf:
- type: array
items:
$ref: '#/components/schemas/DataAssetSearchResult'
- $ref: '#/components/schemas/DataAssetSearchResultPaginated'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
description: Creates or updates data assets
summary: Creates or updates data assets
tags:
- data-asset
operationId: createOrUpdateDataAssets
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrUpdateDataAssetsRequest'
responses:
'200':
description: Assets created or updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrUpdateDataAssetsResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Deletes data assets
summary: Deletes data assets
tags:
- data-asset
operationId: deleteDataAssets
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteDataAssetsRequest'
responses:
'200':
description: Assets deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteDataAssetsResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets/bulk:
get:
description: Get data assets by a list of DARNs
summary: Get data assets by a list of DARNs
tags:
- data-asset
operationId: getDataAssetsByDarns
parameters:
- name: darns
in: query
description: List of Data Asset Resource Names to fetch
required: true
style: form
explode: true
schema:
type: array
items:
type: string
minItems: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 1000
default: 1000
description: Maximum number of results to return (default is 1000)
- name: offset
in: query
schema:
type: integer
minimum: 0
default: 0
description: Number of results to skip (default is 0)
responses:
'200':
description: Data assets with status information for each DARN
content:
application/json:
schema:
$ref: '#/components/schemas/GetDataAssetsByDarnsResponsePaginated'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets/count:
get:
description: Get data assets count
summary: Get data assets count
tags:
- data-asset
operationId: getDataAssetsCount
responses:
'200':
description: Data assets count
content:
application/json:
schema:
$ref: '#/components/schemas/DataCount'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-asset:
post:
description: Create a data asset
summary: Create a data asset
tags:
- data-asset
operationId: createDataAsset
requestBody:
description: Data Asset
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrUpdateDataAssetRequest'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrUpdateDataAssetResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets/check:
post:
description: Check list of data assets for contract violations
summary: Check list of data assets for contract violations
tags:
- data-asset
operationId: checkDataAssets
requestBody:
description: List of data assets to check
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CheckDataAssetsRequest'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/CheckDataAssetsResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets/check-compliance:
post:
description: Check list of data assets for contract violations
summary: Check list of data assets for contract violations
tags:
- data-asset
operationId: dataAssetsCheckCompliance
requestBody:
description: List of data assets to check
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DataAssetsCheckComplianceRequest'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/CheckDataAssetsResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-assets/check-compliance/s3:
post:
description: Check list of S3 data assets for contract violations
summary: Check list of S3 data assets for contract violations
tags:
- data-asset
operationId: checkComplianceDataAssetsS3
requestBody:
description: List of S3 data assets to check for compliance
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CheckComplianceDataAssetsS3Request'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/CheckDataAssetsResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-asset/ingest:
post:
description: Ingest a data asset from a schema
summary: Ingest a data asset from a schema
operationId: ingestDataAsset
tags:
- data-asset
requestBody:
description: Data Asset Schema
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IngestDataAssetRequest'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/IngestDataAssetResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseDeprecated'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseDeprecated'
/v0/data-assets/register:
post:
description: Register data assets
summary: Register data assets
operationId: registerDataAssets
tags:
- data-asset
requestBody:
description: Data Assets Registration Request
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterDataAssetsRequest'
responses:
'200':
description: Data Assets Registration Response
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterDataAssetsResponse'
'400':
description: User Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Server Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-asset/register/s3:
post:
description: Register an S3 data asset
summary: Register an S3 data asset
operationId: registerDataAssetS3
tags:
- data-asset
- s3
requestBody:
description: S3 Data Asset Registration Request
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterDataAssetS3Request'
responses:
'200':
description: Data Asset ID
content:
application/json:
schema:
$ref: '#/components/schemas/IngestDataAssetResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseDeprecated'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseDeprecated'
/v0/data-asset/{id}:
get:
description: Get a data asset by id
summary: Get a data asset by id
tags:
- data-asset
operationId: getDataAsset
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data asset
responses:
'200':
description: Data asset
content:
application/json:
schema:
$ref: '#/components/schemas/DataAsset'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete a data asset by id
summary: Delete a data asset by id
tags:
- data-asset
operationId: deleteDataAsset
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data asset
responses:
'204':
description: Data asset deleted
'400':
description: Contract Dependency Deletion Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Data Asset Not Found Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-asset/{id}/infer-contract:
get:
description: Infer a contract from a data asset
summary: Infer a contract from a data asset
tags:
- data-asset
- contract
operationId: inferContractFromDataAsset
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data asset
responses:
'200':
description: Contract was successfully inferred from the given data asset
content:
application/json:
schema:
$ref: '#/components/schemas/InferContractFromDataAssetResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/data-asset/{id}/profile:
post:
description: Create profile for a data asset
summary: Create profile for a data asset
tags:
- data-asset
operationId: createDataAssetProfile
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the data asset
requestBody:
description: Data Asset Profiles
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDataAssetProfileRequest'
responses:
'200':
description: Data asset profile was successfully created
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDataAssetProfileResponse'
'404':
description: Data asset not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract/data-asset/{id}:
get:
description: Get the contract by data asset name
summary: Get the contract by data asset name
tags:
- contract
operationId: getContractByAssetId
parameters:
- in: path
name: id
schema:
type: string
required: true
description: asset name of data contract
- in: query
name: status
schema:
type: string
description: The status of the contract
responses:
'200':
description: Successful response containing the contract by asset name
content:
application/json:
schema:
$ref: '#/components/schemas/ContractOutput'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contracts/data-asset/{id}:
get:
description: Get the contract by darn
summary: Get the contract by darn
tags:
- contract
operationId: getContractsByAssetId
parameters:
- in: path
name: id
schema:
type: string
required: true
description: asset name of data contract
- in: query
name: status
schema:
type: string
description: The status of the contract
responses:
'200':
description: Successful response containing the contract by asset name
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ContractOutput'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/api-keys:
get:
tags:
- api-keys
operationId: getApiKeys
description: Get all api keys
summary: Get all api keys
responses:
'200':
description: Api keys
content:
application/json:
schema:
$ref: '#/components/schemas/GetApiKeysResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/settings/sso-saml-setup-details:
get:
description: >-
Get the details required to create a SAML integration for Gable in an
IdP
summary: Get the SAML integration details
tags:
- settings
- sso
operationId: getSsoSamlSetupDetails
responses:
'200':
description: Details required to create a SAML integration for Gable in an IdP
content:
application/json:
schema:
$ref: '#/components/schemas/GetSsoSamlSetupDetailsResponse'
/v0/settings/sso:
get:
description: >-
Gets the configuration of the existing SSO integration, returns 404 if
SSO is not currently configured
summary: Gets the configuration of the existing SSO integration
tags:
- settings
- sso
operationId: getSsoConfiguration
responses:
'200':
description: Configuration of current SSO integration
content:
application/json:
schema:
$ref: '#/components/schemas/SsoConfig'
'404':
description: SSO is not currently configured
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
description: Configure (create or update) an SSO integration in Gable
summary: Configure (create or update) an SSO integration in Gable
tags:
- settings
- sso
operationId: configureSso
requestBody:
description: Configuration for setting up SSO
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SsoConfig'
responses:
'200':
description: SSO was successfully configured
content:
application/json:
schema:
$ref: '#/components/schemas/SsoConfig'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Remove the existing SSO integration in Gable
summary: Remove the existing SSO integration in Gable
tags:
- settings
- sso
operationId: removeSso
responses:
'204':
description: SSO was successfully deleted
'404':
description: No existing SSO was found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/settings/user:
post:
description: >-
Gets the details of a Gable user by their email address. Users are
automatically created in Gable the first time they log in. Use PATCH
/v0/settings/user to update a user's details.
summary: Gets the details of a Gable user
tags:
- settings
operationId: getUser
requestBody:
description: Get user by email address
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserRequest'
responses:
'200':
description: User was found with the given email address
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: User not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
patch:
description: Update a user
summary: Update a user
tags:
- settings
operationId: updateUser
requestBody:
description: User
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRequest'
responses:
'200':
description: User was updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: User not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/settings/users:
get:
description: Gets the list of Gable users
summary: Gets the list of Gable users
tags:
- settings
operationId: getUsers
responses:
'200':
description: Details required to create a SAML integration for Gable in an IdP
content:
application/json:
schema:
$ref: '#/components/schemas/GetUsersResponse'
post:
description: Invites a user to Gable
summary: Invites a user
tags:
- settings
operationId: inviteUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InviteUserRequest'
responses:
'200':
description: User was invited to Gable
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error inviting user
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Deletes a user from Gable
summary: Deletes a user
tags:
- settings
operationId: deleteUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteUserRequest'
responses:
'200':
description: User was deleted successfully
'404':
description: User not found
'500':
description: Error deleting user
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/changelog:
get:
tags:
- changelog
operationId: getChangelog
description: Get the changelog
summary: Get the changelog
parameters:
- in: query
name: limit
schema:
type: integer
description: The limit used for offset-based pagination
- in: query
name: offset
schema:
type: integer
description: The offset used for offset-based pagination
- in: query
name: source
schema:
type: array
items:
type: string
description: Comma-separated list of the sources to filter by
- in: query
name: source_type
schema:
type: array
items:
type: string
description: Comma-separated list of the source types to filter by
- in: query
name: event
schema:
type: array
items:
type: string
description: Comma-separated list of the changelog events to filter by
responses:
'200':
description: Changelog
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/GetChangelogResponse'
- $ref: '#/components/schemas/ChangelogResponsePaginated'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
description: Create a new changelog event
summary: Create a new changelog event
tags:
- changelog
operationId: createChangelogEvent
requestBody:
description: Changelog event to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateChangelogEventRequest'
responses:
'200':
description: Changelog event(s) was successfully created
content:
application/json:
schema:
$ref: '#/components/schemas/CreateChangelogEventResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/changelog/count:
get:
description: Get changelog count
summary: Get changelog count
tags:
- changelog
operationId: getChangelogCount
responses:
'200':
description: Changelog count
content:
application/json:
schema:
$ref: '#/components/schemas/DataCount'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/changelog/filters:
get:
description: Get changelog filters available
summary: Get changelog filters available
tags:
- changelog
operationId: getChangelogFilters
responses:
'200':
description: Changelog filters
content:
application/json:
schema:
$ref: '#/components/schemas/GetChangelogFiltersResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/config:
get:
description: >-
Get config by type, language, repo and optional version. Returns the
latest config if version is not specified.
tags:
- config
operationId: getConfig
parameters:
- name: config_type
in: query
required: true
schema:
type: string
- name: repo
in: query
required: true
schema:
type: string
- name: language
in: query
required: false
schema:
type: string
- name: version
in: query
required: false
schema:
type: string
- name: namespace
in: query
required: false
schema:
type: string
responses:
'200':
description: Config found
content:
application/json:
schema:
$ref: '#/components/schemas/GetConfigResponse'
'404':
description: Config not found
post:
description: Create a config - config
operationId: postConfig
requestBody:
description: Config
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostConfigRequest'
responses:
'200':
description: Config
content:
application/json:
schema:
$ref: '#/components/schemas/PostConfigResponse'
/v0/slack/channels:
get:
tags:
- slack
operationId: getSlackChannels
description: Get Slack channels for workspace
summary: Get Slack channels for workspace
responses:
'200':
description: Slack channels
content:
application/json:
schema:
$ref: '#/components/schemas/GetSlackChannelsResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/slack/delete:
delete:
tags:
- slack
operationId: deleteSlack
description: Delete Slack integration
summary: Delete Slack integration
responses:
'204':
description: Slack integration deleted
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/slack/install:
get:
tags:
- slack
operationId: getSlackInstall
description: Get the generated Slack install URL
summary: Get the generated Slack install URL
responses:
'200':
description: Slack install
content:
application/json:
schema:
$ref: '#/components/schemas/GetSlackInstallResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/slack/test:
post:
description: Post a test message to the slack channel
summary: Post a test message to the slack channel
tags:
- slack
operationId: postTestSlackMessage
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostTestSlackMessageRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PostTestSlackMessageResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/webhooks:
post:
description: Create a webhook endpoint
summary: Create a webhook endpoint
tags:
- webhook
operationId: createWebhook
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookResponse'
'422':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
get:
description: Get webhooks endpoints
summary: Get webhooks endpoints
tags:
- webhook
operationId: getWebhooks
responses:
'200':
description: Get all webhooks endpoints
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhooksResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/webhooks/test:
post:
description: Post a test message to the webhook
summary: Post a test message to the webhook
tags:
- webhook
operationId: postTestWebhookMessage
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostTestWebhookMessageRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PostTestWebhookMessageResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/webhooks/{id}:
put:
description: Update a webhook
summary: Update a webhook
tags:
- webhook
operationId: updateWebhook
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: The UUID of the webhook
requestBody:
description: Webhook to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookRequest'
responses:
'200':
description: Webhook was successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookResponse'
'404':
description: Webhook not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete the existing webhook
summary: Delete the existing webhook
tags:
- webhook
operationId: deleteWebhook
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: The UUID of the webhook
responses:
'204':
description: Webhook was successfully deleted
'404':
description: No existing webhook was found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/notifications:
get:
description: Get notifications
summary: Get notifications
tags:
- notifications
operationId: getNotifications
parameters:
- in: query
name: limit
schema:
type: integer
description: The limit used for offset-based pagination
- in: query
name: offset
schema:
type: integer
description: The offset used for offset-based pagination
- in: query
name: orderBy
schema:
type: string
description: A field to order by
- in: query
name: orderDir
schema:
type: string
description: Ordering direction ('asc' or 'desc')
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GetNotificationsResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/notifications/count:
get:
description: Get notifications count
summary: Get notifications count
tags:
- notifications
operationId: getNotificationsCount
responses:
'200':
description: Notifications count
content:
application/json:
schema:
$ref: '#/components/schemas/DataCount'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract_constraints:
get:
tags:
- constraints
operationId: getContractConstraints
description: Get contract Constraints
summary: Get contract Constraints
responses:
'200':
description: constraints
content:
application/json:
schema:
$ref: '#/components/schemas/ContractConstraintMapping'
/v0/sca-metadata/ingest:
post:
description: Register sca metadata for a data asset version
summary: Register sca metadata for a data asset version
operationId: ingestScaMetadata
tags:
- data-asset
requestBody:
description: Upload metadata tied to data asset
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IngestScaMetadataRequest'
responses:
'200':
description: Sca Metadata Registration Response
content:
application/json:
schema:
$ref: '#/components/schemas/IngestScaMetadataResponse'
'400':
description: User Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Server Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/telemetry/ingest:
post:
description: >-
Create a telemetry data point for long term storage in the telemetry
table
summary: Create a telemetry data point
tags:
- telemetry
operationId: createTelemetry
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTelemetryRequest'
responses:
'201':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTelemetryResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/contract-namespaces:
get:
tags:
- contract
operationId: getContractNamespaces
description: Get all available contract namespaces
summary: Get all available contract namespaces
responses:
'200':
description: Contract namespaces
content:
application/json:
schema:
$ref: '#/components/schemas/GetContractNamespacesResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/components:
get:
description: Get all components
summary: Get all components
tags:
- component
operationId: getComponents
parameters:
- in: query
name: search
schema:
type: string
description: A query string to search components with
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
components:
type: array
items:
$ref: '#/components/schemas/Component'
required:
- components
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/components/history:
get:
description: >-
Get components run history entries, optionally filtered by trigger,
branch, commit, namespace, and time range.
summary: Get components history
tags:
- components
operationId: getComponentsHistory
parameters:
- name: componentName
in: query
description: Human-readable name of the component.
required: false
schema:
type: string
- name: branchName
in: query
description: Filter by git branch name.
required: false
schema:
type: string
default: main
- name: commitSha
in: query
description: Filter by git commit SHA.
required: false
schema:
type: string
- name: namespace
in: query
description: Filter by namespace (e.g. prod, staging, dev).
required: false
schema:
type: string
- name: timeRangeStart
in: query
description: Inclusive start timestamp for filtering runs.
required: false
schema:
type: string
format: date-time
- name: timeRangeEnd
in: query
description: Inclusive end timestamp for filtering runs.
required: false
schema:
type: string
format: date-time
- name: runId
in: query
description: Filter by specific run ID.
required: false
schema:
type: string
- name: limit
in: query
description: Maximum number of history entries to return.
required: false
schema:
type: integer
default: 20
- name: cursor
in: query
description: Token for paginating through large result sets.
required: false
schema:
type: string
- name: sortBy
in: query
description: Field to sort results by.
required: false
schema:
type: string
enum:
- commitTimestamp
- analysisTimestamp
default: commitTimestamp
- name: sortOrder
in: query
description: Sort direction.
required: false
schema:
type: string
enum:
- asc
- desc
default: desc
responses:
'200':
description: Component history retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetComponentsHistoryResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/components/history/filters:
get:
description: Get components history filters
summary: Get components history filters
tags:
- components
operationId: getComponentsHistoryFilters
parameters:
- in: query
name: search
schema:
type: string
description: A query string to search commit shas
responses:
'200':
description: Component history filters retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetComponentsHistoryFiltersResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/components/{componentId}/filter-sets:
get:
description: List measurement-report filter sets for a ground-truth component.
summary: List filter sets
tags:
- measurements
operationId: listFilterSets
parameters:
- in: path
name: componentId
schema:
type: string
format: uuid
required: true
description: UUID of the ground-truth component.
responses:
'200':
description: Filter sets for the component
content:
application/json:
schema:
$ref: '#/components/schemas/GetFilterSetsResponse'
post:
description: Create a measurement-report filter set for a ground-truth component.
summary: Create a filter set
tags:
- measurements
operationId: postFilterSet
parameters:
- in: path
name: componentId
schema:
type: string
format: uuid
required: true
description: UUID of the ground-truth component.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostFilterSetRequest'
responses:
'200':
description: The created filter set
content:
application/json:
schema:
$ref: '#/components/schemas/FilterSet'
/v0/components/{componentId}/filter-sets/{filterSetId}:
put:
description: Update a measurement-report filter set.
summary: Update a filter set
tags:
- measurements
operationId: putFilterSet
parameters:
- in: path
name: componentId
schema:
type: string
format: uuid
required: true
description: UUID of the ground-truth component.
- in: path
name: filterSetId
schema:
type: string
format: uuid
required: true
description: UUID of the filter set.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PutFilterSetRequest'
responses:
'200':
description: The updated filter set
content:
application/json:
schema:
$ref: '#/components/schemas/FilterSet'
delete:
description: Delete a measurement-report filter set.
summary: Delete a filter set
tags:
- measurements
operationId: deleteFilterSet
parameters:
- in: path
name: componentId
schema:
type: string
format: uuid
required: true
description: UUID of the ground-truth component.
- in: path
name: filterSetId
schema:
type: string
format: uuid
required: true
description: UUID of the filter set.
responses:
'200':
description: Success response
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
/v0/component/{id}:
get:
description: Get a component by id
summary: Get a component by id
tags:
- component
operationId: getComponent
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
responses:
'200':
description: Full component
content:
application/json:
schema:
$ref: '#/components/schemas/CodeComponent'
patch:
description: Update a component's metadata
summary: Update component metadata
tags:
- component
operationId: patchComponent
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
friendly_name:
type: string
description: >-
User-defined friendly name for the component. Pass empty
string to remove.
xgress_friendly_names:
type: object
description: >-
Map of boundary ID to friendly name. Pass null value to
remove a friendly name.
additionalProperties:
type: string
nullable: true
nullable: true
responses:
'200':
description: Component updated successfully
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
delete:
description: Delete a component by id
summary: Delete a component by id
tags:
- component
operationId: deleteComponent
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
responses:
'200':
description: Success response
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
/v0/component/versions/{id}:
get:
description: Get all versions of a component
summary: Get all versions of a component
tags:
- component
operationId: getComponentVersions
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
- in: query
name: versionId
schema:
type: string
required: false
description: Optional version ID to filter or focus on a specific version
responses:
'200':
description: Component versions retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetComponentVersionsResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/component/diff/{id}:
get:
description: >-
Compare two versions of a component's lineage. Returns a high-level
summary of all path-level changes.
summary: Get component diff between two versions
tags:
- component
operationId: getComponentDiff
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
- in: query
name: base
schema:
type: string
required: true
description: Base event ID for comparison
- in: query
name: compare
schema:
type: string
required: true
description: Compare event ID for comparison
- in: query
name: scanOnly
schema:
type: boolean
default: false
required: false
description: >-
When true, load lineage from raw scan snapshots and return summary
counts only (no field details).
responses:
'200':
description: Component diff retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ComponentDiffResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/component/path-diff/{id}:
get:
description: >-
Compare a single path between two versions of a component. Returns
field-level and code-flow detail.
summary: Get path diff between two versions
tags:
- component
operationId: getPathDiff
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
- in: query
name: base
schema:
type: string
required: true
description: Base event ID for comparison
- in: query
name: compare
schema:
type: string
required: true
description: Compare event ID for comparison
- in: query
name: ingress
schema:
type: string
required: true
description: Payload name of the ingress boundary
- in: query
name: egress
schema:
type: string
required: true
description: Payload name of the egress boundary
- in: query
name: basePathId
schema:
type: string
required: false
description: >-
Path ID from the base version. When provided, filters to a specific
path instead of merging all matching paths.
- in: query
name: comparePathId
schema:
type: string
required: false
description: >-
Path ID from the compare version. When provided, filters to a
specific path instead of merging all matching paths.
- in: query
name: scanOnly
schema:
type: boolean
default: false
required: false
description: >-
When true, load lineage from raw scan snapshots instead of projected
results.
responses:
'200':
description: Path diff retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PathDiffResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Path or component not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/component/merge-history/{id}:
get:
description: >-
Get a component's MERGE_TO_MAIN version history with per-version diff
metrics and downstream breakage indicators, ordered newest-first.
summary: Get component merge history
tags:
- component
operationId: getComponentMergeHistory
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the component
- in: query
name: limit
schema:
type: integer
default: 20
minimum: 1
maximum: 100
required: false
description: Maximum number of merged versions to return, newest-first.
responses:
'200':
description: Component merge history retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ComponentMergeHistoryResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Component not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/sca/start-run:
post:
tags:
- sca
operationId: postScaStartRun
description: Resolve SCA config and a canonical run ID for a future upload
summary: Resolve SCA config and run ID
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostScaStartRunRequest'
responses:
'200':
description: The SCA config and canonical run ID for this upload
content:
application/json:
schema:
$ref: '#/components/schemas/PostScaStartRunResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/sca/status/{id}:
get:
tags:
- sca
operationId: getScaRunStatus
description: Get status of a sca run
summary: Get status of a sca run
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
description: UUID of the sca job
responses:
'200':
description: the status and information about the sca run job
content:
application/json:
schema:
$ref: '#/components/schemas/GetScaRunStatusResponse'
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/sca/results:
post:
tags:
- sca
operationId: postScaResults
description: Post SCA results
summary: Post SCA results
parameters:
- in: header
name: X-Gable-Payload-Encoding
required: false
schema:
type: string
enum:
- gzip
description: >-
Required when uploading gzip-compressed SCA results with
Content-Type application/octet-stream. Do not use HTTP
Content-Encoding for compressed SCA uploads.
- in: header
name: X-Gable-Chunk-Session
required: false
schema:
type: string
description: >-
Stable upload session id shared by every chunk. When this header is
present, X-Gable-Chunk-Index and X-Gable-Chunk-Count are also
required, and the request body must contain a base64-encoded slice
of the full SCA results request body.
- in: header
name: X-Gable-Chunk-Index
required: false
schema:
type: integer
minimum: 1
description: 1-based chunk position for a header-based chunked upload.
- in: header
name: X-Gable-Chunk-Count
required: false
schema:
type: integer
minimum: 1
description: Total chunk count for a header-based chunked upload.
requestBody:
required: true
description: >-
Send a complete SCA results payload, or send base64-encoded chunks of
that payload with the X-Gable-Chunk-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/ScaResultsUploadRequest'
application/gzip:
schema:
type: string
format: binary
description: >-
Gzip-compressed JSON matching ScaResultsUploadRequest. Do not
set HTTP Content-Encoding gzip for this application payload.
application/octet-stream:
schema:
type: string
format: binary
description: >-
Gzip-compressed JSON matching ScaResultsUploadRequest. Send
X-Gable-Payload-Encoding gzip with this media type and do not
set HTTP Content-Encoding gzip.
responses:
'200':
description: SCA results
content:
application/json:
schema:
$ref: '#/components/schemas/PostScaResultsResponse'
'400':
description: Bad request body
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/defect-report:
post:
description: Submit a defect report from the product UI
summary: Submit a defect report
tags:
- defect-report
operationId: postDefectReport
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostDefectReportRequest'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PostDefectReportResponse'
'400':
description: Invalid request body
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'502':
description: Failed to send defect report email
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/cross-service-components:
get:
description: Get all components
summary: Get all components
tags:
- cross-service-components
operationId: getCrossServiceComponents
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CrossServiceComponentsResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/lineage/export:
get:
description: Export lineage
summary: Export lineage
tags:
- lineage
operationId: getLineageExport
parameters:
- in: query
name: run_id
schema:
type: string
format: uuid
required: true
description: UUID of the run
responses:
'200':
description: Lineage export
content:
application/json:
schema:
$ref: '#/components/schemas/LineageExportResponse'
'400':
description: Client error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Forbidden - namespace filtering denied access
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Run not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error exporting lineage
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/events:
post:
description: Create Lineage Events
summary: Create Lineage Events
tags:
- events
operationId: postEvents
requestBody:
description: event to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostEventsRequest'
responses:
'200':
description: Lineage Event was created
'400':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/measurements/generate:
get:
operationId: compareMeasurement
summary: Compute a measurement report on the fly
description: >-
Fetches lineage data for the specified component versions, runs the
measurement comparison, and returns the result without persisting.
tags:
- measurements
parameters:
- name: componentId
in: query
required: true
schema:
type: string
description: Component to measure.
- name: compareVersionId
in: query
required: true
schema:
type: string
description: Version to evaluate against the base.
- name: baseVersionId
in: query
schema:
type: string
description: Base (ground-truth) version ID. Defaults to latest if omitted.
- name: compareComponentId
in: query
schema:
type: string
description: >-
Component ID for the compare version. Defaults to componentId if
omitted. Use when comparing across namespaces.
- name: scanOnly
in: query
schema:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: When true, use raw scan data. When false, use projected data.
- name: applyIEInclusionFilter
in: query
schema:
type: string
enum:
- 'true'
- 'false'
default: 'true'
description: >-
When true, apply IE inclusion filtering to lineage data before
generating the measurement report.
- name: filterSetId
in: query
schema:
type: string
description: >-
Optional ID of a payload filter set to apply. Only honored when the
base namespace is ground truth; restricts the report to the filter
set's payloads.
responses:
'200':
description: Computed measurement report
content:
application/json:
schema:
$ref: '#/components/schemas/ComparisonResult'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Component or version not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/edges:
get:
description: List cross-service edges.
summary: List cross-service edges.
tags:
- experimental
operationId: getExperimentalEdges
parameters:
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace to scope returned edges.
- in: query
name: source
required: false
schema:
type: string
description: >-
Filter edges by source component name (case-insensitive substring
match).
- in: query
name: sink
required: false
schema:
type: string
description: >-
Filter edges by destination component name (case-insensitive
substring match).
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/LineageEdgeListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
description: Create a new cross-service edge.
summary: Create a new cross-service edge.
tags:
- experimental
operationId: postExperimentalEdge
parameters:
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace to scope the new edge.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LineageEdge'
responses:
'201':
description: Edge created successfully
content:
application/json:
schema:
type: object
properties:
edge:
$ref: '#/components/schemas/LineageEdge'
required:
- edge
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/edges/{id}:
get:
description: Get a cross-service edge by ID.
summary: Get a cross-service edge by ID.
tags:
- experimental
operationId: getExperimentalEdge
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The edge ID.
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace guard for the requested edge.
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
edge:
$ref: '#/components/schemas/LineageEdge'
required:
- edge
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
description: Update a cross-service edge by ID. Replaces the entire edge definition.
summary: Update a cross-service edge.
tags:
- experimental
operationId: putExperimentalEdge
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The edge ID to update.
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace guard.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LineageEdge'
responses:
'200':
description: Edge updated successfully
content:
application/json:
schema:
type: object
properties:
edge:
$ref: '#/components/schemas/LineageEdge'
required:
- edge
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete a cross-service edge by ID.
summary: Delete a cross-service edge.
tags:
- experimental
operationId: deleteExperimentalEdge
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The edge ID to delete.
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace guard.
responses:
'200':
description: Edge deleted successfully
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
required:
- success
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/components:
get:
description: List components with optional search and type filtering.
summary: List components.
tags:
- experimental
operationId: getExperimentalComponents
parameters:
- in: query
name: search
required: false
schema:
type: string
description: Search components by name (case-insensitive prefix match).
- in: query
name: type
required: false
schema:
type: string
description: Filter by component type (e.g. "repo", "data_store").
- in: query
name: namespace
required: false
schema:
type: string
description: Filter by namespace.
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ComponentListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/components/{id}:
get:
description: >
Get full component detail. For CODE components, paths include inline
ingress/egress boundary data for round-trip editing. For DATA_STORE
components, the schema field list is returned.
summary: Get component detail.
tags:
- experimental
operationId: getExperimentalComponent
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The component ID.
- in: query
name: mode
required: false
schema:
type: string
enum:
- collapsed
- all
description: >
Path projection mode. "collapsed" (default) shows effective state
(BYO overrides scan). "all" shows both scan and BYO variants.
- in: query
name: namespace
required: false
schema:
type: string
description: Optional namespace guard.
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
component:
$ref: '#/components/schemas/ComponentDetailResource'
required:
- component
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/components/{id}/versions:
get:
description: Get version history for a component.
summary: Get component versions.
tags:
- experimental
operationId: getExperimentalComponentVersions
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
description: The component ID.
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
versions:
type: array
items:
type: object
required:
- versions
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/components/{id}/paths:
post:
description: Add a new path to a CODE component.
summary: Add path to component.
tags:
- experimental
operationId: postExperimentalPath
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The component ID.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LineagePath'
responses:
'201':
description: Path created successfully
content:
application/json:
schema:
type: object
properties:
path:
$ref: '#/components/schemas/LineagePath'
required:
- path
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/components/{id}/paths/{pathId}:
put:
description: >
Update a path on a CODE component. Internally creates a BYO_PATH_DELETED
event for the old path and a BYO_PATH_ADDED event for the new path,
preserving the projection engine's overlay model.
summary: Update a path on a component.
tags:
- experimental
operationId: putExperimentalPath
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The component ID.
- in: path
name: pathId
required: true
schema:
type: string
description: The path ID to update.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LineagePath'
responses:
'200':
description: Path updated successfully
content:
application/json:
schema:
type: object
properties:
path:
$ref: '#/components/schemas/LineagePath'
required:
- path
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
description: Delete a path from a CODE component.
summary: Delete a path from a component.
tags:
- experimental
operationId: deleteExperimentalPath
parameters:
- in: path
name: id
required: true
schema:
type: string
description: The component ID.
- in: path
name: pathId
required: true
schema:
type: string
description: The path ID to delete.
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
effective_since_commit_sha:
type: string
description: >
Commit SHA this deletion is effective from. When omitted,
defaults to the latest scanned commit for the component.
responses:
'200':
description: Path deleted successfully
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
required:
- success
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/v0/experimental/component/{id}/field-pairs:
get:
description: List field pairs on a component for the field-level focused views.
summary: List field pairs for a component.
tags:
- experimental
operationId: getExperimentalComponentFieldPairs
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
description: UUID of the component.
- in: query
name: payloadGroupId
required: false
schema:
type: string
description: Optional payload to scope the returned field pairs to.
- in: query
name: origin
required: false
schema:
$ref: '#/components/schemas/FieldPairOrigin'
description: Optional filter by row provenance.
- in: query
name: isSuppressed
required: false
schema:
type: boolean
description: Optional filter by suppression state.
responses:
'200':
description: List of field pairs.
content:
application/json:
schema:
$ref: '#/components/schemas/GetFieldPairsResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Component not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/fake-path-for-type-generation:
get:
description: >-
This is a fake path added just so the schemas are generated into code.
It will be removed from the OAS after type generation, before
documentation generation.
summary: >-
This is a fake path added just so the schemas are generated into code.
It will be removed from the OAS after type generation, before
documentation generation.
tags:
- action
operationId: fakeOperationId
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/FakeResponseForTypeGeneration'
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-KEY
schemas:
PingResponse:
type: object
required:
- success
- message
properties:
message:
type: string
success:
type: boolean
VersionResponse:
type: object
required:
- hash
properties:
hash:
type: string
ActionTriggerSource:
type: object
required:
- triggerType
- triggerValues
properties:
triggerType:
type: string
description: The type of trigger
enum:
- source
triggerValues:
description: >-
List of data asset sources, any of which need to match an event to
trigger an action
type: array
items:
type: string
SourceType:
type: string
description: >-
The type of the source data asset, indicating its source or format
(e.g., postgres, protobuf).
enum:
- postgres
- mysql
- mssql
- json_schema
- avro
- protobuf
- python
- pyspark
- typescript
- java
- s3
- dataframe
- kotlin
- swift
- php
- golang
ActionTriggerSourceType:
type: object
required:
- triggerType
- triggerValues
properties:
triggerType:
type: string
description: The type of trigger
enum:
- sourceType
triggerValues:
description: >-
List of data asset sourceTypes, any of which need to match an event
to trigger an action
type: array
items:
$ref: '#/components/schemas/SourceType'
ActionTriggerEventName:
type: object
required:
- triggerType
- triggerValues
properties:
triggerType:
type: string
description: The type of trigger
enum:
- eventName
triggerValues:
description: >-
List of data asset event names, any of which need to match an event
to trigger an action
type: array
items:
type: string
enum:
- data_asset_created
- data_asset_modified_field_added
- data_asset_modified_field_changed
- data_asset_modified_field_removed
- data_asset_deleted
- data_contract_created
- data_contract_modified
- data_contract_violation
- data_contract_deleted
- data_action_created
- data_action_deleted
- data_action_enabled
- data_action_disabled
- data_action_modified
- data_asset_pii_detected
ActionTriggerNamespace:
type: object
required:
- triggerType
- triggerValues
properties:
triggerType:
type: string
description: The type of trigger
enum:
- namespace
triggerValues:
description: >-
List of contract namespaces, any of which need to match an event to
trigger an action
type: array
items:
type: string
ActionDestinationSlack:
type: object
required:
- destinationType
- slackChannelIds
properties:
destinationType:
type: string
description: The type of destination
enum:
- slack
slackChannelIds:
description: List of slack channels IDs to notify when the action is triggered
type: array
items:
type: string
ActionDestinationEmail:
type: object
required:
- destinationType
- emailAddresses
properties:
destinationType:
type: string
description: The type of destination
enum:
- email
emailAddresses:
description: List of email addresses to notify when the action is triggered
type: array
items:
type: string
format: email
ActionDestinationWebhook:
type: object
required:
- destinationType
- webhookIds
properties:
destinationType:
type: string
description: The type of destination
enum:
- webhook
webhookIds:
description: List of webhook identifiers to notify when the action is triggered
type: array
items:
type: string
PutActionRequest:
type: object
required:
- actionId
- name
- triggers
- destinations
- isActive
properties:
actionId:
type: string
description: The unique identifier of the action
name:
type: string
description: The name of the action
example: email on pricing asset change
triggers:
type: array
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ActionTriggerSource'
- $ref: '#/components/schemas/ActionTriggerSourceType'
- $ref: '#/components/schemas/ActionTriggerEventName'
- $ref: '#/components/schemas/ActionTriggerNamespace'
discriminator:
propertyName: triggerType
mapping:
source: ./ActionTriggerSource.yaml
sourceType: ./ActionTriggerSourceType.yaml
eventName: ./ActionTriggerEventName.yaml
namespace: ./ActionTriggerNamespace.yaml
destinations:
type: array
items:
oneOf:
- $ref: '#/components/schemas/ActionDestinationSlack'
- $ref: '#/components/schemas/ActionDestinationEmail'
- $ref: '#/components/schemas/ActionDestinationWebhook'
discriminator:
propertyName: destinationType
mapping:
slack: ./ActionDestinationSlack.yaml
email: ./ActionDestinationEmail.yaml
webhook: ./ActionDestinationWebhook.yaml
isActive:
type: boolean
description: Whether the action is active or not
example: true
PutActionResponse:
type: object
required:
- actionId
properties:
actionId:
type: string
description: The unique identifier of the updated action
ErrorResponse:
type: object
required:
- message
properties:
id:
type: number
title:
type: string
message:
type: string
PostActionRequest:
type: object
required:
- name
- triggers
- destinations
properties:
name:
type: string
description: The name of the action
example: email on pricing asset change
triggers:
type: array
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ActionTriggerSource'
- $ref: '#/components/schemas/ActionTriggerSourceType'
- $ref: '#/components/schemas/ActionTriggerEventName'
- $ref: '#/components/schemas/ActionTriggerNamespace'
discriminator:
propertyName: triggerType
mapping:
source: ./ActionTriggerSource.yaml
sourceType: ./ActionTriggerSourceType.yaml
eventName: ./ActionTriggerEventName.yaml
namespace: ./ActionTriggerNamespace.yaml
destinations:
type: array
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ActionDestinationSlack'
- $ref: '#/components/schemas/ActionDestinationEmail'
- $ref: '#/components/schemas/ActionDestinationWebhook'
discriminator:
propertyName: destinationType
mapping:
slack: ./ActionDestinationSlack.yaml
email: ./ActionDestinationEmail.yaml
webhook: ./ActionDestinationWebhook.yaml
PostActionResponse:
type: object
required:
- actionId
properties:
actionId:
type: string
description: The unique identifier of the created action
DeleteActionRequest:
type: object
required:
- actionId
properties:
actionId:
type: string
description: The action id to delete
DeleteActionResponse:
type: object
required:
- actionId
properties:
actionId:
type: string
description: The id of the action which was deleted
GetActionsResponse:
type: object
required:
- actions
properties:
actions:
type: array
items:
type: object
required:
- actionId
- name
- isActive
- triggers
- destinations
properties:
actionId:
type: string
description: The unique identifier of the created action
name:
type: string
description: The name of the action
example: email on pricing asset change
isActive:
type: boolean
description: Whether the action is active
example: true
ownerName:
type: string
description: The name of the user who created the action
triggers:
type: array
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ActionTriggerSource'
- $ref: '#/components/schemas/ActionTriggerSourceType'
- $ref: '#/components/schemas/ActionTriggerEventName'
- $ref: '#/components/schemas/ActionTriggerNamespace'
discriminator:
propertyName: triggerType
mapping:
source: ./ActionTriggerSource.yaml
sourceType: ./ActionTriggerSourceType.yaml
eventName: ./ActionTriggerEventName.yaml
namespace: ./ActionTriggerNamespace.yaml
destinations:
type: array
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ActionDestinationSlack'
- $ref: '#/components/schemas/ActionDestinationEmail'
- $ref: '#/components/schemas/ActionDestinationWebhook'
discriminator:
propertyName: destinationType
mapping:
slack: ./ActionDestinationSlack.yaml
email: ./ActionDestinationEmail.yaml
webhook: ./ActionDestinationWebhook.yaml
GetNpmCredentialsResponse:
type: object
required:
- authToken
- repositoryEndpoint
properties:
authToken:
description: Temporary auth token
type: string
repositoryEndpoint:
description: The npm repository endpoint
type: string
GetPipCredentialsResponse:
type: object
required:
- authToken
- repositoryEndpoint
properties:
authToken:
description: Temporary auth token
type: string
repositoryEndpoint:
description: The pip repository endpoint
type: string
GetScaPrimeArtifactBucketResponse:
type: object
description: The response from the getScaPrimeArtifactBucket function
required:
- signedS3Url
properties:
signedS3Url:
description: The signed S3 URL
type: string
DeleteContractResponse:
type: object
properties:
message:
type: string
description: Success message
ContractStatus:
type: string
description: status of the contract
enum:
- ACTIVE
- DEPRECATED
- DRAFT
- ARCHIVED
DataAssetResourceName:
type: string
pattern: >-
^(protobuf|avro|json_schema|java|postgres|mysql|mssql|snowflake|bigquery|python|pyspark|typescript|s3|dataframe|kotlin|swift|php)://(?=.*[a-zA-Z0-9])[a-zA-Z0-9_@\.:/-]+[:/](?=.*[a-zA-Z0-9])[a-zA-Z0-9
_\./-\{\}\-]+$
description: >-
The unique identifier of the data asset. It follows the pattern
'{data_asset_type}://{data_asset_source}:{data_asset_name}'
GableSchemaField:
oneOf:
- $ref: '#/components/schemas/GableSchemaFieldStruct'
- $ref: '#/components/schemas/GableSchemaFieldNull'
- $ref: '#/components/schemas/GableSchemaFieldBool'
- $ref: '#/components/schemas/GableSchemaFieldInt'
- $ref: '#/components/schemas/GableSchemaFieldFloat'
- $ref: '#/components/schemas/GableSchemaFieldString'
- $ref: '#/components/schemas/GableSchemaFieldBytes'
- $ref: '#/components/schemas/GableSchemaFieldList'
- $ref: '#/components/schemas/GableSchemaFieldMap'
- $ref: '#/components/schemas/GableSchemaFieldEnum'
- $ref: '#/components/schemas/GableSchemaFieldUnion'
- $ref: '#/components/schemas/GableSchemaFieldAliasReference'
- $ref: '#/components/schemas/GableSchemaFieldUnknown'
discriminator:
propertyName: type
mapping:
struct: '#/components/schemas/GableSchemaFieldStruct'
'null': '#/components/schemas/GableSchemaFieldNull'
bool: '#/components/schemas/GableSchemaFieldBool'
int: '#/components/schemas/GableSchemaFieldInt'
float: '#/components/schemas/GableSchemaFieldFloat'
string: '#/components/schemas/GableSchemaFieldString'
bytes: '#/components/schemas/GableSchemaFieldBytes'
list: '#/components/schemas/GableSchemaFieldList'
map: '#/components/schemas/GableSchemaFieldMap'
enum: '#/components/schemas/GableSchemaFieldEnum'
union: '#/components/schemas/GableSchemaFieldUnion'
aliasReference: '#/components/schemas/GableSchemaFieldAliasReference'
unknown: '#/components/schemas/GableSchemaFieldUnknown'
GableSchemaFieldStruct:
type: object
required:
- type
properties:
type:
type: string
enum:
- struct
name:
type: string
fields:
type: array
items:
$ref: '#/components/schemas/GableSchemaField'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
optional:
type: boolean
GableSchemaFieldNull:
type: object
required:
- type
properties:
type:
type: string
enum:
- 'null'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldBool:
type: object
required:
- type
properties:
type:
type: string
enum:
- bool
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
LogicalEnumTemporal:
type: string
enum:
- Date
- Time
- Duration
- Timestamp
GableSchemaFieldInt:
type: object
required:
- type
- bits
properties:
type:
type: string
enum:
- int
bits:
type: integer
minimum: 1
maximum: 2147483647
signed:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumTemporal'
unit:
type: string
enum:
- year
- month
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond
- picosecond
timezone:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldFloat:
type: object
required:
- type
- bits
properties:
type:
type: string
enum:
- float
bits:
type: integer
minimum: 1
maximum: 2147483647
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
LogicalEnumText:
type: string
enum:
- UUID
- org.iso.8601.Date
- org.iso.8601.DateTime
- org.iso.8601.Time
GableSchemaFieldString:
type: object
required:
- type
properties:
type:
type: string
enum:
- string
bytes:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumText'
name:
type: string
optional:
type: boolean
LogicalEnumNumeric:
type: string
enum:
- Decimal
- Interval
GableSchemaFieldBytes:
type: object
required:
- type
properties:
type:
type: string
enum:
- bytes
bytes:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumNumeric'
precision:
type: integer
minimum: 1
maximum: 2147483647
scale:
type: integer
minimum: 0
maximum: 2147483647
unit:
type: string
enum:
- year
- month
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond
- picosecond
name:
type: string
optional:
type: boolean
if:
properties:
variable:
const: false
required:
- variable
then:
required:
- bytes
GableSchemaTypeName:
type: string
enum:
- 'null'
- bool
- int
- float
- string
- bytes
- list
- map
- struct
- enum
- union
GableSchemaStruct:
type: object
required:
- type
properties:
type:
type: string
enum:
- struct
name:
type: string
fields:
type: array
items:
$ref: '#/components/schemas/GableSchemaField'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaNull:
type: object
required:
- type
properties:
type:
type: string
enum:
- 'null'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaBool:
type: object
required:
- type
properties:
type:
type: string
enum:
- bool
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaInt:
type: object
required:
- type
- bits
properties:
type:
type: string
enum:
- int
bits:
type: integer
minimum: 1
maximum: 2147483647
signed:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumTemporal'
unit:
type: string
enum:
- year
- month
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond
- picosecond
timezone:
type: string
GableSchemaFloat:
type: object
required:
- type
- bits
properties:
type:
type: string
enum:
- float
bits:
type: integer
minimum: 1
maximum: 2147483647
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaString:
type: object
required:
- type
properties:
type:
type: string
enum:
- string
bytes:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumText'
GableSchemaBytes:
type: object
required:
- type
properties:
type:
type: string
enum:
- bytes
bytes:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
$ref: '#/components/schemas/LogicalEnumNumeric'
precision:
type: integer
minimum: 1
maximum: 2147483647
scale:
type: integer
minimum: 0
maximum: 2147483647
unit:
type: string
enum:
- year
- month
- day
- hour
- minute
- second
- millisecond
- microsecond
- nanosecond
- picosecond
if:
properties:
variable:
const: false
required:
- variable
then:
required:
- bytes
GableSchemaType:
oneOf:
- $ref: '#/components/schemas/GableSchemaTypeName'
- oneOf:
- $ref: '#/components/schemas/GableSchemaStruct'
- $ref: '#/components/schemas/GableSchemaNull'
- $ref: '#/components/schemas/GableSchemaBool'
- $ref: '#/components/schemas/GableSchemaInt'
- $ref: '#/components/schemas/GableSchemaFloat'
- $ref: '#/components/schemas/GableSchemaString'
- $ref: '#/components/schemas/GableSchemaBytes'
- $ref: '#/components/schemas/GableSchemaList'
- $ref: '#/components/schemas/GableSchemaMap'
- $ref: '#/components/schemas/GableSchemaEnum'
- $ref: '#/components/schemas/GableSchemaUnion'
- $ref: '#/components/schemas/GableSchemaAliasReference'
- $ref: '#/components/schemas/GableSchemaUnknown'
discriminator:
propertyName: type
mapping:
struct: '#/components/schemas/GableSchemaStruct'
'null': '#/components/schemas/GableSchemaNull'
bool: '#/components/schemas/GableSchemaBool'
int: '#/components/schemas/GableSchemaInt'
float: '#/components/schemas/GableSchemaFloat'
string: '#/components/schemas/GableSchemaString'
bytes: '#/components/schemas/GableSchemaBytes'
list: '#/components/schemas/GableSchemaList'
map: '#/components/schemas/GableSchemaMap'
enum: '#/components/schemas/GableSchemaEnum'
union: '#/components/schemas/GableSchemaUnion'
aliasReference: '#/components/schemas/GableSchemaAliasReference'
unknown: '#/components/schemas/GableSchemaUnknown'
GableSchemaList:
type: object
required:
- type
- values
properties:
type:
type: string
enum:
- list
values:
$ref: '#/components/schemas/GableSchemaType'
length:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
GableSchemaMap:
type: object
required:
- type
- keys
- values
properties:
type:
type: string
enum:
- map
keys:
$ref: '#/components/schemas/GableSchemaType'
values:
$ref: '#/components/schemas/GableSchemaType'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaEnum:
type: object
required:
- type
- symbols
properties:
type:
type: string
enum:
- enum
symbols:
type: array
items:
type: string
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaUnion:
type: object
required:
- type
- types
properties:
type:
type: string
enum:
- union
types:
type: array
items:
$ref: '#/components/schemas/GableSchemaType'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaAliasReference:
type: object
required:
- type
properties:
type:
type: string
not:
$ref: '#/components/schemas/GableSchemaTypeName'
doc:
type: string
logical:
type: string
additionalProperties: true
not:
required:
- alias
GableSchemaUnknown:
type: object
required:
- type
properties:
type:
type: string
enum:
- unknown
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
GableSchemaFieldList:
type: object
required:
- type
- values
properties:
type:
type: string
enum:
- list
values:
$ref: '#/components/schemas/GableSchemaType'
length:
type: integer
minimum: 1
maximum: 9223372036854776000
variable:
type: boolean
default: true
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldMap:
type: object
required:
- type
- keys
- values
properties:
type:
type: string
enum:
- map
keys:
$ref: '#/components/schemas/GableSchemaType'
values:
$ref: '#/components/schemas/GableSchemaType'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldEnum:
type: object
required:
- type
- symbols
properties:
type:
type: string
enum:
- enum
symbols:
type: array
items:
type: string
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldUnion:
type: object
required:
- type
- types
properties:
type:
type: string
enum:
- union
types:
type: array
items:
$ref: '#/components/schemas/GableSchemaType'
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
GableSchemaFieldAliasReference:
type: object
required:
- type
properties:
type:
type: string
not:
$ref: '#/components/schemas/GableSchemaTypeName'
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
additionalProperties: true
not:
required:
- alias
GableSchemaFieldUnknown:
type: object
required:
- type
properties:
type:
type: string
enum:
- unknown
alias:
type: string
pattern: ^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+$
doc:
type: string
logical:
type: string
name:
type: string
optional:
type: boolean
GableSchemaContractField:
allOf:
- oneOf:
- $ref: '#/components/schemas/GableSchemaStruct'
- $ref: '#/components/schemas/GableSchemaNull'
- $ref: '#/components/schemas/GableSchemaBool'
- $ref: '#/components/schemas/GableSchemaInt'
- $ref: '#/components/schemas/GableSchemaFloat'
- $ref: '#/components/schemas/GableSchemaString'
- $ref: '#/components/schemas/GableSchemaBytes'
- $ref: '#/components/schemas/GableSchemaList'
- $ref: '#/components/schemas/GableSchemaMap'
- $ref: '#/components/schemas/GableSchemaEnum'
- $ref: '#/components/schemas/GableSchemaUnion'
- $ref: '#/components/schemas/GableSchemaAliasReference'
- $ref: '#/components/schemas/GableSchemaUnknown'
- type: object
properties:
name:
type: string
optional:
type: boolean
- type: object
properties:
constraints:
type: object
additionalProperties: true
ContractSpec:
type: object
required:
- id
- doc
- name
- namespace
- owner
- schema
properties:
id:
description: Unique identifier for the contract in UUID format
type: string
format: uuid
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
dataAssetResourceNameList:
type: array
items:
$ref: '#/components/schemas/DataAssetResourceName'
description: >-
Optional array of data asset resource names for contracts that apply
to multiple specific assets. When present, this takes precedence
over dataAssetResourceName.
doc:
description: Description of the contract
type: string
name:
description: >-
The name of the contract. When combined with the contract namespace,
it represents a unique name in the Gable platform. Only
alphanumeric characters (upper and lowercase) and underscores are
allowed
type: string
namespace:
description: >-
The namespace of the contract. When combined with the contract name,
it represents a unique name in the Gable platform. Only
alphanumeric characters (upper and lowercase) and underscores are
allowed
type: string
owner:
description: The owner of the contract
type: string
format: email
restrictPii:
description: If true, fields that look like PII will cause contract violations.
type: boolean
schema:
type: array
items:
$ref: '#/components/schemas/GableSchemaContractField'
ContractInput:
type: object
description: >-
The metadata and schema for the Contract that is sent to Gable to be
validated and uploaded. It may or may not contain a valid contract.
required:
- id
- status
- contractSpec
properties:
id:
description: Unique identifier for the contract in UUID format
type: string
format: uuid
parentRowId:
description: Unique identifier for a contract's parent row id in UUID format
type: string
format: uuid
version:
description: Version of the contract (semantic versioning)
type: string
status:
$ref: '#/components/schemas/ContractStatus'
gitHash:
description: >-
full length git hash corresponding to the commit this contract was
added/updated
type: string
minLength: 40
maxLength: 40
gitRepo:
description: full link to the git repo this contract lives in
type: string
format: uri
gitUser:
description: git user who added this contract
type: string
reviewers:
description: >-
optional list of users who reviewed the merged PR that this contract
added/updated in
type: array
items:
type: string
filePath:
description: path to the contract file from the root of the git repository
type: string
pattern: ^([^/]+\/)*[^/]+$
mergedAt:
description: >-
date time at which the PR that added/updated this contract was
merged
type: string
format: date-time
enforcementLevel:
description: alert level for contract
type: string
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
nullable: true
contractSpec:
description: >-
This is the possible contract specification. If it is valid, it
will match the contract specification schema. However, we have to
allow for invalid contracts to be passed to Gable even if we reject
them.
$ref: '#/components/schemas/ContractSpec'
additionalProperties: true
lastEditorUserId:
description: >-
Unique identifier for the user who last edited the contract through
the UI
type: string
format: uuid
nullable: true
lastEditorEmail:
description: Email of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorFirstName:
description: First name of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorLastName:
description: Last name of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorGithubHandle:
description: >-
GitHub handle of the user who last edited the contract through the
UI
type: string
nullable: true
PostContractRequest:
oneOf:
- $ref: '#/components/schemas/ContractInput'
- type: array
items:
$ref: '#/components/schemas/ContractInput'
CheckResponse:
type: object
required:
- success
- message
properties:
message:
type: string
success:
type: boolean
ChangelogEventBase:
type: object
properties:
id:
description: The unique identifier for the changelog event.
type: string
format: uuid
eventTitle:
description: The LLM-generated text of the changelog event.
type: string
timestamp:
description: The timestamp of the changelog event.
type: string
format: date-time
userId:
description: The unique identifier for the User who made a changelog event.
type: string
format: uuid
required:
- id
- entityName
- timestamp
ContractViolationType:
type: string
enum:
- MISSING_REQUIRED_PROPERTY
- INCOMPATIBLE_TYPE
- GREATER_THAN
- GREATER_THAN_OR_EQUAL_TO
- LESS_THAN
- LESS_THAN_OR_EQUAL_TO
- IS_NULL
- IS_NULL_THRESHOLD
- IS_NOT_EMPTY
- LENGTH
- LENGTH_GREATER_THAN
- LENGTH_GREATER_THAN_OR_EQUAL_TO
- LENGTH_LESS_THAN
- LENGTH_LESS_THAN_OR_EQUAL_TO
- MISSING_DATA_ASSET
- PII_DETECTED
ContractViolation:
type: object
properties:
contractId:
description: Unique identifier for the contract in UUID format
type: string
format: uuid
contractVersion:
description: Version of the contract
type: string
contractFieldName:
description: Field of the contract where violation occured
type: string
contractName:
description: Name of the contract
type: string
contractDomain:
description: Domain of the contract
type: string
dataAssetFieldProfileId:
description: Unique identifier for the data asset field in UUID format
type: string
format: uuid
entityType:
description: The type of entity that the changelog event is associated with.
type: string
enum:
- DATA_CONTRACT
eventType:
description: The type of event that occurred
type: string
enum:
- VIOLATION
violationType:
description: Type of violation
$ref: '#/components/schemas/ContractViolationType'
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
expectedValue:
description: Expected value of the field
type: string
actualValue:
description: actual value of the field
type: string
userId:
description: Unique identifier for the user in UUID format
type: string
format: uuid
prLink:
description: Link to the pull request associated with the violation
type: string
required:
- contractId
- contractVersion
- violationType
- dataAssetResourceName
- contractFieldName
- entityType
- expectedValue
- actualValue
ContractViolationEvent:
allOf:
- $ref: '#/components/schemas/ChangelogEventBase'
- $ref: '#/components/schemas/ContractViolation'
ContractOutput:
type: object
required:
- id
- status
- contractSpec
- contractSpecRaw
- createdAt
- updatedAt
- violations
properties:
id:
description: Unique identifier for the contract in UUID format
type: string
format: uuid
parentRowId:
description: Unique identifier for a contract's parent row id in UUID format
type: string
format: uuid
version:
description: Version of the contract (semantic versioning)
type: string
status:
$ref: '#/components/schemas/ContractStatus'
gitHash:
description: >-
full length git hash corresponding to the commit this contract was
added/updated
type: string
minLength: 40
maxLength: 40
gitRepo:
description: full link to the git repo this contract lives in
type: string
format: uri
gitUser:
description: git user who added/updated this contract
type: string
fileUri:
description: full link to the file in the repo that contains this contract
type: string
format: uri
filePath:
description: path to the contract file from the root of the git repository
type: string
reviewers:
description: >-
optional list of users who reviewed the merged PR that this contract
added/updated in
type: array
items:
type: string
mergedAt:
description: >-
date time at which the PR that added/updated this contract was
merged
type: string
format: date-time
createdAt:
description: date time at which the contract was created
type: string
format: date-time
updatedAt:
description: date time at which the contract was last updated
type: string
format: date-time
contractSpec:
description: contract spec
$ref: '#/components/schemas/ContractSpec'
contractSpecRaw:
description: contract spec raw json
type: string
enforcementLevel:
description: alert level for contract
type: string
default: INACTIVE
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
lastEditorUserId:
description: >-
Unique identifier for the user who last edited the contract through
the UI
type: string
format: uuid
nullable: true
lastEditorEmail:
description: Email of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorFirstName:
description: First name of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorLastName:
description: Last name of the user who last edited the contract through the UI
type: string
nullable: true
lastEditorGithubHandle:
description: >-
GitHub handle of the user who last edited the contract through the
UI
type: string
nullable: true
violations:
description: List of contract violations
type: array
items:
$ref: '#/components/schemas/ContractViolationEvent'
contractSpecFieldToViolationStatusMapping:
description: >-
Mapping of contract spec fields to a list of the violations
currently applicable to them
type: object
additionalProperties:
type: array
items:
$ref: '#/components/schemas/ContractViolationType'
PutContractStageRequest:
type: object
required:
- contractStage
properties:
contractStage:
type: string
enum:
- ACTIVE
- DEPRECATED
- DRAFT
- ARCHIVED
description: The new contract stage for the contract
PutContractStageResponse:
type: object
required:
- message
- contractId
properties:
message:
type: string
description: Success message or information about the operation
contractId:
type: string
format: uuid
description: The ID of the contract that was updated
ContractViolationCheckedResponse:
type: object
required:
- violation_state
properties:
violation_state:
type: string
enum:
- violation
- no_violation
violations:
type: array
items:
type: object
required:
- message
- field
- fieldType
- violationType
- expected
properties:
message:
type: string
field:
type: string
fieldType:
type: string
violationType:
$ref: '#/components/schemas/ContractViolationType'
expected:
type: string
actual:
type: string
checkedAt:
type: string
format: date-time
description: The datetime the violation check was performed
ContractViolationUncheckedResponse:
type: object
required:
- violation_state
properties:
violation_state:
type: string
enum:
- unchecked
GetContractViolationStatusResponse:
oneOf:
- $ref: '#/components/schemas/ContractViolationCheckedResponse'
- $ref: '#/components/schemas/ContractViolationUncheckedResponse'
discriminator:
propertyName: violation_state
mapping:
violation: '#/components/schemas/ContractViolationCheckedResponse'
no_violation: '#/components/schemas/ContractViolationCheckedResponse'
unchecked: '#/components/schemas/ContractViolationUncheckedResponse'
ContractOutputPaginated:
type: object
description: A paginated list of contracts with total count
required:
- contracts
- totalCount
properties:
contracts:
type: array
items:
$ref: '#/components/schemas/ContractOutput'
totalCount:
type: number
description: Total number of contracts matching the search criteria
DataCount:
type: object
properties:
count:
type: number
description: Total number of rows
required:
- count
PostContractResponse:
type: object
required:
- message
- contractIds
properties:
message:
type: string
contractIds:
type: array
description: >-
List of contract IDs that were updated, if no contracts were updated
this will be an empty list
items:
type: string
format: uuid
ContractActivityUpdateEvent:
type: object
required:
- type
- datetime
properties:
type:
description: type of the event
type: string
enum:
- CONTRACT_UPDATED
datetime:
description: date time at which the contract was updated
type: string
format: date-time
fileUri:
description: >-
full link to the file and commit in the repo that contains this
updated contract
type: string
format: uri
gitUser:
description: the git user who edited the contract
type: string
ContractActivityCreateEvent:
type: object
required:
- type
- datetime
properties:
type:
description: type of the event
type: string
enum:
- CONTRACT_CREATED
datetime:
description: date time at which the contract was created
type: string
format: date-time
fileUri:
description: >-
full link to the file and commit in the repo that contains this
created contract
type: string
format: uri
gitUser:
description: the git user who created the contract
type: string
ContractActivityResponse:
type: array
description: List of contract activity events in chronological order (oldest first)
minItems: 1
items:
oneOf:
- $ref: '#/components/schemas/ContractActivityUpdateEvent'
- $ref: '#/components/schemas/ContractActivityCreateEvent'
ContractSubscription:
type: object
required:
- id
- dataContractId
properties:
id:
type: string
format: uuid
description: The unique identifier of the subscription
dataContractId:
description: Unique identifier of the contract
type: string
format: uuid
userId:
type: string
format: uuid
description: The unique identifier of the user
email:
type: string
description: The email address of the subscriber if provided
pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
githubHandle:
type: string
description: The GitHub handle of the subscriber if provided
slackChannel:
type: string
description: The Slack channel where contract violations will be sent
UpdateContractSubscriptionRequest:
type: object
required:
- dataContractId
properties:
dataContractId:
description: Unique identifier of the contract
type: string
format: uuid
userId:
type: string
format: uuid
description: The unique identifier of the user
email:
type: string
description: The email address of the subscriber if provided
pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
githubHandle:
type: string
description: The GitHub handle for the subscriber if provided
slackChannel:
type: string
description: The Slack channel where contract violations will be sent
CreateContractSubscriptionRequest:
type: object
required:
- dataContractId
properties:
dataContractId:
description: Unique identifier of the contract
type: string
format: uuid
userId:
type: string
format: uuid
description: The unique identifier of the user
email:
type: string
description: The email address of the subscriber if provided
pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
githubHandle:
type: string
description: The GitHub handle of the subscriber
slackChannel:
type: string
description: The Slack channel where contract violations will be sent
GetContractSubscriptionsResponse:
type: array
items:
$ref: '#/components/schemas/ContractSubscription'
ContractCheckComplianceRequest:
type: object
required:
- contract
properties:
contract:
type: object
required:
- contractSchema
- dataAssetResourceName
properties:
contractSchema:
type: array
items:
$ref: '#/components/schemas/GableSchemaContractField'
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
ContractCheckComplianceResponse:
type: object
required:
- violations
properties:
violations:
type: array
items:
type: object
required:
- message
- field
- fieldType
- violationType
- expected
properties:
message:
type: string
field:
type: string
fieldType:
type: string
violationType:
$ref: '#/components/schemas/ContractViolationType'
expected:
type: string
actual:
type: string
BulkContractCheckComplianceRequest:
type: object
required:
- contract
properties:
contract:
type: object
required:
- contractSchema
- dataAssetResourceNames
properties:
contractSchema:
type: array
items:
$ref: '#/components/schemas/GableSchemaContractField'
dataAssetResourceNames:
type: array
items:
$ref: '#/components/schemas/DataAssetResourceName'
description: >-
Array of data asset resource names to check compliance against
the contract
BulkContractCheckComplianceResponse:
type: object
required:
- results
properties:
results:
type: object
description: Map of data asset resource names to their compliance check results
additionalProperties:
type: object
required:
- violations
properties:
violations:
type: array
items:
type: object
required:
- message
- field
- fieldType
- violationType
- expected
properties:
message:
type: string
field:
type: string
fieldType:
type: string
violationType:
$ref: '#/components/schemas/ContractViolationType'
expected:
type: string
actual:
type: string
ContractEnforcementLevel:
type: object
description: Represents an enforcement level associated with a contract.
required:
- id
- contractId
- enforcementLevel
- createdAt
- updatedAt
properties:
id:
description: >-
Unique identifier for the contract enforcement level row in UUID
format
type: string
format: uuid
contractId:
description: Unique identifier for the associated contract
type: string
format: uuid
createdAt:
description: Date and time at which the enforcement level was created
type: string
format: date-time
updatedAt:
description: Date and time at which the enforcement level was last updated
type: string
format: date-time
enforcementLevel:
description: alert level for contract
type: string
default: INACTIVE
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
x-enum-varnames:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
UpdateContractEnforcementLevelRequest:
type: object
description: Represents an enforcement level associated with a contract.
required:
- enforcementLevel
properties:
enforcementLevel:
type: string
description: The enforcement level for the contract
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
CreateContractEnforcementLevelRequest:
type: object
description: Represents an enforcement level associated with a contract.
required:
- contractId
- enforcementLevel
properties:
contractId:
description: Unique identifier for the associated contract
type: string
format: uuid
enforcementLevel:
type: string
description: The enforcement level for the contract
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
x-enum-varnames:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
DataAssetSearchResult:
DataAssetSearchResult: null
type: object
properties:
id:
type: string
format: uuid
description: The unique identifier for the data asset.
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
domain:
description: >-
The domain to which the data asset belongs. Previously referred to
as "namespace."
type: string
path:
description: >-
The name or path identifying the data asset. Previously referred to
as "name."
type: string
type:
$ref: '#/components/schemas/SourceType'
contractId:
description: The contract ID associated with the data asset.
type: string
updatedAt:
type: string
format: date-time
description: The timestamp of the most recent update to the data asset.
required:
- id
- dataAssetResourceName
- domain
- path
- type
- updatedAt
DataAssetSearchResultPaginated:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DataAssetSearchResult'
totalCount:
type: number
CreateOrUpdateDataAssetFieldRequest:
type: object
properties:
name:
type: string
description: The name of the field.
description:
type: string
description: A brief description of the field.
order:
type: integer
description: The order or position of the field in the data asset.
nativeDataType:
type: string
description: The native data type of the field in the source system.
type:
type: object
additionalProperties: true
description: >-
A custom or specific attribute to represent the Gable type of the
field.
parentFieldId:
type: string
format: uuid
description: For nested fields, this is the ID of the parent field.
changeSummary:
type: string
description: >-
A very brief LLM-generated summary of the changes made to the data
asset field.
changeDescription:
type: string
description: >-
A detailed LLM-generated description of the changes made to the data
asset field.
required:
- name
- nativeDataType
- type
DataAssetInput:
type: object
properties:
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
domain:
description: The domain or category to which the data asset belongs.
type: string
path:
description: The name or path identifying the data asset.
type: string
type:
$ref: '#/components/schemas/SourceType'
description:
type: string
description: A brief description of this particular version of the data asset.
rawSchema:
type: string
description: >-
The raw schema of the data asset from the source system. This can be
the contents of a schema file or data from the information schema
of a database. This is used to regenerate the schema of the data
asset if needed.
fields:
description: The fields of the data asset.
type: array
items:
$ref: '#/components/schemas/CreateOrUpdateDataAssetFieldRequest'
prLink:
description: Link to the PR that may have added or edited the data assets
type: string
example: https://github.com/fakeorg/fakerepo/pull/123
required:
- dataAssetResourceName
- domain
- path
- type
- fields
CreateOrUpdateDataAssetsRequest:
type: array
items:
$ref: '#/components/schemas/DataAssetInput'
DataAssetOutput:
type: object
required:
- id
- dataAssetResourceName
- versionId
- newVersionCreated
properties:
id:
description: ID of the created or updated data asset
type: string
format: uuid
versionId:
description: Version ID of the now current data asset
type: string
format: uuid
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
newVersionCreated:
description: Indicates whether a new version was created
type: boolean
CreateOrUpdateDataAssetsResponse:
type: array
items:
$ref: '#/components/schemas/DataAssetOutput'
DeleteDataAssetsRequest:
type: object
required:
- dataAssetsResourceNames
properties:
dataAssetsResourceNames:
type: array
items:
type: string
description: The unique identifiers of the data asset
DeleteDataAssetsResponse:
type: object
properties:
message:
type: string
description: Success message
GetDataAssetsByDarnsResponse:
type: array
items:
type: object
required:
- darn
- status
properties:
darn:
type: string
description: The Data Asset Resource Name that was requested
status:
type: string
enum:
- success
- not_found
- error
description: The status of fetching this particular asset
data:
$ref: '#/components/schemas/DataAssetSearchResult'
description: The asset data (only present when status is 'success')
errorMessage:
type: string
description: Error message (only present when status is 'error' or 'not_found')
GetDataAssetsByDarnsResponsePaginated:
type: object
properties:
data:
$ref: '#/components/schemas/GetDataAssetsByDarnsResponse'
totalCount:
type: integer
description: Total number of results available
limit:
type: integer
description: Maximum number of results per page
offset:
type: integer
description: Number of results skipped
required:
- data
- totalCount
- limit
- offset
CreateOrUpdateDataAssetRequest:
allOf:
- $ref: '#/components/schemas/DataAssetInput'
CreateOrUpdateDataAssetResponse:
allOf:
- $ref: '#/components/schemas/DataAssetOutput'
CheckDataAssetsRequest:
type: object
required:
- inputs
- responseType
properties:
inputs:
type: array
items:
type: object
required:
- sourceName
- sourceType
- schemaContents
properties:
sourceName:
type: string
sourceType:
$ref: '#/components/schemas/SourceType'
schemaContents:
type: string
realDbName:
type: string
realDbSchema:
type: string
includeUnchangedAssets:
description: >-
If true, the data assets sent that have not changed compared with
the stored assets will be checked for contract violations. If false,
the only data assets that have changed compared with the stored
assets will be checked for contract violations.
type: boolean
default: false
responseType:
description: >-
Determines the format of the response from the API. Specifying
'DETAILED' will return a detailed JSON object for each data asset
checked. If 'COMMENT_MARKDOWN' is specified, the response will be a
markdown string intended to be used as a comment in a pull request.
type: string
enum:
- DETAILED
- COMMENT_MARKDOWN
prLink:
description: >-
Link to the pull request the proposed changes to the data asset are
part of
type: string
CheckDataAssetNoContractResponse:
type: object
required:
- dataAssetNamespace
- dataAssetResourceName
- dataAssetPath
- responseType
properties:
dataAssetNamespace:
description: The namespace of the data asset
type: string
examples:
- postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432
- protobuf://github.com/org/repo/path/to/file.proto
dataAssetResourceName:
description: >-
The full resource name of the data asset, see [Data
Assets](https://docs.gable.ai/data\_assets\_and\_lineage/data\_assets)
$ref: '#/components/schemas/DataAssetResourceName'
examples:
- >-
postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432:serviceone.public.sales
- >-
protobuf://git@github.com/org/repo/path/to/file.proto:company.serviceone.Sales
dataAssetPath:
description: The relative path of the data asset within its data store
type: string
examples:
- serviceone.public.sales
- company.serviceone.Sales
responseType:
type: string
enum:
- NO_CONTRACT
CheckDataAssetNoChangeResponse:
type: object
required:
- dataAssetNamespace
- dataAssetResourceName
- dataAssetPath
- responseType
properties:
dataAssetNamespace:
description: The namespace of the data asset
type: string
examples:
- postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432
- protobuf://github.com/org/repo/path/to/file.proto
dataAssetResourceName:
description: >-
The full resource name of the data asset, see [Data
Assets](https://docs.gable.ai/data\_assets\_and\_lineage/data\_assets)
$ref: '#/components/schemas/DataAssetResourceName'
examples:
- >-
postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432:serviceone.public.sales
- >-
protobuf://git@github.com/org/repo/path/to/file.proto:company.serviceone.Sales
dataAssetPath:
description: The relative path of the data asset within its data store
type: string
examples:
- serviceone.public.sales
- company.serviceone.Sales
responseType:
type: string
enum:
- NO_CHANGE
CheckDataAssetDetailedResponse:
type: object
required:
- dataAssetNamespace
- dataAssetResourceName
- dataAssetPath
- contractId
- contractUrl
- contractNamespace
- contractName
- contractOwner
- subscribers
- responseType
properties:
dataAssetNamespace:
description: The namespace of the data asset
type: string
examples:
- postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432
- protobuf://github.com/org/repo/path/to/file.proto
dataAssetResourceName:
description: >-
The full resource name of the data asset, see [Data
Assets](https://docs.gable.ai/data\_assets\_and\_lineage/data\_assets)
$ref: '#/components/schemas/DataAssetResourceName'
examples:
- >-
postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432:serviceone.public.sales
- >-
protobuf://git@github.com/org/repo/path/to/file.proto:company.serviceone.Sales
dataAssetPath:
description: The relative path of the data asset within its data store
type: string
examples:
- serviceone.public.sales
- company.serviceone.Sales
contractId:
type: string
format: uuid
contractUrl:
description: Link to the contract in the Gable UI
type: string
contractNamespace:
type: string
contractName:
type: string
contractOwner:
type: string
contractOwnerGithubHandle:
type: string
violations:
type: array
items:
type: object
required:
- message
- field
- fieldType
- violationType
- expected
properties:
message:
type: string
field:
type: string
fieldType:
type: string
violationType:
$ref: '#/components/schemas/ContractViolationType'
expected:
type: string
actual:
type: string
subscribers:
type: array
items:
type: object
properties:
email:
type: string
githubHandle:
type: string
slackChannel:
type: string
responseType:
type: string
enum:
- DETAILED
enforcementLevel:
description: alert level for contract
default: INACTIVE
type: string
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
CheckDataAssetErrorResponse:
type: object
required:
- dataAssetNamespace
- message
- responseType
properties:
dataAssetNamespace:
description: The namespace of the data asset
type: string
examples:
- postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432
- protobuf://github.com/org/repo/path/to/file.proto
dataAssetResourceName:
description: >-
The full resource name of the data asset, see [Data
Assets](https://docs.gable.ai/data\_assets\_and\_lineage/data\_assets)
$ref: '#/components/schemas/DataAssetResourceName'
examples:
- >-
postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432:serviceone.public.sales
- >-
protobuf://git@github.com/org/repo/path/to/file.proto:company.serviceone.Sales
dataAssetPath:
description: The relative path of the data asset within its data store
type: string
examples:
- serviceone.public.sales
- company.serviceone.Sales
message:
description: The error message
type: string
responseType:
type: string
enum:
- ERROR
enforcementLevel:
description: notification tier of error response
type: string
enum:
- RECORD
- NOTIFY
- ALERT
- BLOCK
- INACTIVE
CheckDataAssetMissingAssetResponse:
type: object
required:
- dataAssetResourceName
- dataAssetPath
- contract
- contractOwner
- subscribers
- responseType
properties:
dataAssetResourceName:
description: >-
The full resource name of the data asset, see [Data
Assets](https://docs.gable.ai/data\_assets\_and\_lineage/data\_assets)
$ref: '#/components/schemas/DataAssetResourceName'
examples:
- >-
postgres://service-one.aaa.eu-west-1.rds.amazonaws.com:5432:serviceone.public.sales
- >-
protobuf://git@github.com/org/repo/path/to/file.proto:company.serviceone.Sales
dataAssetPath:
description: The relative path of the data asset within its data store
type: string
examples:
- serviceone.public.sales
- company.serviceone.Sales
contract:
$ref: '#/components/schemas/ContractOutput'
contractOwner:
type: string
contractOwnerGithubHandle:
type: string
subscribers:
type: array
items:
type: object
properties:
email:
type: string
githubHandle:
type: string
slackChannel:
type: string
responseType:
type: string
enum:
- MISSING_DATA_ASSET
CheckDataAssetResponse:
oneOf:
- $ref: '#/components/schemas/CheckDataAssetNoContractResponse'
- $ref: '#/components/schemas/CheckDataAssetNoChangeResponse'
- $ref: '#/components/schemas/CheckDataAssetDetailedResponse'
- $ref: '#/components/schemas/CheckDataAssetErrorResponse'
- $ref: '#/components/schemas/CheckDataAssetMissingAssetResponse'
discriminator:
propertyName: responseType
mapping:
NO_CONTRACT: '#/components/schemas/CheckDataAssetNoContractResponse'
NO_CHANGE: '#/components/schemas/CheckDataAssetNoChangeResponse'
DETAILED: '#/components/schemas/CheckDataAssetDetailedResponse'
ERROR: '#/components/schemas/CheckDataAssetErrorResponse'
MISSING_DATA_ASSET: '#/components/schemas/CheckDataAssetMissingAssetResponse'
CheckDataAssetCommentMarkdownResponse:
type: object
required:
- responseType
- shouldAlert
- shouldBlock
properties:
markdown:
type: string
shouldAlert:
description: >-
Whether or not to comment on the PR - true if at least one contract
with a contract violation has its enforcement level set to ALERT or
BLOCK.
type: boolean
shouldBlock:
description: >-
Whether or not to block the PR - true if at least one contract with
a contract violation has its enforcement level set to BLOCK.
type: boolean
errors:
type: array
items:
$ref: '#/components/schemas/CheckDataAssetErrorResponse'
responseType:
type: string
enum:
- COMMENT_MARKDOWN
CheckDataAssetsResponse:
oneOf:
- type: array
items:
$ref: '#/components/schemas/CheckDataAssetResponse'
- $ref: '#/components/schemas/CheckDataAssetCommentMarkdownResponse'
StructuredDataAssetResourceName:
type: object
properties:
source_type:
$ref: '#/components/schemas/SourceType'
data_source:
type: string
path:
type: string
required:
- source_type
- data_source
- path
S3SamplingParameters:
type: object
description: The parameters used to sample the data
required:
- rowSampleCount
properties:
rowSampleCount:
type: integer
description: Number of rows sampled per file
recentFileCount:
type: integer
description: Number of most recent files whose schemas are sampled per data asset
DataAssetFieldProfileBase:
type: object
description: generic data asset field profile
required:
- sampledRecordsCount
- nullable
- sampledFiles
- samplingParameters
properties:
id:
type: string
format: uuid
description: Unique identifier for the data asset field profile in UUID format
sampledRecordsCount:
type: integer
description: Number of samples
nullable:
type: boolean
description: Whether the data is nullable
nullCount:
type: integer
description: Number of nulls (only defined if nullable is true)
sampledFiles:
type: array
minItems: 1
items:
type: string
description: List of sampled files
sampledDate:
description: The date the sample was taken
type: string
format: date-time
samplingParameters:
$ref: '#/components/schemas/S3SamplingParameters'
DataAssetFieldProfileBoolean:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for boolean
required:
- profileType
- trueCount
- falseCount
properties:
profileType:
type: string
enum:
- boolean
trueCount:
type: integer
description: Number of true values
falseCount:
type: integer
description: Number of false values
DataAssetFieldProfileNumber:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for number
required:
- profileType
- uniqueCount
- min
- max
properties:
profileType:
type: string
enum:
- number
uniqueCount:
type: integer
description: Number of unique values
min:
type: number
description: Minimum value
max:
type: number
description: Maximum value
DataAssetFieldProfileOther:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for unspecified type
required:
- profileType
properties:
profileType:
type: string
enum:
- other
DataAssetFieldProfileString:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for string
required:
- profileType
- uniqueCount
- minLength
- maxLength
- emptyCount
properties:
profileType:
type: string
enum:
- string
uniqueCount:
type: integer
description: Number of unique values
minLength:
type: integer
description: Minimum length
maxLength:
type: integer
description: Maximum length
emptyCount:
type: integer
description: Number of empty values
DataAssetFieldProfileUUID:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for a UUID
required:
- profileType
- uniqueCount
- minLength
- maxLength
- emptyCount
properties:
profileType:
type: string
enum:
- uuid
uniqueCount:
type: integer
description: Number of unique values
minLength:
type: integer
description: Minimum length
maxLength:
type: integer
description: Maximum length
emptyCount:
type: integer
description: Number of empty values
format:
type: string
description: UUID format
uuidVersion:
type: integer
description: UUID version
DataAssetFieldProfileTemporal:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for temporal
required:
- profileType
- min
- max
- format
properties:
profileType:
type: string
enum:
- temporal
min:
type: string
format: date-time
description: Minimum value
max:
type: string
format: date-time
description: Maximum value
format:
type: string
description: Temporal format
DataAssetFieldProfile:
oneOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBoolean'
- $ref: '#/components/schemas/DataAssetFieldProfileNumber'
- $ref: '#/components/schemas/DataAssetFieldProfileOther'
- $ref: '#/components/schemas/DataAssetFieldProfileString'
- $ref: '#/components/schemas/DataAssetFieldProfileUUID'
- $ref: '#/components/schemas/DataAssetFieldProfileTemporal'
- $ref: '#/components/schemas/DataAssetFieldProfileUnion'
- $ref: '#/components/schemas/DataAssetFieldProfileList'
discriminator:
propertyName: profileType
mapping:
boolean: '#/components/schemas/DataAssetFieldProfileBoolean'
number: '#/components/schemas/DataAssetFieldProfileNumber'
other: '#/components/schemas/DataAssetFieldProfileOther'
string: '#/components/schemas/DataAssetFieldProfileString'
uuid: '#/components/schemas/DataAssetFieldProfileUUID'
temporal: '#/components/schemas/DataAssetFieldProfileTemporal'
union: '#/components/schemas/DataAssetFieldProfileUnion'
list: '#/components/schemas/DataAssetFieldProfileList'
DataAssetFieldProfileUnion:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for union
required:
- profileType
- profiles
properties:
profileType:
type: string
enum:
- union
profiles:
type: array
description: List of constituent data asset field profiles
items:
$ref: '#/components/schemas/DataAssetFieldProfile'
DataAssetFieldProfileList:
allOf:
- $ref: '#/components/schemas/DataAssetFieldProfileBase'
- type: object
description: Data asset field profile for string
required:
- profileType
- minLength
- maxLength
properties:
profileType:
type: string
enum:
- list
minLength:
type: integer
description: Minimum length
maxLength:
type: integer
description: Maximum length
DataAssetFieldsToProfilesMapping:
type: object
description: Mapping of a data asset's fields to their respective data profiles
additionalProperties:
$ref: '#/components/schemas/DataAssetFieldProfile'
ResolvedDataAsset:
type: object
properties:
source_type:
$ref: '#/components/schemas/SourceType'
data_asset_resource_name:
$ref: '#/components/schemas/StructuredDataAssetResourceName'
schema:
description: The schema of the data asset
$ref: '#/components/schemas/GableSchemaStruct'
fieldNameToDataAssetFieldProfileMap:
description: >-
A mapping of the field name within the schema to its corresponding
data profile
$ref: '#/components/schemas/DataAssetFieldsToProfilesMapping'
required:
- source_type
- data_asset_resource_name
- schema
DataAssetsCheckComplianceRequest:
type: object
properties:
assets:
description: Array of data assets to check compliance for
type: array
items:
$ref: '#/components/schemas/ResolvedDataAsset'
includeUnchangedAssets:
description: >-
If true, the data assets sent that have not changed compared with
the stored assets will be checked for contract violations. If false,
the only data assets that have changed compared with the stored
assets will be checked for contract violations.
type: boolean
default: false
responseType:
description: >-
Determines the format of the response from the API. Specifying
'DETAILED' will return a detailed JSON object for each data asset
checked. If 'COMMENT_MARKDOWN' is specified, the response will be a
markdown string intended to be used as a comment in a pull request.
type: string
enum:
- DETAILED
- COMMENT_MARKDOWN
prLink:
description: >-
(optional) Link to the pull request the proposed changes to the data
asset are part of
type: string
required:
- assets
- responseType
S3Asset:
type: object
properties:
schema:
description: The schema of the data asset
$ref: '#/components/schemas/GableSchemaStruct'
pattern:
description: The pattern of the data asset
type: string
bucket:
description: The bucket of the data asset
type: string
fieldNameToDataAssetFieldProfileMap:
description: >-
A mapping of the field name within the recap struct schema to its
corresponding data profile
$ref: '#/components/schemas/DataAssetFieldsToProfilesMapping'
required:
- schema
- pattern
- bucket
CheckComplianceDataAssetsS3Request:
type: object
required:
- assets
- responseType
properties:
assets:
description: Array of data assets to check for compliance
type: array
items:
$ref: '#/components/schemas/S3Asset'
includeUnchangedAssets:
description: >-
If true, the data assets sent that have not changed compared with
the stored assets will be checked for contract violations and
responseType: NO_CHANGE will be returned for those assets. If false,
the only data assets that have changed compared with the stored
assets will be checked for contract violations.
type: boolean
default: false
responseType:
description: >-
Determines the format of the response from the API. Specifying
'DETAILED' will return a detailed JSON object for each data asset
checked. If 'COMMENT_MARKDOWN' is specified, the response will be a
markdown string intended to be used as a comment in a pull request.
type: string
enum:
- DETAILED
- COMMENT_MARKDOWN
prLink:
description: >-
Link to the pull request the proposed changes to the data asset are
part of
type: string
IngestDataAssetRequest:
type: object
properties:
sourceType:
$ref: '#/components/schemas/SourceType'
sourceNames:
description: The names of the sources
type: array
items:
type: string
databaseSchema:
description: The name of the database schema
type: string
schema:
description: >-
Array of schemas. Each schema could be from a db information schema
or the contents of a schema file.
type: array
items:
type: string
dryRun:
description: If true, no data asset will be registered
type: boolean
default: false
prLink:
description: Link to the PR that may have added or edited the data assets
type: string
example: https://github.com/fakeorg/fakerepo/pull/123
required:
- sourceType
- sourceNames
- databaseSchema
- schema
IngestDataAssetResponse:
type: object
properties:
message:
description: Response message
type: string
registered:
description: List of the registered data asset ids
type: array
items:
type: string
success:
description: Whether the request was successful
type: boolean
required:
- message
- registered
- success
ErrorResponseDeprecated:
type: object
required:
- message
properties:
id:
type: number
title:
type: string
message:
type: string
success:
type: boolean
RegisterDataAssetsRequest:
type: object
properties:
assets:
description: Array of data assets to register
type: array
items:
$ref: '#/components/schemas/ResolvedDataAsset'
prLink:
description: Link to the PR that may have added or edited the data assets
type: string
example: https://github.com/fakeorg/fakerepo/pull/123
required:
- assets
RegisterDataAssetsResponse:
type: object
properties:
asset_registration_outcomes:
type: array
items:
type: object
properties:
data_asset_resource_name:
$ref: '#/components/schemas/StructuredDataAssetResourceName'
error:
type: string
description: Error message if registration of this asset failed
required:
- data_asset_resource_name
required:
- asset_registration_outcomes
RegisterDataAssetS3Request:
type: object
properties:
assets:
description: Array of data assets to register
type: array
items:
$ref: '#/components/schemas/S3Asset'
dry_run:
description: If true, no data asset will be registered
type: boolean
default: false
prLink:
description: Link to the PR that may have added or edited the data assets
type: string
nullable: true
example: https://github.com/fakeorg/fakerepo/pull/123
required:
- assets
PiiCategoryEnum:
type: string
enum:
- phone
- email
- credit_card
- address
- person
- birth_date
- gender
- nationality
- ssn
- zip_code
- po_box
- user_name
- password
- religion
- sexual_orientation
- drivers_license
- passport
- birth_certificate
- medicare
- concession_card
- fingerprint
- face_scan
- bank_details
- contact_details
- tax_file_number
description: type of pii detected in the column name
nullable: true
DataAssetField:
type: object
properties:
id:
type: string
format: uuid
description: The unique identifier for the data asset field.
dataAssetVersionId:
type: string
format: uuid
description: The identifier of the data asset version this field belongs to.
name:
type: string
description: The name of the field.
description:
type: string
description: A brief description of the field.
order:
type: integer
description: The order or position of the field in the data asset.
nativeDataType:
type: string
description: The native data type of the field in the source system.
type:
type: object
additionalProperties: true
description: >-
A custom or specific attribute to represent the Gable type of the
field.
displayType:
type: string
description: The display name of the field.
parentFieldId:
type: string
format: uuid
description: For nested fields, this is the ID of the parent field.
createdAt:
type: string
format: date-time
description: The timestamp when the field was created.
updatedAt:
type: string
format: date-time
description: The timestamp when the field was last updated.
deletedAt:
type: string
format: date-time
description: The timestamp when the field was marked as deleted.
piiCategory:
$ref: '#/components/schemas/PiiCategoryEnum'
profile:
$ref: '#/components/schemas/DataAssetFieldProfile'
required:
- id
- dataAssetVersionId
- name
- nativeDataType
- displayType
- createdAt
- updatedAt
- type
DataAssetVersion:
type: object
properties:
id:
type: string
format: uuid
description: The unique identifier for the version of the data asset.
dataAssetId:
type: string
format: uuid
description: >-
The identifier of the parent data asset to which this version
belongs.
description:
type: string
description: A brief description of this particular version of the data asset.
rawSchema:
type: string
description: >-
The raw schema of the data asset from the source system. This can be
the contents of a schema file or data from the information schema
of a database. This is used to regenerate the schema of the data
asset if needed.
fields:
description: The fields of the data asset.
type: array
items:
$ref: '#/components/schemas/DataAssetField'
createdAt:
type: string
format: date-time
description: The timestamp when this version of the data asset was created.
updatedAt:
type: string
format: date-time
description: The timestamp when this version of the data asset was last updated.
deletedAt:
type: string
format: date-time
description: >-
The timestamp when this version of the data asset was marked as
deleted, if applicable.
violations:
description: List of contract violations associated with the data asset version.
type: array
items:
$ref: '#/components/schemas/ContractViolation'
required:
- id
- dataAssetId
- fields
- createdAt
- updatedAt
- violations
DataAsset:
type: object
properties:
id:
type: string
format: uuid
description: The unique identifier for the data asset.
dataAssetResourceName:
$ref: '#/components/schemas/DataAssetResourceName'
domain:
description: >-
The domain to which the data asset belongs. Previously referred to
as "namespace."
type: string
path:
description: >-
The name or path identifying the data asset. Previously referred to
as "name."
type: string
type:
$ref: '#/components/schemas/SourceType'
contractId:
description: The contract ID associated with the data asset.
type: string
versionDetail:
description: The version details of the data asset.
$ref: '#/components/schemas/DataAssetVersion'
createdAt:
type: string
format: date-time
description: The timestamp of when the data asset was initially created.
updatedAt:
type: string
format: date-time
description: The timestamp of the most recent update to the data asset.
deletedAt:
type: string
format: date-time
description: >-
The timestamp indicating when the data asset was deleted, if
applicable.
required:
- id
- dataAssetResourceName
- domain
- path
- type
- versionDetail
- createdAt
- updatedAt
InferContractFromDataAssetResponse:
type: object
required:
- contractId
- contractSpec
- contractSpecRaw
properties:
contractId:
description: Unique identifier for the contract in UUID format
type: string
format: uuid
version:
description: Version of the contract (semantic versioning)
type: string
status:
description: status of the contract
type: string
enum:
- ACTIVE
- DEPRECATED
gitHash:
description: >-
full length git hash corresponding to the commit this contract was
added/updated
type: string
minLength: 40
maxLength: 40
gitRepo:
description: full link to the git repo this contract lives in
type: string
format: uri
gitUser:
description: git user who added/updated this contract
type: string
fileUri:
description: full link to the file in the repo that contains this contract
type: string
format: uri
reviewers:
description: >-
optional list of users who reviewed the merged PR that this contract
added/updated in
type: array
items:
type: string
mergedAt:
description: >-
date time at which the PR that added/updated this contract was
merged
type: string
format: date-time
createdAt:
description: date time at which the contract was created
type: string
format: date-time
updatedAt:
description: date time at which the contract was last updated
type: string
format: date-time
contractSpec:
description: contract spec
$ref: '#/components/schemas/ContractSpec'
contractSpecRaw:
description: contract spec raw json
type: string
CreateDataAssetProfileRequest:
type: object
properties:
darn:
description: the Data Asset Resource Name (DARN) of the data asset
type: string
data_asset_id:
type: string
format: uuid
description: ID for the data asset
fieldsToProfilesMapping:
description: >-
The mapping of data asset fields to data asset field profiles
associated with the data asset
$ref: '#/components/schemas/DataAssetFieldsToProfilesMapping'
required:
- darn
- data_asset_id
- fieldsToProfilesMapping
CreateDataAssetProfileResponse:
type: object
required:
- fieldsToProfilesMapping
properties:
fieldsToProfilesMapping:
$ref: '#/components/schemas/DataAssetFieldsToProfilesMapping'
GetApiKeysResponse:
type: array
items:
type: object
properties:
id:
description: The identifier of the API key
type: string
name:
description: The name of the API key
type: string
value:
description: The value of the API key
type: string
GetSsoSamlSetupDetailsResponse:
type: object
required:
- ssoUrl
- audienceUri
properties:
ssoUrl:
description: >-
The location where the SAML assertion is sent with a HTTP POST, also
referred to as the SAML Assertion Consumer Service (ACS) URL.
type: string
audienceUri:
description: >-
(SP Entity Id) The application-defined unique identifier that is the
intended audience of the SAML assertion. This is most often the SP
Entity ID of your application.
type: string
SsoSamlUrlConfig:
type: object
required:
- type
- identityProvider
- metadataDocumentEndpointUrl
properties:
type:
description: The type of SSO integration, currently only SAML is supported.
type: string
enum:
- SAML
identityProvider:
description: >
The name of your identity provider. This value will be displayed to
users when they log in.
Note: This value cannot be the strings "Google" or "SAML" as they're reserved words in our identity management platform. type: string examples: - Okta - GoogleWorkspace - OneLogin - JumpCloud pattern: ^(?=[a-zA-Z0-9\(\)\.\-!@]+$)(?!Google|SAML$).*$ metadataDocumentEndpointUrl: description: >- The URL of the SAML metadata document. Either this or metadataFileContents must be provided. example: https://company.okta.com/app/123456789/sso/saml/metadata type: string SsoSamlFileConfig: type: object required: - type - identityProvider - metadataFileContents properties: type: description: The type of SSO integration, currently only SAML is supported. type: string enum: - SAML identityProvider: description: > The name of your identity provider. This value will be displayed to users when they log in.
Note: This value cannot be the strings "Google" or "SAML" as they're reserved words in our identity management platform. type: string examples: - Okta - GoogleWorkspace - OneLogin - JumpCloud pattern: ^(?=[a-zA-Z0-9\(\)\.\-!@]+$)(?!Google|SAML$).*$ metadataFileContents: description: >- The contents of the metadata document. Either this or metadataDocumentEndpointUrl must be provided. type: string SsoConfig: oneOf: - $ref: '#/components/schemas/SsoSamlUrlConfig' - $ref: '#/components/schemas/SsoSamlFileConfig' GetUserRequest: type: object required: - email properties: email: type: string description: The email address of the user, which is the primary ID in Gable pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ UserStatus: type: string enum: - ACTIVE - INVITED - DELETED description: | User status:
\* `active` - User accepted invitation and is active \* `invited` - The invitation is sent to the user \* `deleted` - The user has been deleted UserRole: type: string enum: - ADMIN - EDITOR - VIEWER User: type: object required: - email - status - role properties: email: type: string description: The email address of the user pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ firstName: type: string description: The first name of the user, if available lastName: type: string description: The last name of the user, if available githubHandle: type: string description: The GitHub handle of the user or team, if available status: $ref: '#/components/schemas/UserStatus' description: The status of the user role: $ref: '#/components/schemas/UserRole' description: The role of the user UpdateUserRequest: type: object required: - email properties: email: type: string description: The email address of the user, which is the primary ID in Gable pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ firstName: type: string description: The first name of the user lastName: type: string description: The last name of the user githubHandle: type: string description: The GitHub handle of the user pattern: ^[a-zA-Z0-9-]*$ role: $ref: '#/components/schemas/UserRole' description: The role of the user UpdateUserResponse: type: object required: - email - role properties: email: type: string description: The email address of the user, which is the primary ID in Gable pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ firstName: type: string description: The first name of the user lastName: type: string description: The last name of the user githubHandle: type: string description: The GitHub handle of the user role: $ref: '#/components/schemas/UserRole' description: The role of the user GetUsersResponse: type: array items: $ref: '#/components/schemas/User' InviteUserRequest: type: object required: - email properties: email: type: string description: The email address of the user, which is the primary ID in Gable pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ firstName: type: string description: The first name of the user lastName: type: string description: The last name of the user resendInvite: type: boolean description: The flag which determines whether the invitation should be resent role: $ref: '#/components/schemas/UserRole' description: The role of the user DeleteUserRequest: type: object required: - email properties: email: type: string description: The email address of the user, which is the primary ID in Gable pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ ChangelogEventType: type: string enum: - CREATED - MODIFIED - DELETED - VIOLATION - ENABLED - DISABLED AssetCreatedEvent: allOf: - $ref: '#/components/schemas/ChangelogEventBase' - type: object properties: entityType: description: The type of entity that the changelog event is associated with. type: string enum: - DATA_ASSET dataAssetResourceName: $ref: '#/components/schemas/DataAssetResourceName' eventType: $ref: '#/components/schemas/ChangelogEventType' prLink: type: string description: Link to the pull request associated with the asset modification. example: https://github.com/fakeorg/fakerepo/pull/1 piiDetected: type: object additionalProperties: true description: A mapping of the fieldname to the pii_category. required: - entityType - dataAssetResourceName - eventType AssetDeletedEvent: allOf: - $ref: '#/components/schemas/AssetCreatedEvent' FieldAddedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - FIELD_ADDED diff: description: Details of the modified field. type: object properties: fieldName: description: The name of the field being added. type: string type: description: The type of the field being added. type: string required: - fieldName - type required: - eventType - diff FieldModifiedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - FIELD_MODIFIED diff: description: Details of the modified field. type: object properties: fieldName: description: The name of the field being modified. type: string attributeName: description: The name of the attribute being modified. type: string enum: - PRECISION_BITS - SIGNED - TYPE - LOGICAL_TYPE - ENUM_VALUES - NULLABLE - STRUCTURAL - BYTES - VARIABLE - SCALE - PRECISION - UNIT - TIMEZONE - VALUE - SEMANTIC - DOC previousValue: description: The type of the field before the change. type: string newValue: description: The type of the field after the change. type: string summary: description: A very brief summary of the change for the field. type: string description: description: A detailed description of the change. type: string required: - fieldName - attributeName - previousValue - newValue required: - eventType - diff FieldDeletedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - FIELD_DELETED diff: description: Details of the modified field. type: object properties: fieldName: description: The name of the field being deleted. type: string type: description: The type of the field being deleted. type: string required: - fieldName - type required: - eventType - diff AssetModifiedEvent: allOf: - $ref: '#/components/schemas/AssetCreatedEvent' - type: object properties: modifications: type: array description: >- List of changelog modifications in chronological order (newest first) items: oneOf: - $ref: '#/components/schemas/FieldAddedEvent' - $ref: '#/components/schemas/FieldModifiedEvent' - $ref: '#/components/schemas/FieldDeletedEvent' piiDetected: type: object additionalProperties: true description: A mapping of the fieldname to the pii_category. required: - modifications ContractCreatedEvent: allOf: - $ref: '#/components/schemas/ChangelogEventBase' - type: object properties: entityType: description: The type of entity that the changelog event is associated with. type: string enum: - DATA_CONTRACT eventType: $ref: '#/components/schemas/ChangelogEventType' contractId: description: The unique identifier for the contract. type: string format: uuid contractName: description: The name of the contract. type: string contractDomain: description: The domain of the contract. type: string required: - contractId - entityType - eventType ContractModifiedEvent: allOf: - $ref: '#/components/schemas/ContractCreatedEvent' - type: object properties: modifications: type: array description: >- List of changelog modifications in chronological order (newest first) items: oneOf: - $ref: '#/components/schemas/FieldAddedEvent' - $ref: '#/components/schemas/FieldModifiedEvent' - $ref: '#/components/schemas/FieldDeletedEvent' required: - modifications ContractDeleted: type: object properties: contractId: description: Unique identifier for the contract in UUID format type: string format: uuid entityType: description: The type of entity that the changelog event is associated with. type: string enum: - DATA_CONTRACT eventType: description: The type of event that occurred type: string enum: - DELETED userId: description: Unique identifier for the user in UUID format type: string format: uuid contractName: description: Name of the contract type: string contractDomain: description: Domain/namespace of the contract type: string required: - contractId - entityType - eventType - contractName - contractDomain ContractDeletedEvent: allOf: - $ref: '#/components/schemas/ChangelogEventBase' - $ref: '#/components/schemas/ContractDeleted' ActionCreatedEvent: allOf: - $ref: '#/components/schemas/ChangelogEventBase' - type: object properties: entityType: description: The type of entity that the changelog event is associated with. type: string enum: - ACTION eventType: $ref: '#/components/schemas/ChangelogEventType' actionId: description: The unique identifier for the action. type: string format: uuid actionName: description: The name of the action. type: string required: - actionId - actionName - entityType - eventType ActionDeletedEvent: allOf: - $ref: '#/components/schemas/ActionCreatedEvent' ActionEnabledEvent: allOf: - $ref: '#/components/schemas/ActionCreatedEvent' ActionDisabledEvent: allOf: - $ref: '#/components/schemas/ActionCreatedEvent' ActionTriggerType: type: string description: The type of the action trigger. enum: - source - source_type - event_name - namespace TriggerAddedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - TRIGGER_ADDED diff: description: Details of the modified trigger. type: object properties: triggerName: description: The name of the trigger being added. type: string type: description: The type of the trigger being added. $ref: '#/components/schemas/ActionTriggerType' required: - triggerName - type required: - eventType - diff TriggerDeletedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - TRIGGER_DELETED diff: description: Details of the modified trigger. type: object properties: triggerName: description: The name of the trigger being deleted. type: string type: description: The type of the trigger being deleted. $ref: '#/components/schemas/ActionTriggerType' required: - triggerName - type required: - eventType - diff ActionDestinationType: type: string description: The type of the action destination (e.g. email, slack, etc.). enum: - slack - email - webhook DestinationAddedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - DESTINATION_ADDED diff: description: Details of the modified destination. type: object properties: destinationName: description: The name of the destination being added. type: string type: description: The type of the destination being added. $ref: '#/components/schemas/ActionDestinationType' required: - destinationName - type required: - eventType - diff DestinationDeletedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - DESTINATION_DELETED diff: description: Details of the modified destination. type: object properties: destinationName: description: The name of the destination being deleted. type: string type: description: The type of the destination being deleted. $ref: '#/components/schemas/ActionDestinationType' required: - destinationName - type required: - eventType - diff DestinationModifiedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - DESTINATION_MODIFIED diff: description: Details of the modified destination. type: object properties: type: description: The type of the destination being modified. $ref: '#/components/schemas/ActionDestinationType' previousValues: description: Names of the destination before the change. type: array items: type: string newValues: description: Names of the destination after the change. type: array items: type: string summary: description: A very brief summary of the change for the destination. type: string description: description: A detailed description of the change. type: string required: - type - previousValue - newValue required: - eventType - diff ActionRenamedEvent: type: object properties: eventType: type: string description: The type of event that occurred. enum: - ACTION_RENAMED diff: description: Details of the modified action. type: object properties: previousValue: description: The name of the action before the change. type: string newValue: description: The name of the action after the change. type: string required: - previousValue - newValue required: - eventType - diff ActionModifiedEvent: allOf: - $ref: '#/components/schemas/ActionCreatedEvent' - type: object properties: modifications: type: array description: >- List of changelog modifications in chronological order (newest first) items: oneOf: - $ref: '#/components/schemas/TriggerAddedEvent' - $ref: '#/components/schemas/TriggerDeletedEvent' - $ref: '#/components/schemas/DestinationAddedEvent' - $ref: '#/components/schemas/DestinationDeletedEvent' - $ref: '#/components/schemas/DestinationModifiedEvent' - $ref: '#/components/schemas/ActionRenamedEvent' required: - modifications GetChangelogResponse: type: object properties: changelogEvents: type: array description: List of changelog events in chronological order (oldest first) items: oneOf: - $ref: '#/components/schemas/AssetCreatedEvent' - $ref: '#/components/schemas/AssetDeletedEvent' - $ref: '#/components/schemas/AssetModifiedEvent' - $ref: '#/components/schemas/ContractCreatedEvent' - $ref: '#/components/schemas/ContractModifiedEvent' - $ref: '#/components/schemas/ContractViolationEvent' - $ref: '#/components/schemas/ContractDeletedEvent' - $ref: '#/components/schemas/ActionCreatedEvent' - $ref: '#/components/schemas/ActionDeletedEvent' - $ref: '#/components/schemas/ActionEnabledEvent' - $ref: '#/components/schemas/ActionDisabledEvent' - $ref: '#/components/schemas/ActionModifiedEvent' required: - changelogEvents ChangelogResponsePaginated: type: object properties: data: $ref: '#/components/schemas/GetChangelogResponse' totalCount: type: number ChangelogEventInput: oneOf: - $ref: '#/components/schemas/ContractViolation' CreateChangelogEventRequest: oneOf: - $ref: '#/components/schemas/ChangelogEventInput' - type: array items: $ref: '#/components/schemas/ChangelogEventInput' CreateChangelogEventResponse: type: object required: - changelogEventIds properties: changelogEventIds: type: array description: List of changelog event IDs that were create items: type: string format: uuid GetChangelogFiltersResponse: type: object properties: domains: type: array description: Domains list items: type: object properties: value: type: string type: $ref: '#/components/schemas/SourceType' required: - value - type types: type: array description: Types list items: $ref: '#/components/schemas/SourceType' required: - domains - types GetConfigResponse: type: object required: - config_type - version - config_value - created_at - project_root - namespace properties: config_type: description: Type of configuration type: string language: description: Programming language associated with the config (optional) type: string nullable: true repo: description: Repository associated with the config (optional) type: string nullable: true project_root: description: Project root directory (optional) type: string version: description: Version of the configuration type: string config_value: description: Configuration value as JSON type: object additionalProperties: type: string namespace: description: Namespace (qa/sandbox/prod) of config type: string created_at: description: Date time at which the config was created type: string format: date-time PostConfigRequest: type: object required: - config_type - version - config_value - created_at - project_root properties: config_type: description: Type of configuration type: string language: description: Programming language associated with the config (optional) type: string nullable: true repo: description: Repository associated with the config (optional) type: string nullable: true project_root: description: Project root directory (optional) type: string version: description: Version of the configuration type: string config_value: description: Configuration value as JSON type: object additionalProperties: type: string namespace: description: Namespace (qa/sandbox/prod) of config (optional, default to qa) type: string created_at: description: Date time at which the config was created type: string format: date-time PostConfigResponse: type: object required: - message - configIds properties: message: type: string configIds: type: array description: >- List of config IDs that were updated, if no configs were updated this will be an empty list items: type: string format: uuid GetSlackChannelsResponse: type: object properties: channels: type: array items: type: object properties: id: description: The channel id type: string name: description: The channel name type: string workspaceName: type: string description: Slack workspace name; Slack Client not valid if missing required: - channels GetSlackInstallResponse: type: object properties: slackInstallUrl: type: string description: URL to install Slack Client required: - slackInstallUrl PostTestSlackMessageRequest: type: object properties: channelId: type: string description: The slack channel id name to which the test message will be sent required: - channelId PostTestSlackMessageResponse: type: object properties: message: type: string description: Message that indicates successful action Webhook: type: object properties: id: description: Endpoint id type: string url: description: Endpoint url type: string name: description: Endpoint name type: string secret: description: Endpoint secret type: string headers: type: object description: A map of headers additionalProperties: type: string description: A string header value required: - id - url - name - secret GetWebhooksResponse: type: object properties: webhooks: type: array items: $ref: '#/components/schemas/Webhook' required: - webhooks CreateWebhookRequest: type: object properties: url: type: string description: The URL that the webhooks will be sent to name: type: string description: The webhook name headers: type: object description: A map of headers additionalProperties: type: string description: A string header value required: - url - name CreateWebhookResponse: type: object properties: id: type: string description: The id of a created webhook url: type: string description: The url of a created webhook name: type: string description: The name of a created webhook headers: type: object description: A map of headers additionalProperties: type: string description: A string header value required: - id - url - name PostTestWebhookMessageRequest: type: object properties: eventType: type: string description: The webhook event type to which the test message will be sent required: - eventType PostTestWebhookMessageResponse: type: object properties: messageId: type: string description: The message id required: - messageId GetNotificationsResponse: type: object required: - notifications properties: notifications: type: array items: type: object required: - id - changeLogEventId - actionId - actionDetails - status - createdAt - retryCount - actionName properties: id: type: string description: The unique identifier of the created notification changeLogEventId: type: string description: >- The unique identifier of the change log event associated with the notification actionId: type: string description: >- The unique identifier of the action associated with the notification actionDetails: type: object description: >- Additional details about the action associated with the notification additionalProperties: true status: type: string description: >- The current status of the notification (e.g., "PENDING", "SENT", "FAILED") enum: - PENDING - SENT - FAILED createdAt: type: string description: The timestamp when the notification was created format: date-time updatedAt: type: string description: The timestamp when the notification was last updated format: date-time retryCount: type: integer description: The number of times the notification has been retried minimum: 0 actionName: type: string description: The name of the actions associated with the notification userName: type: string description: The name of the user who created the action NumberConstraintEnum: type: string enum: - greaterThan - greaterThanOrEqualTo - lessThan - lessThanOrEqualTo - isNull - isNullThreshold TimeConstraints: type: object required: - type - constraints properties: type: type: string enum: - time constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' FloatConstraints: type: object required: - type - constraints properties: type: type: string enum: - float constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' IntegerConstraints: type: object required: - type - constraints properties: type: type: string enum: - integer constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' LengthConstraintEnum: type: string enum: - length - isNotEmpty - isNull - isNullThreshold ListConstraints: type: object required: - type - constraints properties: type: type: string enum: - list constraints: type: array items: $ref: '#/components/schemas/LengthConstraintEnum' MapConstraints: type: object required: - type - constraints properties: type: type: string enum: - map constraints: type: array items: $ref: '#/components/schemas/LengthConstraintEnum' StringConstraintEnum: type: string enum: - charLength - isNotEmpty - isNull - isNullThreshold StringConstraints: type: object required: - type - constraints properties: type: type: string enum: - string constraints: type: array items: $ref: '#/components/schemas/StringConstraintEnum' UUIDConstraints: type: object required: - type - constraints properties: type: type: string enum: - uuid constraints: type: array items: $ref: '#/components/schemas/StringConstraintEnum' OtherConstraintEnum: type: string enum: - isNull - isNullThreshold BooleanConstraints: type: object required: - type - constraints properties: type: type: string enum: - boolean constraints: type: array items: $ref: '#/components/schemas/OtherConstraintEnum' OtherConstraints: type: object required: - type - constraints properties: type: type: string enum: - other constraints: type: array items: $ref: '#/components/schemas/OtherConstraintEnum' RecapTypeConstraintCategory: type: string enum: - NUMBER - TIME - STRING - BYTES - DATA_STRUCTURE - OTHER RecapConstraints: type: object required: - type - constraints properties: type: type: string enum: - recap constraints: type: array items: $ref: '#/components/schemas/RecapTypeConstraintCategory' ContractConstraintType: type: string enum: - greaterThan - greaterThanOrEqualTo - lessThan - lessThanOrEqualTo - isNull - isNullThreshold - charLength - isNotEmpty - length x-enum-varnames: - GREATER_THAN - GREATER_THAN_OR_EQUAL_TO - LESS_THAN - LESS_THAN_OR_EQUAL_TO - IS_NULL - IS_NULL_THRESHOLD - CHARACTER_LENGTH - IS_NOT_EMPTY - LENGTH SupportedContractConstraints: type: object required: - type - constraints properties: type: type: string enum: - contract constraints: type: array items: $ref: '#/components/schemas/ContractConstraintType' ContractConstraint: type: object oneOf: - $ref: '#/components/schemas/TimeConstraints' - $ref: '#/components/schemas/FloatConstraints' - $ref: '#/components/schemas/IntegerConstraints' - $ref: '#/components/schemas/ListConstraints' - $ref: '#/components/schemas/MapConstraints' - $ref: '#/components/schemas/StringConstraints' - $ref: '#/components/schemas/UUIDConstraints' - $ref: '#/components/schemas/BooleanConstraints' - $ref: '#/components/schemas/OtherConstraints' - $ref: '#/components/schemas/RecapConstraints' - $ref: '#/components/schemas/SupportedContractConstraints' discriminator: propertyName: type mapping: time: '#/components/schemas/TimeConstraints' float: '#/components/schemas/FloatConstraints' integer: '#/components/schemas/IntegerConstraints' list: '#/components/schemas/ListConstraints' map: '#/components/schemas/MapConstraints' string: '#/components/schemas/StringConstraints' uuid: '#/components/schemas/UUIDConstraints' boolean: '#/components/schemas/BooleanConstraints' other: '#/components/schemas/OtherConstraints' recap: '#/components/schemas/RecapConstraints' contract: '#/components/schemas/SupportedContractConstraints' ContractConstraintMapping: type: object description: >- Mapping of contract constraint types to their respective recap type constraint categories and detailed constraint definitions additionalProperties: $ref: '#/components/schemas/ContractConstraint' components: schemas: ContractConstraint: type: object oneOf: - $ref: '#/components/schemas/TimeConstraints' - $ref: '#/components/schemas/FloatConstraints' - $ref: '#/components/schemas/IntegerConstraints' - $ref: '#/components/schemas/ListConstraints' - $ref: '#/components/schemas/MapConstraints' - $ref: '#/components/schemas/StringConstraints' - $ref: '#/components/schemas/UUIDConstraints' - $ref: '#/components/schemas/BooleanConstraints' - $ref: '#/components/schemas/OtherConstraints' - $ref: '#/components/schemas/RecapConstraints' - $ref: '#/components/schemas/SupportedContractConstraints' discriminator: propertyName: type mapping: time: '#/components/schemas/TimeConstraints' float: '#/components/schemas/FloatConstraints' integer: '#/components/schemas/IntegerConstraints' list: '#/components/schemas/ListConstraints' map: '#/components/schemas/MapConstraints' string: '#/components/schemas/StringConstraints' uuid: '#/components/schemas/UUIDConstraints' boolean: '#/components/schemas/BooleanConstraints' other: '#/components/schemas/OtherConstraints' recap: '#/components/schemas/RecapConstraints' contract: '#/components/schemas/SupportedContractConstraints' LengthConstraintEnum: type: string enum: - length - isNotEmpty - isNull - isNullThreshold RecapTypeConstraintCategory: type: string enum: - NUMBER - TIME - STRING - BYTES - DATA_STRUCTURE - OTHER ContractConstraintType: type: string enum: - greaterThan - greaterThanOrEqualTo - lessThan - lessThanOrEqualTo - isNull - isNullThreshold - charLength - isNotEmpty - length x-enum-varnames: - GREATER_THAN - GREATER_THAN_OR_EQUAL_TO - LESS_THAN - LESS_THAN_OR_EQUAL_TO - IS_NULL - IS_NULL_THRESHOLD - CHARACTER_LENGTH - IS_NOT_EMPTY - LENGTH NumberConstraintEnum: type: string enum: - greaterThan - greaterThanOrEqualTo - lessThan - lessThanOrEqualTo - isNull - isNullThreshold StringConstraintEnum: type: string enum: - charLength - isNotEmpty - isNull - isNullThreshold OtherConstraintEnum: type: string enum: - isNull - isNullThreshold TimeConstraints: type: object required: - type - constraints properties: type: type: string enum: - time constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' FloatConstraints: type: object required: - type - constraints properties: type: type: string enum: - float constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' IntegerConstraints: type: object required: - type - constraints properties: type: type: string enum: - integer constraints: type: array items: $ref: '#/components/schemas/NumberConstraintEnum' ListConstraints: type: object required: - type - constraints properties: type: type: string enum: - list constraints: type: array items: $ref: '#/components/schemas/LengthConstraintEnum' MapConstraints: type: object required: - type - constraints properties: type: type: string enum: - map constraints: type: array items: $ref: '#/components/schemas/LengthConstraintEnum' StringConstraints: type: object required: - type - constraints properties: type: type: string enum: - string constraints: type: array items: $ref: '#/components/schemas/StringConstraintEnum' UUIDConstraints: type: object required: - type - constraints properties: type: type: string enum: - uuid constraints: type: array items: $ref: '#/components/schemas/StringConstraintEnum' OtherConstraints: type: object required: - type - constraints properties: type: type: string enum: - other constraints: type: array items: $ref: '#/components/schemas/OtherConstraintEnum' BooleanConstraints: type: object required: - type - constraints properties: type: type: string enum: - boolean constraints: type: array items: $ref: '#/components/schemas/OtherConstraintEnum' RecapConstraints: type: object required: - type - constraints properties: type: type: string enum: - recap constraints: type: array items: $ref: '#/components/schemas/RecapTypeConstraintCategory' SupportedContractConstraints: type: object required: - type - constraints properties: type: type: string enum: - contract constraints: type: array items: $ref: '#/components/schemas/ContractConstraintType' IngestScaMetadataRequest: type: object properties: metadata: type: object additionalProperties: true dataAssetResourceName: $ref: '#/components/schemas/DataAssetResourceName' required: - metadata - dataAssetResourceName IngestScaMetadataResponse: type: object properties: newVersionCreated: description: Indicates whether a new version was created type: boolean TelemetryType: type: string description: The type of the telemetry event. enum: - SCA_PRIME - GABLE_CLIENT CreateTelemetryRequest: type: object properties: id: type: string format: uuid description: >- The unique identifier of the telemetry event. If not provided, a random UUID will be generated. data: type: object description: The data payload of the telemetry event. additionalProperties: true type: $ref: '#/components/schemas/TelemetryType' required: - data - type CreateTelemetryResponse: type: object properties: id: type: string format: uuid description: The id of the created telemetry event required: - id GetContractNamespacesResponse: type: object description: Response object containing a list of contract namespaces properties: namespaces: type: array items: type: string description: List of contract namespaces required: - namespaces ComponentMetrics: type: object properties: ingressCount: type: integer description: Number of ingress records. egressCount: type: integer description: Number of egress records. pathCount: type: integer description: Number of paths. required: - ingressCount - egressCount - pathCount ComponentCodeInfo: type: object properties: repoUri: type: string format: uri description: URL of the Git repository. projectRoot: type: string description: Root directory of the project within the repository. required: - repoUri - projectRoot Component: type: object properties: id: type: string format: uuid description: The unique identifier for the component. name: type: string description: The name of the component. type: type: string description: The type of the component. repoName: type: string description: The repository name or path associated with the component. lastUpdated: type: string format: date description: The date when the component was last updated. metrics: description: Counts of ingresses, egresses and paths recorded for this component. $ref: '#/components/schemas/ComponentMetrics' friendly_name: type: string description: Optional user-defined friendly name for the component. codeInfo: description: Repository metadata for this component. $ref: '#/components/schemas/ComponentCodeInfo' required: - id - name - type - repoName - lastUpdated - metrics - codeInfo GetComponentsHistoryResponse: type: object required: - history properties: history: type: array items: type: object required: - runId - componentId - componentName - createdAt properties: runId: type: string description: The run/version identifier for this history entry. componentId: type: string description: The unique identifier of the component. componentName: type: string description: The human-readable name of the component. createdAt: type: string format: date-time description: The analysis timestamp when this run was processed. commitTimestamp: type: string format: date-time description: The git commit timestamp associated with this version. analysisTimestamp: type: string format: date-time description: The timestamp when this analysis run was processed. jobTrigger: type: string description: >- The trigger that produced this run (e.g. push, pr, manual, schedule, byol_import). branchName: type: string description: The git branch associated with the run. commitSha: type: string description: The git commit SHA associated with the run. namespace: type: string description: >- The namespace associated with the run (e.g. prod, staging, dev). repoUri: type: string description: The repository URI (e.g. https://github.com/org/repo). job_status: type: string enum: - pending - uploaded - processing - success - error description: Status of the job that created this version. job_id: type: string description: ID of the job that created this version. nextCursor: type: string nullable: true description: >- Opaque cursor for fetching the next page. Pass as `cursor` in the next request. Null when there are no more results. GetComponentsHistoryFiltersResponse: type: object properties: componentNames: type: array description: List of component names items: type: string branches: type: array description: List of branch names items: type: string namespaces: type: array description: List of namespace names items: type: string jobTriggers: type: array description: List of event trigger types items: type: string FilterSetPayload: type: object description: >- A single ground-truth payload included in a measurement-report filter set. required: - payloadName properties: payloadName: type: string description: Name of the ground-truth payload to include in the report. note: type: string description: Optional free-text note describing why this payload is included. FilterSet: type: object description: >- A named, reusable set of ground-truth payloads used to scope a measurement report. Associated with a ground-truth component (version-independent). required: - id - componentId - name - payloads properties: id: type: string format: uuid description: Unique identifier for the filter set. componentId: type: string format: uuid description: Ground-truth component this filter set is associated with. name: type: string description: Human-readable name for the filter set. payloads: type: array description: Payloads included when this filter set is applied. items: $ref: '#/components/schemas/FilterSetPayload' createdBy: type: string description: Email of the user who created the filter set. createdAt: type: string description: ISO timestamp when the filter set was created. updatedAt: type: string description: ISO timestamp when the filter set was last updated. GetFilterSetsResponse: type: object description: List of measurement-report filter sets for a ground-truth component. required: - filterSets properties: filterSets: type: array items: $ref: '#/components/schemas/FilterSet' PostFilterSetRequest: type: object description: Request body to create a measurement-report filter set. required: - name - payloads properties: name: type: string description: Human-readable name for the filter set. payloads: type: array description: Payloads included when this filter set is applied. items: $ref: '#/components/schemas/FilterSetPayload' PutFilterSetRequest: type: object description: Request body to update a measurement-report filter set. required: - name - payloads properties: name: type: string description: Human-readable name for the filter set. payloads: type: array description: Payloads included when this filter set is applied. items: $ref: '#/components/schemas/FilterSetPayload' DataFlowBoundary: type: object properties: id: description: The unique identifier for the ingress/egress. type: string format: uuid kind: description: The kind of the ingress/egress. type: string signatureName: description: >- The name of the package, class, or method that the ingress/egress point is associated with. type: string payloadName: description: The name of the ingress/egress node. type: string friendly_name: description: Optional user-defined friendly name for the ingress/egress. type: string schema: description: The schema of the ingress/egress. $ref: '#/components/schemas/GableSchemaStruct' required: - id - kind - schema Ingress: allOf: - $ref: '#/components/schemas/DataFlowBoundary' Egress: allOf: - $ref: '#/components/schemas/DataFlowBoundary' CodeURI: type: object description: >- Code URI is a unique identifier for a code location. It is used to identify the code location in the codebase. properties: file: type: string description: Relative file path in the repo. lineStart: type: integer lineEnd: type: integer columnStart: type: integer columnEnd: type: integer required: - file - lineStart - columnStart CodeAnchor: type: object properties: anchorId: type: string description: Unique identifier for the anchor. name: type: string description: Human readable name of the code anchor. codeUri: $ref: '#/components/schemas/CodeURI' url: type: string description: URL to the code anchor. required: - anchorId - name - codeUri FieldMappingKind: type: string description: > How a field mapping participates in the path.
- DataFlow: the ingress field's value flows into the egress field (default).
- KeyValueBridge: the mapping bridges a key/value pair rather than copying a single value.
- ControlFlow: the ingress field influences whether/how the egress field is produced, but is not its value.
When absent, treat as DataFlow. enum: - DataFlow - KeyValueBridge - ControlFlow CompletenessClassification: type: string description: A completeness classification of a ground truth element. enum: - UNKNOWN - KNOWN_INCOMPLETE - KNOWN_COMPLETE Completeness: type: object properties: ingress: description: >- The completeness of non-schema ingress elements (name, signature, code anchor, etc.). $ref: '#/components/schemas/CompletenessClassification' ingress_schema: description: The completeness of the ingress's field schema. $ref: '#/components/schemas/CompletenessClassification' egress: description: >- The completeness of non-schema egress elements (name, signature, code anchor, etc.). $ref: '#/components/schemas/CompletenessClassification' egress_schema: description: The completeness of the egress's field schema. $ref: '#/components/schemas/CompletenessClassification' field_mappings: description: The completeness of the field mappings. $ref: '#/components/schemas/CompletenessClassification' required: - ingress - ingress_schema - egress - egress_schema - field_mappings PathType: type: string description: >- Indicates how a path was created - either from a scan or via user override. enum: - SCAN_OUTPUT - USER_OVERRIDE Path: type: object properties: pathId: type: string format: uuid description: >- Unique identifier for this path. Generated as a UUID v4 when the path is first created. ingress: type: object properties: id: type: string format: uuid description: The unique identifier of the ingress where the path starts. codeAnchorId: type: string format: uuid description: >- The unique identifier of the code anchor node where the path starts (optional for BYOL imports). description: type: string description: An AI-generated summary of the ingress point. required: - id egress: type: object properties: id: type: string format: uuid description: The unique identifier of the egress where the path ends. codeAnchorId: type: string format: uuid description: >- The unique identifier of the code anchor node where the path starts (optional for BYOL imports). description: type: string description: An AI-generated summary of the egress point. required: - id codeAnchors: type: array items: $ref: '#/components/schemas/CodeAnchor' description: A list of node IDs that are part of this path. fieldMappings: description: >- A list of field mappings that describe how fields are mapped along the path. type: array items: type: object properties: ingressField: type: string description: The name of the ingress field in the mapping. egressField: type: string description: The name of the egress field in the mapping. notes: type: string description: Additional notes about the field mapping. kind: $ref: '#/components/schemas/FieldMappingKind' fieldDataFlowPath: type: array description: The field data flow path that represents this mapping items: $ref: '#/components/schemas/CodeAnchor' required: - ingressField - egressField transformationSummary: type: string description: >- An AI-generated summary of the data transformation that occurs along this path. transformationSummaryDetailed: type: string description: >- A detailed AI-generated summary of the data transformation that occurs along this path. payloadName: type: string description: The name of the payload for the path between ingress and egress. friendlyPayloadName: type: string description: user dictated name for the payload completeness: description: Completeness indicators for a ground truth path $ref: '#/components/schemas/Completeness' pathType: $ref: '#/components/schemas/PathType' isSuppressed: type: boolean default: false pathNotes: type: string description: user added notes about the suppression/un-suppression suppressedAt: type: object properties: timestamp: type: string format: date-time versionId: type: string description: only set if is_suppressed required: - ingress - egress - codeAnchors - fieldMappings StaticAnalysisDependencyMetadata: type: object description: Metadata about a dependency of the code repository properties: repo_name: type: string description: Name of the dependency repository commit_sha: type: string description: Associated commit hash of the dependency repository commit_timestamp: type: string description: Timestamp of the commit StaticAnalysisCodeMetadata: type: object description: Metadata about the code that is being analyzed additionalProperties: true required: - repo_uri - repo_branch - repo_commit - project_root properties: repo_uri: type: string description: URI of the code repository repo_ui_url: type: string description: URL of the code repository UI (e.g. GitHub URL) repo_branch: type: string description: Branch of the code repository repo_commit: type: string description: Commit hash of the code project_root: type: string description: Root directory targeted by the static analysis tool external_component_id: type: string description: ID of the external component that was analyzed repo_name: type: string description: Name of the code repository event_repo: type: string description: Name of the repository from the GitHub event job_trigger: type: string enum: - MERGE_TO_MAIN - PULL_REQUEST_COMMENT - PULL_REQUEST_CREATED - PULL_REQUEST_UPDATED - MANUAL - UNKNOWN description: Type of the GitHub event repo_commit_timestamp: type: string description: Timestamp of the commit is_default_branch: type: boolean description: Whether this is the default branch of the code repository namespace: type: string description: Namespace of the customer (e.g. dev, qa, prod) docker_image_version: type: string description: Version of the Docker image used has_uncommitted_changes: type: boolean description: Whether there are uncommitted changes in the code repository operating_system: type: string description: Operating system of the machine that ran the static analysis tool sca_config_version: type: string description: Version (git SHA) of the SCA configuration files used scan_duration_ms: type: integer format: int64 description: >- Total elapsed time, in milliseconds, spent running the Gable scan command for this component raw_payload_size_bytes: type: integer format: int64 description: Size, in bytes, of the raw scan payload generated before upload upload_duration_ms: type: integer format: int64 description: >- Total elapsed time, in milliseconds, spent processing the SCA results upload pr_base_branch: type: object properties: branch: type: string description: Base branch of the pull request commit: type: string description: Commit hash of the base branch description: Base branch of the pull request, if this was run from a pull request pr_number: type: integer description: Number of the pull request gable_cli_version: type: string description: Version of the Gable CLI used for this run sca_prime_version: type: string description: Version of the SCA Prime binary used for this run dependencies: type: array items: $ref: '#/components/schemas/StaticAnalysisDependencyMetadata' description: Dependencies of the code repository CodeComponent: type: object properties: id: type: string format: uuid description: The unique identifier for the component. runId: type: string description: The ID of the run that the component belongs to name: type: string description: The name of the component. ingresses: description: The ingresses associated with the component. type: array items: $ref: '#/components/schemas/Ingress' egresses: description: The egresses associated with the component. type: array items: $ref: '#/components/schemas/Egress' paths: description: The paths associated with the component. type: array items: $ref: '#/components/schemas/Path' friendly_name: type: string description: Optional user-defined friendly name for the component. type: type: string description: The type of the component. const: CODE metadata: allOf: - $ref: '#/components/schemas/StaticAnalysisCodeMetadata' - type: object properties: extras: type: object description: Additional metadata for the code component. additionalProperties: type: string collectionMechanism: type: string description: The mechanism used to collect data for this component (SCA or BYOL). enum: - SCA - BYOL required: - id - type - runId - name - ingresses - egresses - paths - metadata GetComponentVersionsResponse: type: array items: type: object properties: versionId: type: string description: The version ID (runId) of the component. createdAt: type: string format: date-time description: The timestamp when the component version was created. isLatestVersion: type: boolean description: Indicates if this version is the latest version of the component. job_trigger: type: string description: Type of the event that triggered this version. event_repo: type: string description: Name of the repository from the event that triggered this version. repo_commit: type: string description: The commit SHA that triggered the version. repo_commit_timestamp: type: string description: The timestamp of the commit. job_status: type: string enum: - pending - processing - success - error description: Status of the job that created this version. job_id: type: string description: ID of the job that created this version. dependencies: type: array description: List of version-specific dependencies for this component version. items: $ref: '#/components/schemas/StaticAnalysisDependencyMetadata' ComponentDiffMetadata: type: object description: Metadata for a component diff comparison. required: - componentName - componentId - baseEventId - baseDate - compareEventId - compareDate - totalAdded - totalRemoved - totalModified properties: componentName: type: string description: Stable name of the component. componentId: type: string format: uuid description: UUID of the component (retained for links and disambiguation). baseEventId: type: string description: Event ID of the base (older) version. baseDate: type: string format: date-time description: Timestamp of the base version. baseLabel: type: string description: Label for the base version (e.g. job trigger type). baseCommitSha: type: string description: Commit SHA of the base version, if available. compareEventId: type: string description: Event ID of the compare (newer) version. compareDate: type: string format: date-time description: Timestamp of the compare version. compareLabel: type: string description: Label for the compare version. compareCommitSha: type: string description: Commit SHA of the compare version, if available. totalAdded: type: integer description: Total number of paths added. totalRemoved: type: integer description: Total number of paths removed. totalModified: type: integer description: Total number of paths modified. totalUnchanged: type: integer description: Total number of unchanged paths. DiffStatus: type: string enum: - added - removed - modified - unchanged description: >- Status of a diff element indicating whether it was added, removed, modified, or unchanged between two versions. DiffCodeAnchor: type: object description: >- A code anchor with file and line location, used in diff contexts. Flattened from StaticAnalysisCodeAnchor. required: - anchorId - file - lineStart properties: anchorId: type: string description: Unique identifier for the code anchor. file: type: string description: Relative file path in the repo. lineStart: type: integer description: Starting line number. lineEnd: type: integer description: Ending line number. columnStart: type: integer description: Starting column number. columnEnd: type: integer description: Ending column number. FieldDependency: type: object description: >- A field reachable from a field-level unit (field pair or field diff) through the lineage graph, at its minimum hop distance, with the path taken to reach it. Fields are matched by name across service boundaries, so results are only as accurate as the underlying name matching. properties: componentName: type: string description: The component the reached field belongs to. componentType: type: string enum: - CODE - DATA_STORE description: >- Whether the reached field's component is a code component or a data store. field: type: string description: The reached field name. hops: type: integer description: >- Service boundaries crossed to reach this field. 1 = directly connected. path: type: array description: >- Ordered, source-first chain from this unit's field to the reached field. The first element is this component's field; the last element is the reached field itself. items: type: object properties: componentName: type: string componentType: type: string enum: - CODE - DATA_STORE field: type: string required: - componentName - componentType - field required: - componentName - componentType - field - hops - path FieldDiff: type: object description: Diff of a single field mapping between two versions. required: - sourceField - targetField - status properties: sourceField: type: string description: Source (ingress) field name. targetField: type: string description: Target (egress) field name. type: type: string description: Field type, if available. status: $ref: '#/components/schemas/DiffStatus' dataFlowSteps: type: array items: $ref: '#/components/schemas/DiffCodeAnchor' description: Code anchors in the compare version's data flow for this field. previousDataFlowSteps: type: array items: $ref: '#/components/schemas/DiffCodeAnchor' description: Code anchors in the base version's data flow for this field. upstreamDependencies: type: array description: >- Fields feeding this field, each at its minimum hop distance with the path taken to reach it. Used to surface who is affected upstream by this change. items: $ref: '#/components/schemas/FieldDependency' downstreamDependencies: type: array description: >- Fields consuming this field, each at its minimum hop distance with the path taken to reach it. Used to surface who is affected downstream by this change. items: $ref: '#/components/schemas/FieldDependency' PathDiff: type: object description: >- Diff summary for a single path (ingress→egress) between two component versions. required: - pathId - ingressName - egressName - status - fieldsAdded - fieldsRemoved - fieldsChanged - totalFields - codeStepsAdded - codeStepsRemoved - codeStepsModified - fields properties: pathId: type: string description: Unique identifier for the path. basePathId: type: string description: Path ID from the base version. Absent when the path is newly added. comparePathId: type: string description: Path ID from the compare version. Absent when the path was removed. basePathType: $ref: '#/components/schemas/PathType' description: Source of the base path. Absent when the path is newly added. comparePathType: $ref: '#/components/schemas/PathType' description: Source of the compare path. Absent when the path was removed. ingressName: type: string description: Name of the ingress payload. ingressFunction: type: string description: Function name of the ingress, if available. egressName: type: string description: Name of the egress payload. egressFunction: type: string description: Function name of the egress, if available. status: $ref: '#/components/schemas/DiffStatus' fieldsAdded: type: integer description: Number of fields added in this path. fieldsRemoved: type: integer description: Number of fields removed from this path. fieldsChanged: type: integer description: Number of fields modified in this path. totalFields: type: integer description: Total number of fields in this path. codeStepsAdded: type: integer description: Number of code steps added. codeStepsRemoved: type: integer description: Number of code steps removed. codeStepsModified: type: integer description: Number of code steps with file/line changes. fields: type: array items: $ref: '#/components/schemas/FieldDiff' description: Detailed field-level diffs for this path. ComponentDiffResponse: type: object description: >- Response for the component diff API, comparing two versions of a component's lineage. required: - metadata - pathChanges properties: metadata: $ref: '#/components/schemas/ComponentDiffMetadata' pathChanges: type: array items: $ref: '#/components/schemas/PathDiff' description: List of path-level diffs between the two versions. PathDiffMetadata: type: object description: Metadata for a path diff comparison. required: - componentName - ingressPayloadName - egressPayloadName - baseEventId - baseDate - compareEventId - compareDate properties: componentName: type: string description: Stable name of the component. componentId: type: string format: uuid description: UUID of the component, for back-links. ingressPayloadName: type: string description: Payload name of the ingress boundary. egressPayloadName: type: string description: Payload name of the egress boundary. ingressComponent: type: string description: Name of the upstream component connected to the ingress. egressComponent: type: string description: Name of the downstream component connected to the egress. basePathType: $ref: '#/components/schemas/PathType' description: Source of the selected base path, when one exists. baseEventId: type: string description: Event ID of the base (older) version. baseDate: type: string format: date-time description: Timestamp of the base version. comparePathType: $ref: '#/components/schemas/PathType' description: Source of the selected compare path, when one exists. compareEventId: type: string description: Event ID of the compare (newer) version. compareDate: type: string format: date-time description: Timestamp of the compare version. PathStep: type: object description: >- A step in a code flow path, with optional file/line location and change indicators. required: - id - label properties: id: type: string description: Unique identifier for the step. label: type: string description: Display label for the step. sublabel: type: string description: Optional secondary label. componentName: type: string description: Name of the component this step belongs to. isIngress: type: boolean description: Whether this step is an ingress boundary. isEgress: type: boolean description: Whether this step is an egress boundary. isChanged: type: boolean description: Whether this step changed between versions. changeBadge: type: string description: Badge text indicating the type of change (e.g. "added", "moved"). file: type: string description: File path in the compare version. lineStart: type: integer description: Start line in the compare version. lineEnd: type: integer description: End line in the compare version. previousFile: type: string description: File path in the base version. previousLineStart: type: integer description: Start line in the base version. previousLineEnd: type: integer description: End line in the base version. PathDiffDetail: type: object description: >- Detailed diff of a single path between two versions, including code flow steps and field mappings. required: - codeFlowSteps - codeFlowChangeCount - fieldMappings - fieldMappingChangeCount properties: codeFlowSteps: type: array items: $ref: '#/components/schemas/PathStep' description: Ordered code flow steps for this path. codeFlowChangeCount: type: integer description: Number of code flow steps that changed. fieldMappings: type: array items: $ref: '#/components/schemas/FieldDiff' description: Field-level diffs for this path. fieldMappingChangeCount: type: integer description: Number of field mappings that changed. PathDiffResponse: type: object description: >- Response for the path diff API, comparing a single path between two component versions. required: - metadata - diff properties: metadata: $ref: '#/components/schemas/PathDiffMetadata' diff: $ref: '#/components/schemas/PathDiffDetail' MergeHistoryMetrics: type: object description: >- Per-version diff metrics summarizing how many payloads changed relative to the previous merged version. required: - totalAdded - totalRemoved - totalModified - totalUnchanged properties: totalAdded: type: integer description: Number of payloads added in this version relative to its base. totalRemoved: type: integer description: Number of payloads removed in this version relative to its base. totalModified: type: integer description: Number of payloads modified in this version relative to its base. totalUnchanged: type: integer description: Number of payloads unchanged in this version relative to its base. MergeHistoryBreakage: type: object description: >- Downstream breakage summary for a version — how many downstream consumers lose a field they read as a result of this version's changes. required: - downstreamBreakingCount - affectedComponentCount - isBreaking properties: downstreamBreakingCount: type: integer description: >- Number of distinct downstream field mappings that are breaking (a consumed egress field was removed). affectedComponentCount: type: integer description: >- Number of distinct downstream components with at least one breaking field mapping. isBreaking: type: boolean description: >- True when this version introduces at least one downstream breaking change. MergeHistoryEntry: type: object description: >- A single MERGE_TO_MAIN version of a component with its per-version diff metrics and downstream breakage summary. required: - versionId - baseVersionId - commitTimestamp - createdAt - jobTrigger - isLatestVersion - metrics - breakage properties: versionId: type: string description: The version ID (event/run ID) of this merged version. baseVersionId: type: string nullable: true description: >- The version ID this entry was diffed against (the previous merged version). Null for the oldest (baseline) version, whose metrics count every payload as added. commitSha: type: string nullable: true description: The commit SHA associated with this version. commitTimestamp: type: string description: The timestamp of the commit that produced this version. createdAt: type: string format: date-time description: The timestamp when this version's scan event was created. jobTrigger: type: string description: >- The trigger for this version's job (always MERGE_TO_MAIN for merge-history entries). eventRepo: type: string nullable: true description: Name of the repository from the event that triggered this version. isLatestVersion: type: boolean description: >- Indicates whether this is the latest merged version of the component. approvalStatus: type: string nullable: true enum: - PENDING_APPROVAL - APPROVED description: >- Approval status for this version. Approval status is only stored for the current/latest component state, so it is populated for the latest version and null for older versions. metrics: $ref: '#/components/schemas/MergeHistoryMetrics' breakage: $ref: '#/components/schemas/MergeHistoryBreakage' ComponentMergeHistoryResponse: type: object description: >- A component's MERGE_TO_MAIN version history with per-version diff metrics and downstream breakage indicators, ordered newest-first. required: - componentId - entries properties: componentId: type: string description: The ID of the component this history belongs to. componentName: type: string nullable: true description: The name of the component this history belongs to. entries: type: array description: >- Merge history entries ordered newest-first (latest merged version first). items: $ref: '#/components/schemas/MergeHistoryEntry' StaticAnalysisSignature: type: object description: A signature for a static analysis tool required: - class_names - method_names - kind properties: class_names: type: array items: type: string description: The names of the classes method_names: type: array items: type: string description: The names of the methods kind: type: string description: >- Unique name for the ingress/egress signature (e.g. "postgres", "gateway_response"). All the signatures with the same kind are grouped together. StaticAnalysisToolConfig: type: object description: Configuration for a static analysis tool required: - ingress_signatures - egress_signatures properties: ingress_signatures: type: array items: $ref: '#/components/schemas/StaticAnalysisSignature' egress_signatures: type: array items: $ref: '#/components/schemas/StaticAnalysisSignature' StaticAnalysisToolMetadata: type: object required: - name - version properties: name: type: string description: Name of the SCA tool used version: type: string description: Version of the SCA tool config: $ref: '#/components/schemas/StaticAnalysisToolConfig' PostScaStartRunRequest: type: object properties: code_info: $ref: '#/components/schemas/StaticAnalysisCodeMetadata' sca_info: $ref: '#/components/schemas/StaticAnalysisToolMetadata' action: type: string description: >- Action to perform upon receiving the results. Register should be used when the results are active (like on a 'main' branch or production system), as assets will be registered from the lineage data. Check should be used when the results are from a proposed change (like a pull request) and resultant assets will be checked against any contracts. Upload is the same as register except that no assets will be registered, only the lineage data will be uploaded. enum: - register - check - upload pr_link: type: string description: >- Link to the pull request in the source code repository, if applicable include_unchanged_assets: type: boolean description: Whether to include assets that have not changed since the last run default: false output_format: type: string description: Format of the output, either 'json', 'text', or 'markdown' enum: - json - text - markdown type: type: string description: >- Type of the run, either 'code', 'data_store', 'edge', or 'code_strands' enum: - CODE - DATA_STORE - EDGE - CODE_STRANDS default: CODE run_id: type: string description: The ID of the run that the component belongs to collection_mechanism: type: string description: >- How the lineage data was collected. SCA means Gable's static code analysis tool scanned the code. BYOL (Bring Your Own Lineage) means the caller produced the lineage data externally and is uploading it directly. enum: - SCA - BYOL default: BYOL required: - code_info - action EncryptedResponse: type: object description: A response payload that has been encrypted properties: encrypted_payload: description: The encrypted payload type: string required: - encrypted_payload PostScaStartRunResponse: type: object description: The response from the postScaStartRun function properties: runId: description: The unique run ID assigned to this SCA run type: string config: oneOf: - $ref: '#/components/schemas/GetConfigResponse' - $ref: '#/components/schemas/EncryptedResponse' required: - runId GetScaRunStatusResponse: type: object properties: status: type: string description: status of the sca job enum: - pending - uploaded - processing - success - error message: type: string description: message associated with the status, if any asset_registration_outcomes: type: array items: type: object properties: data_asset_resource_name: $ref: '#/components/schemas/StructuredDataAssetResourceName' error: type: string description: Error message if registration of this asset failed required: - data_asset_resource_name required: - status StaticAnalysisCodeURI: type: object description: >- Code URI is a unique identifier for a code location. It is used to identify the code location in the codebase. required: - file - line_start - column_start properties: file: type: string description: Relative file path in the repo line_start: type: integer line_end: type: integer column_start: type: integer column_end: type: integer StaticAnalysisCodeAnchor: type: object properties: anchor_id: type: string description: >- Unique identifier for the anchor. Analogous to a merge key. Conceptually, an anchor represents a point in code which is ideally stable to some set of changes to surrounding code. Generated by the tool. code_uri: $ref: '#/components/schemas/StaticAnalysisCodeURI' required: - anchor_id - code_uri StaticAnalysisDataFlowPathEnds: type: object properties: kind: type: string description: The kind of the ingress/egress (e.g. "postgres", "gateway_response") signature_name: type: string description: >- The name of the package, class, or method that the ingress/egress point is associated with code_anchor: description: >- The code anchor that represents the ingress/egress point in the codebase (optional for BYOL imports). This should be the same as the first (for ingress) or last (for egress) code anchor in the flow path. $ref: '#/components/schemas/StaticAnalysisCodeAnchor' schema: $ref: '#/components/schemas/GableSchemaStruct' description: description: An AI-generated summary of the ingress/egress point. type: string id: description: >- The ID of the ingress/egress point. This is a unique identifier for the ingress/egress point. type: string payload_name: description: The name of the ingress/egress node. type: string required: - schema - signature_name StaticAnalysisTabularLineageFieldMapping: type: object description: >- A mapping of a field in the ingress schema to a field in the egress schema required: - ingress_field - egress_field properties: ingress_field: type: string description: The field in the ingress schema egress_field: type: string description: The field in the egress schema notes: type: string description: Notes about the mapping kind: $ref: '#/components/schemas/FieldMappingKind' field_data_flow_path: type: array description: The field data flow path that represents this mapping items: $ref: '#/components/schemas/StaticAnalysisCodeAnchor' StaticAnalysisCompletenessClassification: type: string description: A completeness classification of a ground truth element. enum: - UNKNOWN - KNOWN_INCOMPLETE - KNOWN_COMPLETE StaticAnalysisCompleteness: type: object properties: ingress: description: >- The completeness of non-schema ingress elements (name, signature, code anchor, etc.). $ref: '#/components/schemas/StaticAnalysisCompletenessClassification' ingress_schema: description: The completeness of the ingress's field schema. $ref: '#/components/schemas/StaticAnalysisCompletenessClassification' egress: description: >- The completeness of non-schema egress elements (name, signature, code anchor, etc.). $ref: '#/components/schemas/StaticAnalysisCompletenessClassification' egress_schema: description: The completeness of the egress's field schema. $ref: '#/components/schemas/StaticAnalysisCompletenessClassification' field_mappings: description: The completeness of the field mappings. $ref: '#/components/schemas/StaticAnalysisCompletenessClassification' required: - ingress - ingress_schema - egress - egress_schema - field_mappings StaticAnalysisDataFlowPath: type: object description: >- A path in the codebase that starts at an ingress node and ends at an egress node required: - ingress - egress properties: ingress: $ref: '#/components/schemas/StaticAnalysisDataFlowPathEnds' egress: $ref: '#/components/schemas/StaticAnalysisDataFlowPathEnds' code_anchors: description: >- Ordered list of code anchors that represent the path from ingress to egress. The order of the anchors in this array represents the flow of data through the codebase. type: array items: $ref: '#/components/schemas/StaticAnalysisCodeAnchor' field_mappings: description: >- List of identified field mappings between schema at ingress and egress. type: array items: $ref: '#/components/schemas/StaticAnalysisTabularLineageFieldMapping' transformation_summary: description: >- An AI-generated summary of the data transformation that occurs along this path. type: string transformation_summary_detailed: description: >- A detailed, AI-generated summary of the data transformation that occurs along this path. type: string payload_name: description: >- The name of the path. If provided, this value will be used directly without being overwritten by computed values. type: string completeness: description: Completeness indicators for a ground truth path $ref: '#/components/schemas/StaticAnalysisCompleteness' StaticAnalysisPathsApiRequest: type: object description: API request for uploading code lineage paths additionalProperties: false properties: paths: type: array items: $ref: '#/components/schemas/StaticAnalysisDataFlowPath' run_id: type: string description: The ID of the run that the paths belong to upload_context: $ref: '#/components/schemas/PostScaStartRunRequest' external_component_id: type: string description: Optional ID of the external component that was analyzed type: type: string description: The type of data being uploaded enum: - CODE metadata: type: object description: Additional metadata for the component. properties: extras: type: object additionalProperties: type: string name: type: string description: The name of the component that was analyzed required: - paths - run_id - type CrossServiceDataStoreApiRequest: type: object description: API request for uploading data store metadata additionalProperties: false properties: run_id: type: string description: The ID of the run that this data belongs to upload_context: $ref: '#/components/schemas/PostScaStartRunRequest' external_component_id: type: string description: The provided external ID for the data store type: type: string enum: - DATA_STORE description: The type of data store schema: type: object additionalProperties: false required: - fields properties: fields: type: array minItems: 1 items: type: object additionalProperties: false properties: name: type: string description: The name of the field type: type: string description: The type of the field required: - name - type table_metadata: type: object additionalProperties: false properties: type: type: string description: The type of data store enum: - dynamodb - redis - elasticache - database - kafka - other table_name: type: string description: The name of the data store extras: type: object description: Additional metadata for the data store. additionalProperties: type: string required: - type - table_name required: - run_id - external_component_id - type - table_metadata - schema CrossServiceEdgeApiRequest: type: object description: API request for uploading edge definitions additionalProperties: false properties: run_id: type: string description: The ID of the run that this data belongs to upload_context: $ref: '#/components/schemas/PostScaStartRunRequest' type: type: string enum: - EDGE field_mappings: type: array minItems: 1 items: type: object additionalProperties: false required: - source_field - destination_field properties: source_field: type: string destination_field: type: string notes: type: string source: type: object additionalProperties: false required: - source_component_name - type properties: component_id: type: string description: >- Id of the source component (optional, for backward compatibility) source_component_name: type: string description: Name of the source component egress_id: type: string description: Id of the source entity type: type: string description: the type of edge connection payload_name: type: string description: The name of the payload source destination: type: object additionalProperties: false required: - destination_component_name - type properties: component_id: type: string description: >- Id of the destination component (optional, for backward compatibility) destination_component_name: type: string description: Name of the destination component ingress_id: type: string description: Id of the destination entity type: type: string description: the type of edge connection payload_name: type: string description: The name of the payload destination required: - run_id - type - field_mappings - source - destination Strand: type: object description: >- One lineage fact from the prime strands.json output (endpoints + ordered path steps + references into the strand metadata index). The product does not interpret strand bodies on the upload path — the discriminator engine reads strands.json directly — so the body is passed through as-is rather than typed here. The full shape is defined by the Prime strand vocabulary (crates/strands in the sca-prime repo). additionalProperties: true StrandMetadataNode: type: object description: >- One reusable context node from the prime strand-metadata.json index, keyed by metadata node ID in CodeStrandsApiRequest.strand_metadata_nodes. Each node is tagged with a `kind`; the full per-kind fields are defined by the Prime strand vocabulary (crates/strands in the sca-prime repo) and are passed through as-is. The product does not interpret node bodies on the upload path — the discriminator engine reads the strand-metadata.json contents directly — so only the `kind` tag is typed here. Known kinds: function, type, member, namespace, file, payload_boundary, strand_fact, endpoint_schema, type_schema; new kinds ship with a format_version bump. additionalProperties: true required: - kind properties: kind: type: string description: >- The kind of metadata node. Left as a free-form string (not an enum) so additive Prime vocabulary changes do not reject otherwise-valid uploads. CodeStrandsApiRequest: type: object description: >- API request for uploading prime's strand output (strands + strand-metadata) as one logical request carrying the complete contents of both artifacts for a run. Requests larger than the request-size limit ride the transport-level chunk mechanism documented on the /v0/sca/results path (the X-Gable-Chunk-* headers: gzip -> base64 byte slices) and are reassembled by the backend before parsing, exactly like CODE uploads. The backend persists the reassembled artifacts to S3 in envelope form. Strand contents are not saved to Dynamo but instead queries through the discriminator engine. additionalProperties: false properties: strands: type: array description: >- The complete strands array from the prime strands.json output for this run. items: $ref: '#/components/schemas/Strand' strand_metadata_nodes: type: object description: >- The complete nodes map from the prime strand-metadata.json output for this run, keyed by metadata node ID. additionalProperties: $ref: '#/components/schemas/StrandMetadataNode' format_version: type: string description: >- The strand vocabulary format_version from the prime output envelopes (an empty string means the pre-version era). metadata_version: type: string description: >- The version of the engine that produced the metadata index, from the strand-metadata.json envelope. program: type: object additionalProperties: true description: >- Identity of the analyzed program from the strands.json envelope (e.g. source_control_url). run_id: type: string description: The ID of the run that the strands belong to upload_context: $ref: '#/components/schemas/PostScaStartRunRequest' external_component_id: type: string description: Optional ID of the external code component that was analyzed type: type: string description: The type of data being uploaded enum: - CODE_STRANDS required: - strands - strand_metadata_nodes - run_id - type AIAugmentationUploadRequest: type: object description: API request for uploading AI augmentations additionalProperties: false properties: type: type: string enum: - AI_AUGMENTATION run_id: type: string description: The ID of the run that this augmentation belongs to augmentation_run_id: type: string description: A unique ID for this augmentation upload run labels_version: type: string description: Labels/version used by the augmentation producer producer: type: object additionalProperties: false required: - post_processor_version properties: post_processor_version: type: string llm_client_version: type: string status: type: string description: Augmentation processing status augmentations: type: array items: type: object additionalProperties: false required: - scope properties: scope: type: string path_id: type: string summary: type: object additionalProperties: false required: - short - source properties: short: type: string source: type: string required: - type - run_id - augmentation_run_id - labels_version - producer - status ScaResultsUploadRequest: oneOf: - $ref: '#/components/schemas/StaticAnalysisPathsApiRequest' - $ref: '#/components/schemas/CrossServiceDataStoreApiRequest' - $ref: '#/components/schemas/CrossServiceEdgeApiRequest' - $ref: '#/components/schemas/CodeStrandsApiRequest' - $ref: '#/components/schemas/AIAugmentationUploadRequest' discriminator: propertyName: type mapping: CODE: '#/components/schemas/StaticAnalysisPathsApiRequest' DATA_STORE: '#/components/schemas/CrossServiceDataStoreApiRequest' EDGE: '#/components/schemas/CrossServiceEdgeApiRequest' CODE_STRANDS: '#/components/schemas/CodeStrandsApiRequest' AI_AUGMENTATION: '#/components/schemas/AIAugmentationUploadRequest' description: >- Union type for uploading SCA results - can be code lineage paths, data store metadata, edge definitions, raw prime, or AI augmentation strand output PostScaResultsResponse: type: object description: Response from posting SCA results. properties: runId: type: string description: The run ID associated with this upload. createdJob: type: boolean description: Whether this request created the backing job for the run. required: - runId - createdJob PostDefectReportRequest: type: object properties: description: type: string description: Description of the defect expectedBehavior: type: string description: What the user expected to happen severity: type: string enum: - low - medium - high description: Severity level reporterName: type: string description: Name of the reporter reporterEmail: type: string description: Email of the reporter organization: type: string description: Customer organization name pageUrl: type: string description: URL where the defect was reported from componentId: type: string description: Lineage component ID componentName: type: string description: Lineage component display name pathId: type: string description: Path ID within the component ingressPayloadName: type: string description: Ingress payload name for the path egressPayloadName: type: string description: Egress payload name for the path required: - description - expectedBehavior - reporterName - reporterEmail - organization - pageUrl PostDefectReportResponse: type: object DataStoreComponent: type: object description: The data store component for the cross service components. properties: id: type: string format: uuid description: The unique identifier for the component. runId: type: string description: The ID of the run that the component belongs to. friendly_name: type: string description: Optional user-defined friendly name for the component. type: type: string description: The type of the component. const: DATA_STORE metadata: allOf: - $ref: '#/components/schemas/StaticAnalysisCodeMetadata' - type: object properties: type: type: string description: The type of the data store. name: type: string description: The name of the data store. extras: type: object description: Additional metadata for the data store. additionalProperties: {} schema: type: object properties: fields: type: array items: type: object properties: name: type: string type: type: string required: - name - type required: - fields collectionMechanism: type: string description: The mechanism used to collect data for this component (SCA or BYOL). enum: - SCA - BYOL required: - id - type - metadata - schema CrossServiceComponent: type: object description: The component for the cross service components. oneOf: - $ref: '#/components/schemas/CodeComponent' - $ref: '#/components/schemas/DataStoreComponent' discriminator: propertyName: type mapping: CODE: '#/components/schemas/CodeComponent' DATA_STORE: '#/components/schemas/DataStoreComponent' EdgeMapping: type: object description: The edge mapping for the cross service components. properties: id: type: string description: The id of the edge. crossServiceFieldMappings: type: array description: The field mappings for the cross service components. items: type: object properties: sourceField: type: string destinationField: type: string required: - sourceField - destinationField source: type: object description: The source of the edge. properties: componentId: type: string description: The id of the component. sourceComponentName: type: string description: The name of the source component. egressId: type: string description: The id of the source egress. payloadName: type: string description: The payload name of the source egress. type: type: string description: The type of the source connection. example: egress required: - sourceComponentName - type destination: type: object description: The destination of the edge. properties: componentId: type: string description: The id of the component. destinationComponentName: type: string description: The name of the destination component. ingressId: type: string description: The id of the destination ingress. payloadName: type: string description: The payload name of the destination ingress. type: type: string description: The type of the destination connection. example: ingress required: - destinationComponentName - type type: type: string const: EDGE required: - id - crossServiceFieldMappings - source - destination - type CrossServiceComponentsResponse: type: object description: The response for the cross service components. properties: components: type: array items: $ref: '#/components/schemas/CrossServiceComponent' edge_mappings: type: array items: $ref: '#/components/schemas/EdgeMapping' required: - components - edge_mappings LineageExportResponse: type: object properties: timestamp: type: string description: The timestamp of the lineage export items: type: array items: oneOf: - $ref: '#/components/schemas/CodeComponent' - $ref: '#/components/schemas/DataStoreComponent' - $ref: '#/components/schemas/EdgeMapping' description: The items in the lineage export required: - timestamp - items DataFlowPathAddedEvent: type: object description: Lineage data flow path added event allOf: - type: object required: - event_type - path properties: event_type: type: string enum: - DATA_FLOW_PATH_ADDED effective_since_commit_sha: type: string description: The commit SHA that the path should apply from. payload_name: type: string description: Deterministic payload name for a path if id is not available. reason: type: string description: The reason for the event path: $ref: '#/components/schemas/StaticAnalysisDataFlowPath' namespace: type: string description: Optional namespace scope for this event. DataFlowEdgeAddedEvent: type: object description: Lineage data flow edge added event allOf: - type: object required: - event_type - source - destination - field_mappings properties: event_type: type: string enum: - DATA_FLOW_EDGE_ADDED reason: type: string description: The reason for the event. namespace: type: string description: Optional namespace scope for this event. branch_name: type: string description: Optional branch scope for this event. job_trigger: type: string description: Optional trigger scope for this event. field_mappings: type: array minItems: 1 items: type: object additionalProperties: false required: - source_field - destination_field properties: source_field: type: string destination_field: type: string notes: type: string source: type: object additionalProperties: false required: - component_id - source_component_name - payload_name - type properties: component_id: type: string format: uuid description: Source component ID for edge matching. source_component_name: type: string description: Source component name. egress_id: type: string description: Optional source egress ID. payload_name: type: string description: Source payload name used for edge matching. effective_since_commit_sha: type: string description: Optional source-side effective commit SHA. type: type: string description: Source endpoint type. destination: type: object additionalProperties: false required: - component_id - destination_component_name - payload_name - type properties: component_id: type: string format: uuid description: Destination component ID for edge matching. destination_component_name: type: string description: Destination component name. ingress_id: type: string description: Optional destination ingress ID. payload_name: type: string description: Destination payload name used for edge matching. effective_since_commit_sha: type: string description: Optional destination-side effective commit SHA. type: type: string description: Destination endpoint type. DataFlowEdgeDeletedEvent: type: object description: Lineage data flow edge deleted event allOf: - type: object required: - event_type - edge_id properties: event_type: type: string enum: - DATA_FLOW_EDGE_DELETED edge_id: type: string description: Stable server-issued edge identifier to hide. reason: type: string description: The reason for the event. namespace: type: string description: Optional namespace scope for this event. DataFlowPathSuppressedEvent: type: object description: Lineage data flow path suppressed event allOf: - type: object required: - event_type properties: event_type: type: string enum: - DATA_FLOW_PATH_SUPPRESSED path_id: type: string format: uuid description: Stable server-issued path identifier. effective_since_commit_sha: type: string description: The commit SHA that the path should apply from. reason: type: string description: The reason for the event namespace: type: string description: Optional namespace scope for this event. DataFlowPathUnsuppressedEvent: type: object description: Lineage data flow path un-suppressed event allOf: - type: object required: - event_type properties: event_type: type: string enum: - DATA_FLOW_PATH_UNSUPPRESSED path_id: type: string format: uuid description: Stable server-issued path identifier. effective_since_commit_sha: type: string description: The commit SHA that the path should apply from. reason: type: string description: The reason for the event namespace: type: string description: Optional namespace scope for this event. DataFlowByoPathDeletedEvent: type: object description: Lineage data flow BYO path deleted event allOf: - type: object required: - event_type - path_id properties: event_type: type: string enum: - DATA_FLOW_BYO_PATH_DELETED path_id: type: string format: uuid description: Stable server-issued path identifier. effective_since_commit_sha: type: string description: The commit SHA that the BYO path deletion should apply from. reason: type: string description: The reason for the event namespace: type: string description: Optional namespace scope for this event. EventEnvelope: type: object required: - events - type additionalProperties: false properties: type: type: string enum: - LINEAGE_EVENT events: type: array minItems: 1 items: type: object description: Lineage event envelope. required: - source - payload - component_id - actor properties: occurred_at: type: string format: date-time description: >- Client timestamp when the event occurred (server also records received time). source: type: string description: Origin of the event. enum: - UI - SCA - BYO - API actor: type: object description: Actor responsible for the event (optional for SCA). required: - actor_type properties: actor_type: type: string enum: - user - api_key actor_id: type: string description: Opaque identifier for the actor. component_id: type: string format: uuid description: The ID of the component that the path belongs to payload: oneOf: - $ref: '#/components/schemas/DataFlowPathSuppressedEvent' - $ref: '#/components/schemas/DataFlowPathUnsuppressedEvent' - $ref: '#/components/schemas/DataFlowPathAddedEvent' - $ref: '#/components/schemas/DataFlowEdgeAddedEvent' - $ref: '#/components/schemas/DataFlowEdgeDeletedEvent' - $ref: '#/components/schemas/DataFlowByoPathDeletedEvent' discriminator: propertyName: event_type mapping: DATA_FLOW_PATH_ADDED: '#/components/schemas/DataFlowPathAddedEvent' DATA_FLOW_EDGE_ADDED: '#/components/schemas/DataFlowEdgeAddedEvent' DATA_FLOW_EDGE_DELETED: '#/components/schemas/DataFlowEdgeDeletedEvent' DATA_FLOW_PATH_SUPPRESSED: '#/components/schemas/DataFlowPathSuppressedEvent' DATA_FLOW_PATH_UNSUPPRESSED: '#/components/schemas/DataFlowPathUnsuppressedEvent' DATA_FLOW_BYO_PATH_DELETED: '#/components/schemas/DataFlowByoPathDeletedEvent' additionalProperties: false PostEventsRequest: type: object description: Create lineage events or upload lineage data event oneOf: - $ref: '#/components/schemas/StaticAnalysisPathsApiRequest' - $ref: '#/components/schemas/CrossServiceDataStoreApiRequest' - $ref: '#/components/schemas/CrossServiceEdgeApiRequest' - $ref: '#/components/schemas/EventEnvelope' discriminator: propertyName: type mapping: CODE: '#/components/schemas/StaticAnalysisPathsApiRequest' DATA_STORE: '#/components/schemas/CrossServiceDataStoreApiRequest' EDGE: '#/components/schemas/CrossServiceEdgeApiRequest' LINEAGE_EVENT: '#/components/schemas/EventEnvelope' ComparisonMetadata: type: object description: Timestamps, file paths, and component information for the comparison. properties: baseTimestamp: type: string description: ISO timestamp of base version. compareTimestamp: type: string description: ISO timestamp of compare version. comparisonDate: type: string description: ISO timestamp when comparison ran. componentName: type: string description: Name of the component being compared. baseNamespace: type: string description: Namespace identifier in base version. compareNamespace: type: string description: Namespace identifier in compare version. baseComponentId: type: string description: Component identifier in base version. compareComponentId: type: string description: Component identifier in compare version. baseVersionId: type: string description: Base version/run ID. compareVersionId: type: string description: Compare version/run ID. baseScaPrimeVersion: type: string description: >- SCA-prime tool version that produced the base run. Absent when the base run did not originate from the SCA tool (e.g. imported ground truth). compareScaPrimeVersion: type: string description: >- SCA-prime tool version that produced the compare run. Absent when the compare run did not originate from the SCA tool. filterSet: type: object description: >- The payload filter set applied to this report, if any. Absent when no filter set was applied. properties: name: type: string description: Name of the applied filter set. includedPaths: type: integer description: Number of ground-truth paths included by the filter set. totalPaths: type: integer description: >- Total ground-truth paths available before the filter set was applied. required: - name - includedPaths - totalPaths mappingJoinMultiplicity: type: object description: >- Optional diagnostics for duplicate field-mapping join keys that can multiply rows in the comparison. properties: baseDuplicateKeyCount: type: integer description: Number of mapping join keys duplicated in the base dataset. compareDuplicateKeyCount: type: integer description: Number of mapping join keys duplicated in the compare dataset. crossProductKeyCount: type: integer description: >- Number of join keys present on both sides where duplicate rows would create cross-product matches. extraJoinedRows: type: integer description: >- Additional joined rows introduced beyond a single expected row per key. samples: type: array description: >- All duplicated mapping keys that contribute to join multiplication. items: type: object properties: pathPayloadName: type: string ingressField: type: string egressField: type: string baseCount: type: integer compareCount: type: integer joinedRows: type: integer extraJoinedRows: type: integer required: - pathPayloadName - ingressField - egressField - baseCount - compareCount - joinedRows - extraJoinedRows required: - baseTimestamp - compareTimestamp - comparisonDate - componentName - baseNamespace - compareNamespace - baseComponentId - compareComponentId - baseVersionId - compareVersionId SummarySection: type: object description: >- Aggregate statistics for a qualification level (fully or partially qualified). properties: total: type: integer description: Total path count. full: type: integer description: Paths with full match (green). partial: type: integer description: Paths with partial match (yellow). missing: type: integer description: Missing paths (red). highQualityTotal: type: integer description: Paths where all completeness = KNOWN_COMPLETE. highQualityFull: type: integer description: High quality paths with full match. highQualityPartial: type: integer description: High quality paths with partial match. highQualityMissing: type: integer description: High quality paths that are missing. lowQualityTotal: type: integer description: Paths with incomplete base version data. lowQualityFull: type: integer description: Low quality paths with full match. lowQualityPartial: type: integer description: Low quality paths with partial match. lowQualityMissing: type: integer description: Low quality paths that are missing. required: - total - full - partial - missing - highQualityTotal - highQualityFull - highQualityPartial - highQualityMissing - lowQualityTotal - lowQualityFull - lowQualityPartial - lowQualityMissing ComparisonSummary: type: object description: Aggregate counts and percentages for the comparison. properties: fullyQualified: description: Stats for fully qualified paths. $ref: '#/components/schemas/SummarySection' partiallyQualified: description: Stats for partially qualified paths. $ref: '#/components/schemas/SummarySection' required: - fullyQualified - partiallyQualified IngressInfo: type: object description: Input interface details for a path. properties: id: type: string description: Interface identifier. payloadName: type: string description: Payload name (e.g., "EventStream"). signatureName: type: string description: Signature name. schemaName: type: string description: Schema name. required: - id - payloadName - signatureName - schemaName EgressInfo: type: object description: Output interface details for a path. properties: id: type: string description: Interface identifier. payloadName: type: string description: Payload name (e.g., "EventStream"). signatureName: type: string description: Signature name. schemaName: type: string description: Schema name. required: - id - payloadName - signatureName - schemaName OverallStatusEnum: type: string description: Overall comparison result for a path. enum: - FULL - PARTIAL - MISSING QualityEnum: type: string description: Ground truth quality based on completeness dimensions. enum: - HIGH - LOW StatusEnum: type: string description: Comparison result status between base and compare versions. enum: - PASS - FAIL - WARNING - INFO - NA DimensionResult: type: object description: Comparison result for a single dimension. properties: status: $ref: '#/components/schemas/StatusEnum' base: type: string description: Base value. compare: type: string description: Compare value. baseCount: type: integer description: Count in base version. compareCount: type: integer description: Count in compare version. missingCount: type: integer description: Count of missing items. reorderedCount: type: integer description: Count of reordered items. mismatches: type: integer description: Count of mismatches. required: - status - base - compare - baseCount - compareCount - missingCount - reorderedCount - mismatches PresenceEnum: type: string description: Whether an item exists in the base or compare version. enum: - PRESENT - ABSENT - EXTRA CompletenessEnum: type: string description: Ground truth completeness level. enum: - KNOWN_COMPLETE - KNOWN_INCOMPLETE - UNKNOWN SeverityEnum: type: string description: Issue severity level for reporting. enum: - ERROR - WARNING - REVIEW - INFO - OK FieldDetail: type: object description: Comparison detail for a single field. properties: fieldName: type: string description: Field name. fieldType: type: string description: Field data type. base: $ref: '#/components/schemas/PresenceEnum' compare: $ref: '#/components/schemas/PresenceEnum' status: $ref: '#/components/schemas/StatusEnum' completeness: $ref: '#/components/schemas/CompletenessEnum' severity: $ref: '#/components/schemas/SeverityEnum' required: - fieldName - fieldType - base - compare - status - completeness - severity MappingDetail: type: object description: Comparison detail for a field mapping. properties: ingressField: type: string description: Source field name. egressField: type: string description: Target field name. base: $ref: '#/components/schemas/PresenceEnum' compare: $ref: '#/components/schemas/PresenceEnum' status: $ref: '#/components/schemas/StatusEnum' completeness: $ref: '#/components/schemas/CompletenessEnum' severity: $ref: '#/components/schemas/SeverityEnum' kind: $ref: '#/components/schemas/FieldMappingKind' required: - ingressField - egressField - base - compare - status - completeness - severity CodeStepDetail: type: object description: Comparison detail for a code transformation step. properties: stepOrder: type: integer description: Order in the transformation chain. base: $ref: '#/components/schemas/PresenceEnum' compare: $ref: '#/components/schemas/PresenceEnum' status: $ref: '#/components/schemas/StatusEnum' ingressField: type: string description: Associated input field. egressField: type: string description: Associated output field. completeness: $ref: '#/components/schemas/CompletenessEnum' severity: $ref: '#/components/schemas/SeverityEnum' required: - stepOrder - base - compare - status - ingressField - egressField - completeness - severity PathAnchorDetail: type: object description: Comparison detail for a code anchor. properties: anchorName: type: string description: Code anchor name (e.g., class/file name). filePath: type: string description: Path to source file. base: $ref: '#/components/schemas/PresenceEnum' compare: $ref: '#/components/schemas/PresenceEnum' baseLine: type: string description: Base line number. compareLine: type: string description: Compare line number. status: $ref: '#/components/schemas/StatusEnum' completeness: $ref: '#/components/schemas/CompletenessEnum' severity: $ref: '#/components/schemas/SeverityEnum' required: - anchorName - filePath - base - compare - baseLine - compareLine - status - completeness - severity PathDetails: type: object description: Detailed field, mapping, and code step comparisons for a path. properties: ingressFields: type: array description: Input field comparisons. items: $ref: '#/components/schemas/FieldDetail' egressFields: type: array description: Output field comparisons. items: $ref: '#/components/schemas/FieldDetail' mappings: type: array description: Field mapping comparisons. items: $ref: '#/components/schemas/MappingDetail' codeSteps: type: array description: Data flow step comparisons. items: $ref: '#/components/schemas/CodeStepDetail' pathAnchors: type: array description: Code anchor comparisons. items: $ref: '#/components/schemas/PathAnchorDetail' required: - ingressFields - egressFields - mappings - codeSteps - pathAnchors PathResult: type: object description: Per-path comparison result between base and compare versions. properties: pathId: type: string description: Unique path identifier (pathPayloadName). ingress: description: Input interface details. $ref: '#/components/schemas/IngressInfo' egress: description: Output interface details. $ref: '#/components/schemas/EgressInfo' overallStatus: $ref: '#/components/schemas/OverallStatusEnum' quality: $ref: '#/components/schemas/QualityEnum' notes: type: string description: Summary of issues found. dimensions: type: object description: Per-dimension comparison results. additionalProperties: $ref: '#/components/schemas/DimensionResult' details: description: Detailed field/mapping comparisons. $ref: '#/components/schemas/PathDetails' pathType: description: Whether this path came from a scan or a user override (BYO). $ref: '#/components/schemas/PathType' required: - pathId - ingress - egress - overallStatus - quality - notes - dimensions - details ExtraPath: type: object description: A path found in the compare version but not in the base version. properties: extraPathId: type: string description: Identifier (e.g., "extra-001"). ingressPayload: type: string description: Input payload name. egressPayload: type: string description: Output payload name. pathPayloadName: type: string description: Path payload name. required: - extraPathId - ingressPayload - egressPayload - pathPayloadName ComparisonResult: type: object description: >- Top-level object containing all comparison data between a base and compare lineage export. properties: metadata: description: Timestamps, file paths, and component info. $ref: '#/components/schemas/ComparisonMetadata' summary: description: Aggregate counts and percentages. $ref: '#/components/schemas/ComparisonSummary' paths: type: array description: Per-path comparison results. items: $ref: '#/components/schemas/PathResult' extraPaths: type: array description: Paths in compare but not in base. items: $ref: '#/components/schemas/ExtraPath' required: - metadata - summary - paths - extraPaths EdgeBoundary: type: object description: One side (source or destination) of a cross-service edge. properties: component_id: type: string format: uuid description: The component UUID. component_name: type: string description: The human-readable component name. payload_name: type: string description: The payload name associated with this endpoint. kind: type: string description: > The kind of boundary this endpoint represents. Maps to DynamoDB Source.Type / Destination.Type (unconstrained string). Values: 'egress' (source code boundary), 'ingress' (destination code boundary), 'DATA_STORE' (data store component). xgress_id: type: string description: The resolved egress or ingress ID, if available. required: - component_id - component_name - payload_name - kind LineageEdgeFieldMapping: type: object description: A field-level mapping on a cross-service edge. properties: source_field: type: string description: The field name on the source side of the edge. destination_field: type: string description: The field name on the destination side of the edge. notes: type: string description: Optional notes about this field mapping. required: - source_field - destination_field LineageEdge: type: object description: > A cross-service edge connecting two components. This schema is used for both read (GET) and write (POST/PUT) operations to enable round-trip editing. Fields marked readOnly are returned by GET but ignored on POST/PUT. Fields marked writeOnly are accepted on POST/PUT but not returned in GET. properties: id: type: string readOnly: true description: Server-assigned edge ID. kind: type: string readOnly: true description: > Classification of this edge. Maps to DynamoDB EdgeSchema.Type which is constrained to enum('cross_service') — the only value today. example: cross_service namespace: type: string description: The namespace this edge belongs to. source: $ref: '#/components/schemas/EdgeBoundary' destination: $ref: '#/components/schemas/EdgeBoundary' field_mappings: type: array description: Field-level mappings captured on this edge. minItems: 1 items: $ref: '#/components/schemas/LineageEdgeFieldMapping' reason: type: string writeOnly: true description: >- Optional reason for creating or updating this edge (stored in audit trail, not returned in GET). required: - source - destination - field_mappings LineageEdgeListResponse: type: object description: Response containing a list of edge resources. properties: edges: type: array items: $ref: '#/components/schemas/LineageEdge' required: - edges ComponentSummaryResource: type: object description: Lightweight component summary for listing. properties: id: type: string format: uuid description: Component UUID. name: type: string description: Human-readable component name. type: type: string description: Component type (e.g. "service", "database", "table", "data_store"). namespace: type: string description: The namespace this component belongs to. last_updated: type: string description: ISO timestamp of last update. friendly_name: type: string description: Optional friendly display name. metrics: type: object properties: ingress_count: type: integer egress_count: type: integer path_count: type: integer repo_name: type: string description: Repository name (for code components). required: - id - name - type ComponentListResponse: type: object description: Response containing a list of component summaries. properties: components: type: array items: $ref: '#/components/schemas/ComponentSummaryResource' required: - components PathBoundary: type: object description: > One side (ingress or egress) of a path, with full boundary data inlined. Matches the write model structure for round-trip editing. properties: id: type: string format: uuid description: The boundary (ingress/egress) ID. kind: type: string description: The boundary kind (e.g. "postgres", "gateway_response"). signature_name: type: string description: The signature name (e.g. package/class/method). schema: type: object description: Schema definition for this boundary. additionalProperties: true payload_name: type: string description: The payload name associated with this boundary. description: type: string description: Optional description of this boundary. required: - signature_name PathFieldMapping: type: object description: A field-level mapping on a path (ingress to egress). properties: ingress_field: type: string description: The field name on the ingress side. egress_field: type: string description: The field name on the egress side. notes: type: string description: Optional notes about this field mapping. kind: allOf: - $ref: '#/components/schemas/FieldMappingKind' description: The type of data flow this mapping represents. required: - ingress_field - egress_field PathCodeAnchor: type: object description: A code location anchor associated with a path. properties: anchor_id: type: string description: Unique identifier for this anchor. name: type: string description: Human-readable name for this anchor. file: type: string description: File path relative to project root. line_start: type: integer description: Starting line number. line_end: type: integer description: Ending line number. column_start: type: integer description: Starting column number. column_end: type: integer description: Ending column number. url: type: string description: Full URL to this code location (if available). required: - anchor_id LineagePath: type: object description: > A path connecting an ingress to an egress within a component. Boundary data (schema, signature, kind) is inlined for round-trip editing. Fields marked readOnly are returned by GET but ignored on POST/PUT. properties: path_id: type: string format: uuid readOnly: true description: Server-assigned path ID. path_type: type: string enum: - SCAN_OUTPUT - USER_OVERRIDE readOnly: true description: Whether this path came from a scan or user override. is_suppressed: type: boolean readOnly: true description: Whether this path is currently suppressed. default: false ingress: $ref: '#/components/schemas/PathBoundary' egress: $ref: '#/components/schemas/PathBoundary' field_mappings: type: array items: $ref: '#/components/schemas/PathFieldMapping' code_anchors: type: array items: $ref: '#/components/schemas/PathCodeAnchor' transformation_summary: type: string description: Brief summary of the data transformation on this path. payload_name: type: string description: The payload name for this path. completeness: $ref: '#/components/schemas/Completeness' reason: type: string writeOnly: true description: Optional reason for creating or updating this path. effective_since_commit_sha: type: string writeOnly: true description: > Commit SHA this path is effective from. When omitted, defaults to the latest scanned commit for the component. The backend resolves the corresponding commit timestamp from the scan history. required: - ingress - egress ComponentDetailResource: type: object description: > Full component detail with paths in self-contained (round-trip) format. For CODE components, paths include inline ingress/egress boundary data. For DATA_STORE components, the schema field list is included. properties: id: type: string format: uuid description: Component UUID. name: type: string description: Human-readable component name. type: type: string enum: - CODE - DATA_STORE description: Component type ("CODE" or "DATA_STORE"). namespace: type: string description: The namespace this component belongs to. friendly_name: type: string description: Optional friendly display name. paths: type: array description: Paths with inline boundary data (CODE components only). items: $ref: '#/components/schemas/LineagePath' store_kind: type: string enum: - dynamodb - redis - elasticache - database - kafka - other description: Storage technology type (DATA_STORE components only). schema: type: object description: Schema definition (DATA_STORE components only). properties: fields: type: array items: type: object properties: name: type: string type: type: string required: - name - type metadata: type: object description: Component metadata. additionalProperties: true required: - id - name - type FieldPairOrigin: type: string description: | Provenance of a field pair row. SCAN = produced by scanner output. BYO_ADD / BYO_CHANGE / BYO_SUPPRESS = produced by the corresponding user-initiated event. Stored, not derived — carries history. enum: - SCAN - BYO_ADD - BYO_CHANGE - BYO_SUPPRESS FieldPairEndpoint: type: object description: One side (ingress or egress) of a field pair. properties: componentId: type: string description: The component containing the xgress. xgressId: type: string description: The ingress or egress (xgress) ID. fieldPath: type: string description: >- Field path within the xgress payload (e.g. "$.payload.amount.value"). dataType: type: string description: Normalized data type for this field. required: - componentId - xgressId - fieldPath FieldPair: type: object description: >- A logical field-to-field mapping formed by rolling up strands. Unit of change tracking and approval in the field-level focused views. properties: fieldPairGroupId: type: string description: Stable identity of the rolled-up field pair. payloadGroupId: type: string description: Stable identity of the parent payload (xgress pair). componentId: type: string description: The component this field pair lives on. ingress: $ref: '#/components/schemas/FieldPairEndpoint' egress: $ref: '#/components/schemas/FieldPairEndpoint' origin: $ref: '#/components/schemas/FieldPairOrigin' isSuppressed: type: boolean description: Whether this field pair is currently suppressed in projections. upstreamSourcesCount: type: integer description: Number of upstream sources feeding this pair's ingress field. downstreamConsumersCount: type: integer description: Number of downstream consumers of this pair's egress field. upstreamDependencies: type: array description: >- Fields feeding this pair's ingress field, each at its minimum hop distance with the path taken to reach it. The component-level dependency summary is aggregated from these client-side. items: $ref: '#/components/schemas/FieldDependency' downstreamDependencies: type: array description: >- Fields consuming this pair's egress field, each at its minimum hop distance with the path taken to reach it. items: $ref: '#/components/schemas/FieldDependency' strandIds: type: array description: >- Identifiers of the strands that rolled up into this field pair (for traceback to the underlying scanner output). items: type: string createdAt: type: string format: date-time description: When this row was produced. createdBy: type: string description: >- Actor that produced this row (user or api key id). Absent for SCAN-origin rows. required: - fieldPairGroupId - payloadGroupId - componentId - ingress - egress - origin - isSuppressed GetFieldPairsResponse: type: object description: List of field pairs for a component. properties: fieldPairs: type: array items: $ref: '#/components/schemas/FieldPair' required: - fieldPairs StaticAnalysisPathsUploadRequest: type: object description: >- The lineage data for a component. This is not actually part of the API, but is used to generate the type for validation at the CLI and in the backend lineage queue handler. properties: paths: type: array items: $ref: '#/components/schemas/StaticAnalysisDataFlowPath' run_id: type: string description: The ID of the run that the paths belong to external_component_id: type: string description: Optional ID of the external component that was analyzed type: type: string description: The type of component that was analyzed const: CODE name: type: string description: The name of the component that was analyzed metadata: type: object description: Additional metadata for the component. properties: extras: type: object additionalProperties: type: string required: - paths - run_id CrossServiceDataStore: type: object description: Request to upload non code based BYOL data additionalProperties: false properties: external_component_id: type: string description: The provided external ID for the data store run_id: type: string description: The version ID for this data store type: type: string const: DATA_STORE description: The type of data store schema: type: object additionalProperties: false required: - fields properties: fields: type: array minItems: 1 items: type: object additionalProperties: false properties: name: type: string description: The name of the field type: type: string description: The type of the field required: - name - type table_metadata: type: object additionalProperties: false required: - type - table_name properties: type: type: string description: The type of data store enum: - dynamodb - redis - elasticache - database - kafka - other table_name: type: string description: The name of the data store extras: type: object description: Additional metadata for the data store. additionalProperties: type: string required: - external_component_id - run_id - type - table_metadata - schema CrossServiceEdge: type: object additionalProperties: false required: - type - field_mappings - source - destination properties: run_id: type: string description: The ID of the run that this data belongs to type: type: string const: EDGE field_mappings: type: array minItems: 1 items: type: object additionalProperties: false required: - source_field - destination_field properties: source_field: type: string destination_field: type: string notes: type: string source: type: object additionalProperties: false required: - source_component_name - type properties: component_id: type: string description: Id of the source component source_component_name: type: string description: Name of the source component egress_id: type: string description: Id of the source entity type: type: string description: the type of edge connection payload_name: type: string description: The name of the payload source destination: type: object additionalProperties: false required: - destination_component_name - type properties: component_id: type: string description: Id of the destination component destination_component_name: type: string description: Name of the destination component ingress_id: type: string description: Id of the destination entity type: type: string description: the type of edge connection payload_name: type: string description: The name of the payload destination EgressSchemaV0: type: object description: Legacy DARN-based egress schema key properties: version: type: string const: V0 darn: $ref: '#/components/schemas/DataAssetResourceName' required: - version - darn additionalProperties: false EgressSchemaV1: type: object description: Structured, DARN-free egress schema key properties: version: type: string const: V1 egress_callsite_id: type: string description: Stable identifier of the egress callsite (tooling/build-derived). egress_callsite_hints: type: object additionalProperties: false properties: file_path: type: string nullable: true line: type: integer nullable: true minimum: 0 column: type: integer nullable: true minimum: 0 function: type: string nullable: true package: type: string nullable: true service: type: string nullable: true type_fqn: type: string description: Fully-qualified logical type name. type_namespace: type: string nullable: true env: type: object additionalProperties: false properties: language: type: string nullable: true runtime: type: string nullable: true tool: type: string nullable: true tool_version: type: string nullable: true required: - version - egress_callsite_id - type_fqn additionalProperties: false EgressSchemaMergeKey: type: object description: Versioned EgressSchema merge-key (version-level union) oneOf: - $ref: '#/components/schemas/EgressSchemaV0' - $ref: '#/components/schemas/EgressSchemaV1' discriminator: propertyName: version mapping: V0: '#/components/schemas/EgressSchemaV0' V1: '#/components/schemas/EgressSchemaV1' EgressSchema: type: object description: EgressSchema merge-key wrapper properties: kind: type: string const: EgressSchema data: $ref: '#/components/schemas/EgressSchemaMergeKey' required: - kind - data additionalProperties: false IngressToEgressV0: type: object description: Ingress-to-egress flow key V0 properties: version: type: string const: V0 ingress_callsite: type: string nullable: true egress_callsite: type: string nullable: true flow_id: type: string nullable: true service: type: string nullable: true notes: type: string nullable: true required: - version additionalProperties: false IngressToEgressMergeKey: type: object description: Versioned IngressToEgress merge-key (version-level union) oneOf: - $ref: '#/components/schemas/IngressToEgressV0' discriminator: propertyName: version mapping: V0: '#/components/schemas/IngressToEgressV0' IngressToEgress: type: object description: IngressToEgress merge-key wrapper properties: kind: type: string const: IngressToEgress data: $ref: '#/components/schemas/IngressToEgressMergeKey' required: - kind - data additionalProperties: false MergeKey: type: object description: MergeKey (kind-level union) oneOf: - $ref: '#/components/schemas/EgressSchema' - $ref: '#/components/schemas/IngressToEgress' discriminator: propertyName: kind mapping: EgressSchema: '#/components/schemas/EgressSchema' IngressToEgress: '#/components/schemas/IngressToEgress' FakeResponseForTypeGeneration: type: object properties: fakeProperty3: oneOf: - $ref: '#/components/schemas/StaticAnalysisPathsUploadRequest' - $ref: '#/components/schemas/CrossServiceDataStore' - $ref: '#/components/schemas/CrossServiceEdge' mergeKey: $ref: '#/components/schemas/MergeKey'