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'