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

# Read the latest drift checks

> Returns the most recent statistical process-control result for every table in this Workspace's catalog, which is how unexpected drift gets noticed.

## Access

An MCP token or a Parable token can call this operation. See [Authentication](/getting-started/authentication.md) for the kinds of token.

Your roles must grant `tenant.data.catalog`.

## Errors

* `WA-TN-001`: No Workspace context was supplied. Call from a Workspace context.


## OpenAPI

````yaml /api-reference/openapi.json get /api/catalog/table-spc-results
openapi: 3.0.3
info:
  description: >-
    Use the Workspace API to work with artifacts, connectors, Parables, and
    account resources.
  title: Workspace API
  version: v2026.10.22.1
servers: []
security: []
paths:
  /api/catalog/table-spc-results:
    get:
      tags:
        - Catalog
      summary: Read the latest drift checks
      description: >-
        Returns the most recent statistical process-control result for every
        table in this Workspace's catalog, which is how unexpected drift gets
        noticed.
      operationId: CatalogTableSpcResultsHandler
      parameters:
        - description: >-
            Workspace slug. Overrides subdomain-based workspace resolution when
            provided.
          in: header
          name: X-Tenant
          required: false
          schema:
            example: acme
            type: string
        - description: Optional request correlation ID echoed back in the response.
          in: header
          name: X-Request-ID
          required: false
          schema:
            example: 550e8400-e29b-41d4-a716-446655440000
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/TenantTableSpcResultsResponse'
                  links:
                    $ref: '#/components/schemas/ResponseLinks'
                  meta:
                    $ref: '#/components/schemas/ResponseMeta'
                required:
                  - data
                  - meta
                type: object
          description: Successful response
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The request is not valid. `detail` says why.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The token is missing, malformed, revoked, or expired.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: >-
            The token cannot make this request. For example, the roles of its
            owner do not allow the operation.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The request failed on the server.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
      security:
        - bearerAuth: []
      x-codeSamples:
        - label: TypeScript SDK
          lang: typescript
          source: |-
            import { WebApiSDK } from "@parable-platform/web-api-sdk";

            const sdk = new WebApiSDK({
              baseUrl: process.env.PARABLE_API_URL!,
              auth: { token: process.env.PARABLE_API_TOKEN! },
              requestInterceptor: (config) => ({
                ...config,
                headers: { ...config.headers, "X-Tenant": process.env.PARABLE_WORKSPACE! },
              }),
            });

            const result = await sdk.catalog.tableSpcResults();
        - label: Python SDK
          lang: python
          source: |-
            import os

            from parable_web_api_sdk import ClientConfig, WebApiSDK

            sdk = WebApiSDK(
                ClientConfig(
                    base_url=os.environ["PARABLE_API_URL"],
                    auth_token=os.environ["PARABLE_API_TOKEN"],
                    default_headers={"X-Tenant": os.environ["PARABLE_WORKSPACE"]},
                )
            )

            result = sdk.catalog.table_spc_results()
        - label: Rust SDK
          lang: rust
          source: >-
            use parable_web_api_sdk::{ClientConfig, RequestOptions, WebApiSdk};


            let sdk = WebApiSdk::new(ClientConfig::with_base_url(
                std::env::var("PARABLE_API_URL")?,
                Some(std::env::var("PARABLE_API_TOKEN")?),
                None,
            ))?;

            let options = RequestOptions::with_header("X-Tenant",
            std::env::var("PARABLE_WORKSPACE")?, None, None);


            let result = sdk.catalog.table_spc_results(
                Some(&options)
            ).await?;
        - label: Go SDK
          lang: go
          source: "sdk, err := webapisdk.New(webapisdk.SDKConfig{\n\tBaseURL: os.Getenv(\"PARABLE_API_URL\"),\n\tAuth:    &webapisdk.AuthConfig{Token: os.Getenv(\"PARABLE_API_TOKEN\")},\n\tRequestInterceptor: func(ctx context.Context, req *http.Request) error {\n\t\treq.Header.Set(\"X-Tenant\", os.Getenv(\"PARABLE_WORKSPACE\"))\n\t\treturn nil\n\t},\n})\nif err != nil {\n\treturn err\n}\n\nresult, err := sdk.CatalogNamespace.TableSpcResults(ctx)"
components:
  schemas:
    TenantTableSpcResultsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/TableSpcResult'
          type: array
        resultsVersion:
          type: string
        tenantId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
      required:
        - tenantId
        - resultsVersion
        - results
      type: object
    ResponseLinks:
      properties:
        first:
          nullable: true
          type: string
        last:
          nullable: true
          type: string
        next:
          nullable: true
          type: string
        prev:
          nullable: true
          type: string
      type: object
    ResponseMeta:
      properties:
        requestId:
          description: Unique identifier for the request
          type: string
        totalCount:
          description: Total count of items for paginated responses
          nullable: true
          type: integer
      required:
        - requestId
      type: object
    ProblemDetails:
      description: An error response in the Problem Details format (RFC 9457).
      properties:
        code:
          description: The stable error code, when the problem has one.
          example: WA-VL-001
          type: string
        detail:
          description: What went wrong with this request.
          type: string
        details:
          description: >-
            Structured facts about the refusal, such as the entity or the path
            it concerns. Only some refusals have it.
        errors:
          description: >-
            The fields or filters that failed validation. Only a validation or
            filter error has it.
        requestId:
          description: >-
            The ID of the request, when the problem has one. The `X-Request-ID`
            response header always has it.
          type: string
        status:
          description: The HTTP status code.
          example: 400
          type: integer
        title:
          description: A short summary, usually the text of the HTTP status.
          example: Bad Request
          type: string
        type:
          description: >-
            The problem type. It is `about:blank`: the status and `code`
            identify the problem.
          example: about:blank
          type: string
      required:
        - type
        - title
        - status
        - detail
      type: object
    TableSpcResult:
      description: |-
        SPC analysis output for one Tap's table at one run. It carries the SPC
        state of every tracked series. Series identity is stable across runs, so
        dashboards can chart violations over time.
      properties:
        capturedAt:
          description: >-
            ISO8601 datetime string. Epoch wire values keep this scalar and
            declare x-temporal-format (unix, unix_millis, unix_micros,
            unix_nanos) on the property; the unit is never guessed from digit
            count.
          format: date-time
          type: string
        overallStatus:
          $ref: '#/components/schemas/SpcRunStatus'
        resultId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
        runId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
        series:
          items:
            $ref: '#/components/schemas/SpcSeriesResult'
          type: array
        tapContractId:
          description: |-
            The Tap this result describes (provider connection.id). Null on some
            older results.
          nullable: true
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
        windowSize:
          description: >-
            Size of the history window (in number of TableShapeStats rows) used
            to

            compute control limits and rule firings.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
      required:
        - resultId
        - runId
        - capturedAt
        - windowSize
        - overallStatus
        - series
      type: object
    SpcRunStatus:
      description: |-
        The outcome of a statistical process control (SPC) run or series.
        INSUFFICIENT_HISTORY means the window has fewer points than
        TapSpcConfig.minHistoryForViolation.
      enum:
        - IN_BOUNDS
        - WARNING
        - OUT_OF_BOUNDS
        - INSUFFICIENT_HISTORY
      type: string
    SpcSeriesResult:
      description: |-
        SPC state for one tracked series. seriesId is stable: e.g.
        "table.rowCount" or "column.email.nullPct".
      properties:
        latestValue:
          format: double
          type: number
        lowerControl3Sigma:
          format: double
          type: number
        lowerWarning2Sigma:
          format: double
          type: number
        mean:
          format: double
          type: number
        seriesId:
          type: string
        seriesKind:
          $ref: '#/components/schemas/SpcSeriesKind'
        status:
          $ref: '#/components/schemas/SpcRunStatus'
        stddev:
          format: double
          type: number
        trendSlope:
          format: double
          nullable: true
          type: number
        upperControl3Sigma:
          format: double
          type: number
        upperWarning2Sigma:
          format: double
          type: number
        violations:
          items:
            $ref: '#/components/schemas/SpcRuleViolation'
          type: array
      required:
        - seriesId
        - seriesKind
        - latestValue
        - mean
        - stddev
        - upperControl3Sigma
        - lowerControl3Sigma
        - upperWarning2Sigma
        - lowerWarning2Sigma
        - status
        - violations
      type: object
    SpcSeriesKind:
      description: |-
        Tracked SPC series kind. TapSpcConfig.trackedSeries also uses it to say
        which series Parable monitors.
      enum:
        - TABLE_ROW_COUNT
        - COLUMN_NULL_PCT
        - COLUMN_VALIDATION_FAILURE_PCT
        - COLUMN_DISTINCT_COUNT
        - COLUMN_AVG
      type: string
    SpcRuleViolation:
      description: One Western Electric rule firing on a series.
      properties:
        description:
          type: string
        pointsInvolved:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        ruleId:
          type: string
      required:
        - ruleId
        - description
        - pointsInvolved
      type: object
  headers:
    X-Request-ID:
      description: >-
        The ID of the request. It is the `X-Request-ID` value that you sent, or
        an ID that the server made. Give it when you report a problem.
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      description: >-
        A personal access token, which starts with `pat_`. A Parable token can
        call each operation that the roles of its owner allow. An MCP token can
        call only the read operations that are open to agents. A SQL token does
        not work on this API.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.