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

# List every Tap this Workspace could use

> Lists the Taps offered by all the Connectors installed in this Workspace. A Tap is one stream of data a Connector can pull.

> **[List every Tap this Workspace could use](/protocols/_generated/mcp/web-api/connectors#tool-list_every_tap)**
>
> `list_every_tap`


## OpenAPI

````yaml /protocols/_generated/openapi/web-api.json get /api/connectors/tenant-connector-taps
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/connectors/tenant-connector-taps:
    get:
      tags:
        - Connectors
      summary: List every Tap this Workspace could use
      description: >-
        Lists the Taps offered by all the Connectors installed in this
        Workspace. A Tap is one stream of data a Connector can pull.
      operationId: ConnectorsTenantConnectorTapsHandler
      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:
                    items:
                      $ref: '#/components/schemas/ConnectorTap'
                    type: array
                  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.connectors.tenantConnectorTaps();
        - 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.connectors.tenant_connector_taps()
        - 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.connectors.tenant_connector_taps(
                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.ConnectorsNamespace.TenantConnectorTaps(ctx)"
components:
  schemas:
    ConnectorTap:
      description: |-
        Definition of a data extraction tap for a connector.
        A tap represents a single endpoint/entity type that can be extracted.
      properties:
        access:
          description: |-
            The access facts this tap carries for source permissions.
            Null = none.
          oneOf:
            - $ref: '#/components/schemas/TapAccessConfig'
            - enum:
                - null
              nullable: true
              type: object
        createdAt:
          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
        createdBy:
          description: UUID v4 string as base62
          pattern: ^[0-9A-Za-z]{1,22}$
          type: string
        customFields:
          description: Capture config for dynamic/custom fields. Null = capture off.
          oneOf:
            - $ref: '#/components/schemas/TapCustomFieldsConfig'
            - enum:
                - null
              nullable: true
              type: object
        dataKind:
          description: |-
            Materialization class for this tap's records on the promote path.
            Null = undeclared; the promote path applies documented defaults.
          oneOf:
            - $ref: '#/components/schemas/TapDataKindEnum'
            - enum:
                - null
              nullable: true
              type: string
        deduplicateAcrossLoads:
          description: >-
            Whether records with the same declared transform key are
            deduplicated

            across separate loads.
          type: boolean
        deletionSemantics:
          description: >-
            How deletions are detectable in this tap's source. Null =
            undeclared.
          oneOf:
            - $ref: '#/components/schemas/TapDeletionSemanticsEnum'
            - enum:
                - null
              nullable: true
              type: string
        description:
          description: Human-readable description of what this tap extracts
          nullable: true
          type: string
        docs:
          description: Reader-facing tap identity. Null for some older Taps.
          oneOf:
            - $ref: '#/components/schemas/TapDocumentation'
            - enum:
                - null
              nullable: true
              type: object
        enabledByDefault:
          description: Whether this tap is enabled by default for new connections
          type: boolean
        enabledSince:
          description: |-
            Start of the current uninterrupted default-enabled period. Null when
            disabled, or when the period started before Parable recorded it.
          format: date-time
          nullable: true
          type: string
        errorBodyRules:
          description: >-
            Rules that reclassify HTTP errors from the response body (retry vs
            skip).
          items:
            $ref: '#/components/schemas/ErrorBodyRule'
          nullable: true
          type: array
        extractionHook:
          description: Hook executed after extracting response records
          nullable: true
          type: string
        icon:
          description: Semantic Font Awesome glyph name. Null for some older Taps.
          nullable: true
          type: string
        id:
          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
        identityDirectory:
          description: >-
            Marks principal/account-directory taps (e.g. Slack users, Okta
            users).

            Directory taps are unioned into the account set downstream.
          type: boolean
        name:
          description: Unique name for this tap (e.g., 'repos', 'issues', 'users')
          maxLength: 80
          minLength: 1
          pattern: ^[a-z][a-z0-9_]*$
          type: string
        objectName:
          description: >-
            API object name for field discovery (e.g., 'User', 'Account' for
            Salesforce SOQL objects)
          nullable: true
          type: string
        parentContextFields:
          description: >-
            Mappings to inject parent record values into tap output records.

            Used on root taps fed by config fan-out when no traversal edge
            supplies

            parent context (e.g. team_id from synthetic parent records).
          items:
            $ref: '#/components/schemas/ParentContextFieldMapping'
          nullable: true
          type: array
        perParentAuth:
          description: >-
            Per-parent authentication or request headers. When unset the
            connector's

            default auth is used without parent-derived headers.
          oneOf:
            - $ref: '#/components/schemas/TapPerParentAuth'
            - enum:
                - null
              nullable: true
              type: object
        purpose:
          description: Free-form Markdown explaining why customers use this data stream.
          nullable: true
          pattern: ^[\s\S]*$
          type: string
        qualityConfig:
          oneOf:
            - $ref: '#/components/schemas/TapQualityConfig'
            - enum:
                - null
              nullable: true
              type: object
        rateLimitOverride:
          description: Rate limit overrides for this specific tap
          oneOf:
            - $ref: '#/components/schemas/ConnectorRateLimits'
            - enum:
                - null
              nullable: true
              type: object
        rateLimits:
          description: >-
            Per-tap rate limits (e.g. maxConcurrent) merged over connector
            defaults.
          oneOf:
            - $ref: '#/components/schemas/ConnectorRateLimits'
            - enum:
                - null
              nullable: true
              type: object
        requestHook:
          description: Hook executed before making transport requests
          nullable: true
          type: string
        requiredAccess:
          description: >-
            Read-only. The access this tap needs, derived from the connector's

            permissionModel and this tap's sync.scopes or objectName. Null when
            the

            tap lacks a required field or its connector has multiple auth
            strategies.

            Strategy-specific declarations are not yet supported.
          oneOf:
            - $ref: '#/components/schemas/TapRequiredAccess'
            - enum:
                - null
              nullable: true
              type: object
        responseExtraction:
          $ref: '#/components/schemas/ResponseExtractionConfig'
          description: How to extract records from API responses
        retentionPolicy:
          description: >-
            Source API data retention policy. Null if the source has no
            retention limit.
          oneOf:
            - $ref: '#/components/schemas/TapRetentionPolicy'
            - enum:
                - null
              nullable: true
              type: object
        schema:
          description: >-
            The schema describing the shape of the data this tap outputs.
            Customers

            render this in the data-catalog UI to enumerate available fields.
          type: object
        sync:
          $ref: '#/components/schemas/TapSyncConfig'
          description: Sync strategy and incremental parameters
        tombstoneMarkerColumn:
          description: >-
            Root schema field whose truthy value marks an explicit tombstone
            record.

            Required when deletionSemantics is tombstone.
          nullable: true
          type: string
        transportOptions:
          description: Prioritized transport options for this tap
          items:
            $ref: '#/components/schemas/TapTransportOption'
          type: array
        updatedAt:
          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
        updatedBy:
          description: UUID v4 string as base62
          pattern: ^[0-9A-Za-z]{1,22}$
          type: string
      required:
        - id
        - createdAt
        - createdBy
        - updatedAt
        - updatedBy
        - name
        - transportOptions
        - responseExtraction
        - sync
        - enabledByDefault
        - schema
        - deduplicateAcrossLoads
        - identityDirectory
      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
    TapAccessConfig:
      description: >-
        The access facts a tap carries for source permissions. The sync

        manifest carries it and the execution plan drops it: the access job
        reads

        it live, as the identity job reads identityDirectory.
      properties:
        defaultAudience:
          description: Overrides the connector's defaultAudience for this tap.
          oneOf:
            - $ref: '#/components/schemas/ConnectorDefaultAudienceEnum'
            - enum:
                - null
              nullable: true
              type: string
        roles:
          description: Which access facts the tap's rows are.
          items:
            $ref: '#/components/schemas/TapAccessRoleEnum'
          type: array
      required:
        - roles
      type: object
    TapCustomFieldsConfig:
      description: >-
        Capture config for dynamic/custom fields on the provider-pool promote
        path. Patterns route keys into `_custom_fields`; remaining

        undeclared keys land in `_raw_unknown_fields` when captureUnknownFields
        is

        true. Prefer patterns over per-workspace field ID allowlists.
      properties:
        captureUnknownFields:
          description: |-
            When true, undeclared keys that do not match known patterns land in
            `_raw_unknown_fields` instead of being dropped.
          type: boolean
        knownCustomFieldKeyPatterns:
          description: >-
            Glob-style patterns (prefix `customfield_*`, suffix `*__c`, or
            exact).
          items:
            type: string
          nullable: true
          type: array
      required:
        - captureUnknownFields
      type: object
    TapDataKindEnum:
      description: >-
        Materialization class for a tap's records on the
        ingestion-to-transformation

        promote path. Selects how the transformation layer materializes the
        stream.
      enum:
        - snapshot
        - event
        - changelog
      type: string
    TapDeletionSemanticsEnum:
      description: How deletions in the source are detectable for a tap.
      enum:
        - by_absence
        - tombstone
        - undetectable
      type: string
    TapDocumentation:
      description: >-
        Reader-facing identity for a connector tap. The longer explanation and

        glyph live beside this object on the tap because they have distinct
        scalar

        and validation contracts.
      properties:
        title:
          description: Short human-facing title used in catalog and configuration surfaces.
          maxLength: 80
          minLength: 2
          type: string
      required:
        - title
      type: object
    ErrorBodyRule:
      description: >-
        Rule for classifying HTTP errors by inspecting the response body.

        When the HTTP status code matches, a JMESPath expression extracts a
        value

        from the body and compares it against the retry and empty lists.
      properties:
        emptyValues:
          description: >-
            Values that mean the provider found no records for the request (Gong

            answers an empty window with a 404 naming it). A matching response
            is a

            page with zero records and the read completes; it is not an error
            and

            not a refusal.
          items:
            type: string
          nullable: true
          type: array
        jmesPath:
          description: JMESPath expression to extract a value from the response body
          type: string
        retryValues:
          description: Values that indicate the error is transient and should be retried
          items:
            type: string
          nullable: true
          type: array
        statusCode:
          description: HTTP status code this rule applies to
          format: int64
          maximum: 599
          minimum: 100
          type: integer
      required:
        - statusCode
        - jmesPath
      type: object
    ParentContextFieldMapping:
      description: >-
        =============================================================================

        Tap Definition Types

        =============================================================================

        Mapping from a target field name to a source field name in the parent
        record.

        Used to inject parent record values into child records during tap
        execution.
      properties:
        sourceField:
          description: Field name to read from parent record
          type: string
        targetField:
          description: Field name to set in child records
          type: string
      required:
        - targetField
        - sourceField
      type: object
    TapPerParentAuth:
      description: >-
        =============================================================================

        Per-Parent Authentication

        =============================================================================

        Per-parent authentication configuration for taps that iterate over
        records

        from a parent tap. A tap can mint a delegated service-account token or
        retain

        the connector credential and add a request header derived from its
        parent.
      properties:
        headerName:
          description: Request header added by `request_header`.
          nullable: true
          type: string
        impersonateField:
          description: Parent field containing the delegated service-account subject.
          nullable: true
          type: string
        method:
          description: >-
            `service_account` mints a delegated token. `request_header` keeps
            the

            connector authorization and adds one parent-derived request header.
          type: string
        quotaUserHeader:
          description: |-
            Optional HTTP header name to set the per-user value on each request
            (e.g., `x-goog-quota-user` so per-user quota is attributed to the
            impersonated user instead of the service account).
          nullable: true
          type: string
        valueField:
          description: >-
            Parent-record field path whose scalar value is written to
            `headerName`.
          nullable: true
          type: string
      required:
        - method
      type: object
    TapQualityConfig:
      properties:
        rules:
          items:
            $ref: '#/components/schemas/QualityRuleConfig'
          type: array
        spc:
          $ref: '#/components/schemas/TapSpcConfig'
      required:
        - rules
        - spc
      type: object
    ConnectorRateLimits:
      description: >-
        Connector Rate Limits

        Rate limiting and retry configuration for connectors and individual
        taps.

        Can be set at the connector level (global) and overridden per-tap.

        Rate limit configuration for a connector or tap.
      properties:
        admissionKind:
          $ref: '#/components/schemas/RequestAdmissionKindEnum'
          description: >-
            How provider requests are admitted. Absent means fixed: the limits
            below.

            provider_budget must be explicit and is the only kind that may carry

            providerBudgetPolicy.
        maxConcurrent:
          description: Maximum concurrent requests
          format: int64
          maximum: 9007199254740991
          minimum: 1
          nullable: true
          type: integer
        providerBudgetPolicy:
          oneOf:
            - $ref: '#/components/schemas/ProviderBudgetPolicy'
            - enum:
                - null
              nullable: true
              type: object
        requestsPerSecond:
          description: Maximum requests per second
          format: double
          minimum: 0.000001
          nullable: true
          type: number
        resetHeader:
          description: >-
            Response header containing the Unix epoch reset time (e.g.
            x-rate-limit-reset for Okta). Used as fallback when Retry-After is
            absent.

            It times the cooldown only; it does not by itself mark a 403 as a
            throttle.
          maxLength: 255
          nullable: true
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        retry:
          description: Retry behavior configuration
          oneOf:
            - $ref: '#/components/schemas/RetryConfig'
            - enum:
                - null
              nullable: true
              type: object
      required:
        - admissionKind
      type: object
    TapRequiredAccess:
      description: >-
        The access a Provider credential must carry before a tap can read its
        data.

        Derived on read from the connector's permissionModel and the tap's own

        declaration by connectordef.RequiredAccess. Never stored or authored, so
        it

        cannot drift from sync.scopes or objectName. Multiple auth strategies

        yield unknown until per-strategy declarations are supported. Combined

        permission models are unsupported and fail validation.
      properties:
        model:
          $ref: '#/components/schemas/ConnectorPermissionModelEnum'
          description: >-
            How the connector gates access. A connector with no permissionModel
            reads

            as none.
        values:
          description: >-
            oauth_scope: the tap's sync.scopes. object_acl: the tap's
            objectName.

            none: empty, because the credential works for the whole account or
            not at

            all.
          items:
            type: string
          type: array
      required:
        - model
        - values
      type: object
    ResponseExtractionConfig:
      description: >-
        =============================================================================

        Response Extraction

        =============================================================================

        How to extract records from an API response.
      properties:
        primaryKey:
          description: Primary key field name for deduplication (e.g., 'id')
          type: string
        responseFormat:
          description: >-
            Wire format of the response body. Defaults to JSON when null. Set to
            JSONL

            for newline-delimited JSON responses (one record per line, body is
            not a

            single JSON document), e.g. Mixpanel's Raw Event Export API. With
            JSONL,

            set responsePath to '@' so each line becomes a record.
          oneOf:
            - $ref: '#/components/schemas/ResponseFormatEnum'
            - enum:
                - null
              nullable: true
              type: string
        responsePath:
          description: |-
            JMESPath expression to extract records from response.
            Examples: '@' (response is array), 'data', 'results.items'
          nullable: true
          type: string
        responsePathFallback:
          description: >-
            Fallback JMESPath when the primary responsePath returns null.

            Handles polymorphic responses where the array may be at a different
            path

            (e.g., TestrRail suites: 'suites' normally, 'root_array' for
            single-suite projects).
          nullable: true
          type: string
        responseValidation:
          description: Validation rules for API response success/error handling
          oneOf:
            - $ref: '#/components/schemas/ResponseValidation'
            - enum:
                - null
              nullable: true
              type: object
        syntheticPrimaryKey:
          description: >-
            Synthetic primary key configuration. When present, generates a
            unique ID

            by hashing the specified fields. The primaryKey field becomes the
            output

            field name where the hash is stored (e.g., primaryKey: "id").
          oneOf:
            - $ref: '#/components/schemas/SyntheticPrimaryKeyConfig'
            - enum:
                - null
              nullable: true
              type: object
      required:
        - primaryKey
      type: object
    TapRetentionPolicy:
      description: >-
        =============================================================================

        Retention Policy

        =============================================================================

        Data retention policy for a tap's source API.

        When set, enables proactive alerting when ingestion gaps risk

        permanent data loss due to source-side retention expiry.
      properties:
        alertThresholdDays:
          description: |-
            Alert when remaining coverage buffer drops below this many days.
            Default: 7 days (alert fires when we are 7 days from losing data).
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        retentionDays:
          description: |-
            Maximum number of days the source API retains historical data.
            After this window, data is permanently unrecoverable.
            Example: Google Meet API = 30 days, Zoom Reports = 180 days.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - retentionDays
      type: object
    TapSyncConfig:
      description: >-
        =============================================================================

        Sync Configuration

        =============================================================================

        Sync strategy and incremental parameters for a tap.
      properties:
        asyncQuery:
          description: >-
            Async query configuration for APIs that use a create-poll-fetch
            pattern

            (e.g., Microsoft Purview audit logs). When present, the ingestion
            engine

            POSTs to create a query job, polls for completion, then fetches
            paginated results.
          oneOf:
            - $ref: '#/components/schemas/AsyncQueryConfig'
            - enum:
                - null
              nullable: true
              type: object
        cursorField:
          description: |-
            Cursor field for incremental sync watermarks (e.g., 'updated_at').
            Required when mode = INCREMENTAL.
          nullable: true
          type: string
        cursorValueFormat:
          description: >-
            Format of raw cursorField values on API records (partial watermark
            only).

            Stored control-plane watermarks remain ISO8601.
          oneOf:
            - $ref: '#/components/schemas/IncrementalTimeFormatEnum'
            - enum:
                - null
              nullable: true
              type: string
        incrementalParams:
          description: Configuration for incremental time-based filtering
          oneOf:
            - $ref: '#/components/schemas/IncrementalParamsConfig'
            - enum:
                - null
              nullable: true
              type: object
        maxLookbackDays:
          description: >-
            Maximum lookback days for a run without a watermark. When set, the

            watermarkless window is capped to min(global lookback,
            maxLookbackDays).

            Use for APIs with data retention limits (e.g., Zoom Report API
            rejects

            queries older than 12 months).
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        mode:
          $ref: '#/components/schemas/SyncModeEnum'
          description: 'Sync mode: FULL extracts all records, INCREMENTAL uses watermarks'
        refreshLookbackDays:
          description: Number of days to overlap each incremental request with prior work.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        scopes:
          description: >-
            OAuth scopes required for this tap (e.g., Google Workspace
            per-service scopes)
          items:
            type: string
          nullable: true
          type: array
      required:
        - mode
      type: object
    TapTransportOption:
      description: >-
        =============================================================================

        Transport Options

        =============================================================================

        A prioritized transport option for executing a tap.

        Taps can define multiple options and the runtime chooses by priority.
      properties:
        apiType:
          $ref: '#/components/schemas/ApiTypeEnum'
          description: API transport type for this option
        errorBodyRules:
          description: >-
            Rules for disambiguating HTTP error responses by inspecting the
            response body.

            Allows overriding the default error classification
            (transient/permanent/skippable)

            based on status code + body content.
          items:
            $ref: '#/components/schemas/ErrorBodyRule'
          nullable: true
          type: array
        graphqlConfig:
          description: GraphQL endpoint configuration (when apiType = GRAPHQL)
          oneOf:
            - $ref: '#/components/schemas/GraphQLEndpointConfig'
            - enum:
                - null
              nullable: true
              type: object
        pagination:
          $ref: '#/components/schemas/PaginationConfig'
          description: Pagination configuration for this transport option
        paginationHook:
          description: Optional hook reference for custom pagination behavior
          nullable: true
          type: string
        priority:
          description: Execution priority (1 is highest priority)
          format: double
          type: number
        providerBudgetOperation:
          description: >-
            The provider budget policy operation every request of this option
            charges.

            Provider-budget taps read pages, streams and batches; a tap with
            field

            discovery or an async job uses fixed admission.
          minLength: 1
          nullable: true
          type: string
        restConfig:
          description: REST endpoint configuration (when apiType = REST)
          oneOf:
            - $ref: '#/components/schemas/RestEndpointConfig'
            - enum:
                - null
              nullable: true
              type: object
      required:
        - priority
        - apiType
        - pagination
      type: object
    ConnectorDefaultAudienceEnum:
      description: >-
        The audience of a tap that has no anchor and no audience of its own.
        Declared on a connector for all of its taps, or on one tap.
      enum:
        - source_users
        - unrestricted
      type: string
    TapAccessRoleEnum:
      description: >-
        Which access facts a tap carries. The access job discovers its

        inputs from these roles, the way the identity job discovers directory
        taps.
      enum:
        - principals
        - memberships
        - grants
        - resources
      type: string
    QualityRuleConfig:
      description: Discriminated union of all quality rule variants.
      discriminator:
        mapping:
          dupe_rate: '#/components/schemas/DupeRateRule'
          no_future_timestamp: '#/components/schemas/NoFutureTimestampRule'
          null_rate: '#/components/schemas/NullRateRule'
          referential_integrity: '#/components/schemas/ReferentialIntegrityRule'
          row_count_not_suspicious: '#/components/schemas/RowCountNotSuspiciousRule'
          string_pattern_rate: '#/components/schemas/StringPatternRateRule'
          temporal_order: '#/components/schemas/TemporalOrderRule'
          timeline_gaps: '#/components/schemas/TimelineGapsRule'
          timestamp_coverage: '#/components/schemas/TimestampCoverageRule'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/NullRateRule'
        - $ref: '#/components/schemas/DupeRateRule'
        - $ref: '#/components/schemas/TimestampCoverageRule'
        - $ref: '#/components/schemas/TemporalOrderRule'
        - $ref: '#/components/schemas/NoFutureTimestampRule'
        - $ref: '#/components/schemas/TimelineGapsRule'
        - $ref: '#/components/schemas/StringPatternRateRule'
        - $ref: '#/components/schemas/ReferentialIntegrityRule'
        - $ref: '#/components/schemas/RowCountNotSuspiciousRule'
    TapSpcConfig:
      properties:
        minHistoryForViolation:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 1000
          minimum: 2
          type: integer
        trackedSeries:
          items:
            $ref: '#/components/schemas/SpcSeriesKind'
          maxItems: 16
          minItems: 1
          type: array
        windowSize:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 1000
          minimum: 2
          type: integer
      required:
        - windowSize
        - trackedSeries
        - minHistoryForViolation
      type: object
    RequestAdmissionKindEnum:
      enum:
        - fixed
        - provider_budget
      type: string
    ProviderBudgetPolicy:
      properties:
        budgets:
          items:
            $ref: '#/components/schemas/ProviderBudgetDefinition'
          minItems: 1
          type: array
        feedback:
          items:
            $ref: '#/components/schemas/ProviderBudgetFeedbackRule'
          nullable: true
          type: array
        operations:
          items:
            $ref: '#/components/schemas/ProviderBudgetOperation'
          minItems: 1
          type: array
        quotaOwner:
          $ref: '#/components/schemas/ProviderQuotaOwnerSelector'
      required:
        - quotaOwner
        - budgets
        - operations
      type: object
    RetryConfig:
      description: >-
        Retry behavior for rate-limited or failed requests. A tap's retry block

        layers over the connector's, so every field keeps presence: a field a
        layer

        does not set is inherited, and TapRequestRetryPolicy holds the default
        when

        no layer sets it.
      properties:
        maxRetries:
          description: >-
            Attempt budget per request, counting the first attempt: 5 sends a
            request

            at most 5 times, so at most 4 retries. The name predates the budget
            and

            stays so stored definitions keep working. An explicit 0 keeps its

            presence through a Go read and write: Go declares an optional
            integer

            without a default as a pointer.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        maxRetryTimeSeconds:
          description: >-
            Seconds from a request's first failed attempt to its last retry.
            Time

            spent before that first outcome counts against the execution
            deadline.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        respectRetryAfter:
          description: >-
            Honor a Retry-After header on a rate-limited or failed response.
            Unset

            honors it under fixed admission. A provider_budget layer must leave
            it

            unset, and the control plane checks whether a layer set it
            (connectordef

            ValidateTapRequestAdmission).
          nullable: true
          type: boolean
      type: object
    ConnectorPermissionModelEnum:
      description: >-
        How a connector gates access to a tap's data, which determines how the

        platform expresses each tap's required access and reconciles it against
        what

        the customer's credential actually grants. This is the permission
        *vocabulary*,

        not an exemption: only `none` opts a connector out of per-tap
        requirements.
      enum:
        - object_acl
        - oauth_scope
        - none
      type: string
    ResponseFormatEnum:
      description: >-
        Wire format of a successful HTTP response body, controlling how the

        ingestion engine turns the body into records before responsePath
        extraction.
      enum:
        - json
        - jsonl
      type: string
    ResponseValidation:
      description: Validation rules for API response handling.
      properties:
        errorField:
          description: Field containing error code/message (e.g., 'error')
          type: string
        okField:
          description: Field indicating success in response body (e.g., 'ok')
          type: string
        transientErrors:
          description: >-
            Application-level errors that are transient and should be retried
            (e.g., 'ratelimited')
          items:
            type: string
          nullable: true
          type: array
      required:
        - okField
        - errorField
      type: object
    SyntheticPrimaryKeyConfig:
      description: >-
        =============================================================================

        Synthetic Primary Key Types

        =============================================================================

        Configuration for generating a synthetic primary key by hashing multiple
        fields.

        When present on a tap, the engine concatenates the specified fields,
        hashes them,

        and injects the result into the record. A nested field is a dotted path
        of bare

        or double-quoted identifiers (id.time, properties."$insert_id"); the
        definition

        gate rejects any other JMESPath, because promote recomputes the key for
        rows

        that landed before the tap declared it and reads only that subset.

        Uses outputField when set; otherwise falls back to primaryKey as the
        output field name.

        A single '*' entry in fields hashes every top-level record key (sorted
        canonical

        JSON, excluding the output field) for rows whose columns are not known
        ahead of time.
      properties:
        algorithm:
          description: 'Hash algorithm (default: sha1)'
          oneOf:
            - $ref: '#/components/schemas/SyntheticKeyAlgorithm'
            - enum:
                - null
              nullable: true
              type: string
        fields:
          description: Record fields to concatenate for hash input
          items:
            type: string
          type: array
        fieldsConfigKey:
          description: >-
            Authoring directive: the ingestion-config property whose non-empty

            string-array value replaces `fields` for that Workspace (e.g. a
            Workday

            RaaS report's key columns). The execution-plan compiler resolves it
            once

            and freezes only the final field list; the definition's `fields`
            stay the

            default when the property is absent or empty.
          nullable: true
          type: string
        outputField:
          description: 'Top-level record field for the hash (default: tap primaryKey)'
          nullable: true
          type: string
        separator:
          description: 'Separator between field values (default: ''|'')'
          nullable: true
          type: string
      required:
        - fields
      type: object
    AsyncQueryConfig:
      description: |-
        Configuration for asynchronous create-poll-fetch query execution.
        Used by APIs that require submitting a query, polling for completion,
        and then fetching results from a separate endpoint.
      properties:
        columnNamesPath:
          description: >-
            JMESPath to the column-name array on the status or result response.
            Falls

            back to the default manifest paths when unset.
          nullable: true
          type: string
        completionStatusCode:
          description: >-
            HTTP status code that signals completion while polling. When set,
            completion

            is decided by the HTTP status instead of statusPath/successValue.
          format: int64
          maximum: 299
          minimum: 200
          nullable: true
          type: integer
        externalLinksPath:
          description: >-
            JMESPath to an array of presigned result links on a chunk payload

            (Databricks EXTERNAL_LINKS disposition). When set, chunk fetch
            downloads

            result bytes from those URLs instead of reading rows out of the
            chunk

            response. Presigned URLs carry their own credentials, so the
            download is

            issued without the connector's Authorization header.
          nullable: true
          type: string
        failureValue:
          description: Status value indicating the query failed (optional)
          nullable: true
          type: string
        failureValues:
          description: |-
            Additional terminal failure status values (optional). Merged with
            failureValue when present so vendors with several terminal failure
            states (e.g. Databricks FAILED/CANCELED/CLOSED) do not stall until
            maxPollSeconds.
          items:
            type: string
          nullable: true
          type: array
        maxPollSeconds:
          description: >-
            Seconds to poll before the query is treated as timed out. 0 times
            out on

            the first poll.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        partitionCountPath:
          description: >-
            JMESPath to the partition array on the status response whose length
            is the

            partition count.
          nullable: true
          type: string
        partitionParam:
          description: |-
            Query-parameter name carrying the partition index. Selects the
            partition-index fetch model instead of the chunk-index model.
          nullable: true
          type: string
        pollIntervalSeconds:
          description: Seconds between status poll requests. 0 polls with no delay.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        queryIdPath:
          description: JMESPath to extract the query ID from the create-query response
          type: string
        recordsEndpoint:
          description: Endpoint template for fetching results (use {queryId} placeholder)
          type: string
        recordsPagination:
          description: Pagination config for the results endpoint
          oneOf:
            - $ref: '#/components/schemas/PaginationConfig'
            - enum:
                - null
              nullable: true
              type: object
        recordsQueryParams:
          description: Query parameters for the results endpoint
          nullable: true
        recordsResponsePath:
          description: JMESPath to extract records from the results response
          type: string
        statusEndpoint:
          description: Endpoint template for polling status (use {queryId} placeholder)
          type: string
        statusPath:
          description: JMESPath to extract status string from the poll response
          type: string
        successValue:
          description: Status value indicating the query completed successfully
          type: string
      required:
        - queryIdPath
        - statusEndpoint
        - statusPath
        - successValue
        - pollIntervalSeconds
        - maxPollSeconds
        - recordsEndpoint
        - recordsResponsePath
      type: object
    IncrementalTimeFormatEnum:
      description: Format for incremental sync time parameters.
      enum:
        - iso8601
        - iso8601_z
        - iso8601_seconds_z
        - unix
        - unix_millis
        - unix_micros
        - unix_nanos
        - date_slash
        - date
      type: string
    IncrementalParamsConfig:
      description: Configuration for incremental sync time-based filtering.
      properties:
        bodyFilterEndPath:
          description: |-
            Optional second POST-body path for the window end bound (e.g. monday
            activity_logs variables.to alongside variables.from).
          nullable: true
          type: string
        bodyFilterFormat:
          description: Format for body filter timestamp value
          oneOf:
            - $ref: '#/components/schemas/IncrementalTimeFormatEnum'
            - enum:
                - null
              nullable: true
              type: string
        bodyFilterPath:
          description: Dot-notation path in POST body for time filter injection
          nullable: true
          type: string
        bodyFilterTemplate:
          description: >-
            Template for body filter with {window_start} and {window_end}
            placeholders
          nullable: true
          type: string
        filterType:
          description: Type of incremental filtering to apply
          oneOf:
            - $ref: '#/components/schemas/IncrementalFilterTypeEnum'
            - enum:
                - null
              nullable: true
              type: string
        maxWindowDays:
          description: >-
            Maximum number of days per sync window. APIs with date range limits
            (e.g., Microsoft Graph 30 days, Zoom 30 days) are automatically
            split into sub-windows.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        queryParam:
          description: Query parameter for template-based filters (e.g., 'q' for Gmail)
          nullable: true
          type: string
        queryTemplate:
          description: Template with {window_start} and {window_end} placeholders
          nullable: true
          type: string
        sinceFormat:
          description: Format for the since parameter value
          oneOf:
            - $ref: '#/components/schemas/IncrementalTimeFormatEnum'
            - enum:
                - null
              nullable: true
              type: string
        sinceParam:
          description: Query parameter name for start time filter (e.g., 'since', 'oldest')
          nullable: true
          type: string
        untilFormat:
          description: Format for the until parameter value
          oneOf:
            - $ref: '#/components/schemas/IncrementalTimeFormatEnum'
            - enum:
                - null
              nullable: true
              type: string
        untilParam:
          description: Query parameter name for end time filter (e.g., 'until', 'latest')
          nullable: true
          type: string
      type: object
    SyncModeEnum:
      description: Sync strategy for a tap.
      enum:
        - full
        - incremental
      type: string
    ApiTypeEnum:
      description: |-
        API transport protocol.
        Determines how requests are constructed and executed.
      enum:
        - rest
        - graphql
        - database
        - file
        - custom
      type: string
    GraphQLEndpointConfig:
      additionalProperties: false
      description: |-
        GraphQL API endpoint configuration.
        For connectors that use GraphQL APIs (e.g., Linear).
        Strict for the same reason as RestEndpointConfig: every key shapes the
        Provider request. `variables` stays free-form.
      properties:
        endpoint:
          description: GraphQL endpoint path
          type: string
        operationName:
          description: GraphQL operation name
          nullable: true
          type: string
        query:
          description: GraphQL query or mutation string
          type: string
        variables:
          description: Static variables to include in every request
          nullable: true
      required:
        - endpoint
        - query
      type: object
    PaginationConfig:
      description: >-
        =============================================================================

        Pagination

        =============================================================================

        Pagination configuration for a tap endpoint.
      properties:
        cursor:
          description: Cursor pagination settings (when type = CURSOR)
          oneOf:
            - $ref: '#/components/schemas/CursorPaginationConfig'
            - enum:
                - null
              nullable: true
              type: object
        offset:
          description: Offset pagination settings (when type = OFFSET)
          oneOf:
            - $ref: '#/components/schemas/OffsetPaginationConfig'
            - enum:
                - null
              nullable: true
              type: object
        pageNumber:
          description: Page number pagination settings (when type = PAGE_NUMBER)
          oneOf:
            - $ref: '#/components/schemas/PageNumberPaginationConfig'
            - enum:
                - null
              nullable: true
              type: object
        sessionPage:
          description: Session + page pagination settings (when type = SESSION_PAGE)
          oneOf:
            - $ref: '#/components/schemas/SessionPagePaginationConfig'
            - enum:
                - null
              nullable: true
              type: object
        type:
          $ref: '#/components/schemas/PaginationTypeEnum'
          description: Pagination strategy type
      required:
        - type
      type: object
    RestEndpointConfig:
      additionalProperties: false
      description: >-
        Connector Tap Definition

        A tap represents a single data stream (e.g., repos, issues, users).

        Each tap defines how to extract one entity type from an API.

        Taps are API-type-aware: REST taps use RestEndpointConfig,

        GraphQL taps use GraphQLEndpointConfig.

        =============================================================================

        Endpoint Configurations

        =============================================================================

        REST API endpoint configuration.

        Supports template variables resolved from workspace config or parent tap
        records.

        Examples: '/orgs/{orgId}/repos', '/repos/{full_name}/issues'

        Strict: every key shapes the Provider request, so a reader that does not
        know

        a key must reject it rather than send a broader request. The

        nested object types are marked too.
      properties:
        batch:
          description: >-
            Optional batch packer config for Google-style multipart/mixed batch
            APIs.

            When set, the runtime packs one sub-request per parent record (built
            from

            this RestEndpointConfig's endpoint/method/headers) into a single

            multipart/mixed POST to `batch.endpoint`. When the tap declares

            `perParentAuth`, each sub-request gets its own `Authorization`
            header so

            it impersonates the parent user (Google domain-wide delegation).
            When

            `perParentAuth` is omitted, the outer POST's auth applies to every

            sub-request -- used for admin-token detail taps such as Drive
            Docs/Sheets.

            When unset, the runtime executes one HTTP request per parent record.
          oneOf:
            - $ref: '#/components/schemas/RestBatchConfig'
            - enum:
                - null
              nullable: true
              type: object
        bodyEncoding:
          description: >-
            Serialization for the POST/PUT/PATCH body. Defaults to JSON when
            null. Set

            to FORM (application/x-www-form-urlencoded) for APIs that reject a
            JSON

            body, e.g. Mixpanel's Engage query API.
          oneOf:
            - $ref: '#/components/schemas/BodyEncodingEnum'
            - enum:
                - null
              nullable: true
              type: string
        endpoint:
          description: |-
            API endpoint path (supports {variable} templates).
            Variables are resolved from parent tap records or workspace config.
          type: string
        headers:
          description: Additional headers to include
          nullable: true
        method:
          $ref: '#/components/schemas/HttpMethodEnum'
          description: 'HTTP method (default: GET)'
        parentDataFilterBodyInject:
          description: >-
            Optional inject of workspace parentDataFilters values into
            requestBody.

            Used by root taps that take an allowlist array (e.g. Purview

            userPrincipalNameFilters) without depending on a parent tap.
          oneOf:
            - $ref: '#/components/schemas/ParentDataFilterBodyInject'
            - enum:
                - null
              nullable: true
              type: object
        parentDataFilterQueryInject:
          description: >-
            Optional inject of workspace parentDataFilters values into a query
            param

            (typically $filter). Used by root taps that take an allowlist in the

            query string without depending on a parent tap.
          oneOf:
            - $ref: '#/components/schemas/ParentDataFilterQueryInject'
            - enum:
                - null
              nullable: true
              type: object
        pathParamEncodings:
          description: >-
            Optional provider-neutral encoding rules for path template
            parameters.
          items:
            $ref: '#/components/schemas/PathParamEncodingRule'
          nullable: true
          type: array
        queryParams:
          description: Default query parameters to include
          nullable: true
        requestBody:
          description: Request body template (for POST endpoints, e.g., Notion search)
          nullable: true
      required:
        - endpoint
        - method
      type: object
    DupeRateRule:
      properties:
        maxRate:
          format: double
          type: number
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - maxRate
      type: object
    NoFutureTimestampRule:
      properties:
        maxViolations:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - maxViolations
      type: object
    NullRateRule:
      properties:
        maxRate:
          format: double
          type: number
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - maxRate
      type: object
    ReferentialIntegrityRule:
      description: 'Quality rule: foreign key must exist in referenced dataset.'
      properties:
        localColumn:
          type: string
        maxOrphanRate:
          format: double
          type: number
        referencedColumn:
          type: string
        referencedDatasetId:
          type: string
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - localColumn
        - referencedDatasetId
        - referencedColumn
        - maxOrphanRate
      type: object
    RowCountNotSuspiciousRule:
      properties:
        suspiciousCounts:
          items:
            description: >-
              Signed 64-bit integer; range bounded by JavaScript's safe-integer
              ceiling.
            format: int64
            maximum: 9007199254740991
            minimum: -9007199254740991
            type: integer
          type: array
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - suspiciousCounts
      type: object
    StringPatternRateRule:
      properties:
        column:
          type: string
        maxRate:
          format: double
          type: number
        pattern:
          type: string
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - column
        - pattern
        - maxRate
      type: object
    TemporalOrderRule:
      properties:
        maxViolations:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - maxViolations
      type: object
    TimelineGapsRule:
      properties:
        maxGapDays:
          description: >-
            Signed integer count of days: an amount of elapsed time, never a
            point in time or a calendar date.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - maxGapDays
      type: object
    TimestampCoverageRule:
      properties:
        minRate:
          format: double
          type: number
        type:
          $ref: '#/components/schemas/QualityRuleTypeEnum'
      required:
        - type
        - minRate
      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
    ProviderBudgetDefinition:
      properties:
        apiFamily:
          minLength: 1
          type: string
        id:
          minLength: 1
          type: string
        kind:
          $ref: '#/components/schemas/ProviderBudgetKindEnum'
        limit:
          description: >-
            Starting allowance for adaptive budgets; a ceiling for fixed
            budgets.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        observation:
          description: >-
            With observation, limit/windowSeconds bounds pace, not provider
            entitlement.
          oneOf:
            - $ref: '#/components/schemas/ProviderBudgetWindowObservation'
            - enum:
                - null
              nullable: true
              type: object
        scope:
          items:
            $ref: '#/components/schemas/ProviderBudgetScopeEnum'
          minItems: 1
          type: array
        windowSeconds:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          nullable: true
          type: integer
      required:
        - id
        - apiFamily
        - kind
        - scope
        - limit
      type: object
    ProviderBudgetFeedbackRule:
      additionalProperties: false
      properties:
        bodyReason:
          description: >-
            Case-sensitive substring of a top-level error field in a JSON body:
            a

            string `error`, a string `message`, an `error` object's `message`,

            `status`, or any `errors[].reason`, or a `message` object's `error`.

            Record content never matches. Null matches on status and headers
            alone.
          minLength: 1
          nullable: true
          type: string
        budgetId:
          description: >-
            Null means the response does not identify which claim was refused;
            it then

            throttles only the request's narrowest claimed budgets, the same as
            a 429

            that no rule matches. So does a rule naming a budget the request
            does not

            claim, without that budget's delay.
          minLength: 1
          nullable: true
          type: string
        fallbackCooldownSeconds:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          nullable: true
          type: integer
        headerMatches:
          description: All must match. A missing header never matches.
          items:
            $ref: '#/components/schemas/ProviderBudgetHeaderCondition'
          minItems: 1
          nullable: true
          type: array
        resetHeader:
          maxLength: 255
          nullable: true
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        resetHeaderCondition:
          description: >-
            Only the reset-header delay depends on this condition; Retry-After
            still wins.
          oneOf:
            - $ref: '#/components/schemas/ProviderBudgetHeaderCondition'
            - enum:
                - null
              nullable: true
              type: object
        statusCode:
          description: HTTP response status code, 100 through 599
          format: int64
          maximum: 599
          minimum: 100
          type: integer
      required:
        - statusCode
      type: object
    ProviderBudgetOperation:
      properties:
        claims:
          description: >-
            The request's shape comes from the transport option that names this

            operation (providerBudgetOperation) or from the credential exchange
            whose

            policy declares it.
          items:
            $ref: '#/components/schemas/ProviderBudgetClaimSpec'
          minItems: 1
          type: array
        id:
          minLength: 1
          type: string
      required:
        - id
        - claims
      type: object
    ProviderQuotaOwnerSelector:
      properties:
        credentialPaths:
          description: >-
            Required for Google project owners and absent for flow credential
            owners.

            Dot-separated aliases must resolve to the same value.
          items:
            type: string
          minItems: 1
          nullable: true
          type: array
        kind:
          $ref: '#/components/schemas/ProviderQuotaOwnerKindEnum'
      required:
        - kind
      type: object
    SyntheticKeyAlgorithm:
      description: Hash algorithm for generating synthetic primary keys.
      enum:
        - sha1
        - sha256
      type: string
    IncrementalFilterTypeEnum:
      description: Type of incremental filtering to apply.
      enum:
        - simple
        - query_template
        - body_filter
      type: string
    CursorPaginationConfig:
      description: Configuration for cursor-based pagination.
      properties:
        cursorBodyPath:
          description: >-
            Dot-notation path inside the POST request body where the cursor must
            be

            injected for the next page (e.g., 'cursor', 'variables.after').

            When set, the cursor is written into the body instead of the query
            string.

            Required for APIs that paginate POST endpoints with a body cursor
            (e.g.,

            Gong /v2/calls/extensive).
          nullable: true
          type: string
        cursorIsFullUrl:
          description: >-
            When true, the cursor value is an absolute URL (e.g., OData
            @odata.nextLink)
          nullable: true
          type: boolean
        cursorParam:
          description: 'Query parameter name for cursor (default: ''cursor'')'
          nullable: true
          type: string
        cursorPath:
          description: JMESPath to extract next cursor from response
          type: string
        hasMorePath:
          description: JMESPath to check if more pages exist
          nullable: true
          type: string
        nextCursorPath:
          description: JMESPath to extract the next cursor from the nextQuery response.
          nullable: true
          type: string
        nextDataPath:
          description: JMESPath to extract records from the nextQuery response.
          nullable: true
          type: string
        nextEndpoint:
          description: Endpoint for continuation requests, which send only the cursor body.
          nullable: true
          type: string
        nextQuery:
          description: >-
            GraphQL query used to fetch subsequent pages when the API requires a

            different query to continue a cursor. Example: monday.com fetches
            the first

            page via boards { items_page }, then continues with
            next_items_page(cursor).
          nullable: true
          type: string
      required:
        - cursorPath
      type: object
    OffsetPaginationConfig:
      description: Configuration for offset-based pagination.
      properties:
        defaultLimit:
          description: Default page size
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        initialOffset:
          description: 'First offset sent to the Provider (default: 0)'
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        limitParam:
          description: 'Query parameter name for limit (default: ''limit'')'
          nullable: true
          type: string
        maxLimit:
          description: Maximum page size allowed by API
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        nextPageLinkPath:
          description: >-
            When set, offset pagination mirrors TestRail-style responses:
            continue only

            while this path is non-null (e.g. `_links.next`), and advance offset
            by

            `defaultLimit` per page instead of the returned record count.
          nullable: true
          type: string
        offsetParam:
          description: 'Query parameter name for offset (default: ''offset'')'
          nullable: true
          type: string
        totalPath:
          description: JMESPath to extract total count
          nullable: true
          type: string
      required:
        - defaultLimit
      type: object
    PageNumberPaginationConfig:
      description: Configuration for page number pagination.
      properties:
        defaultPageSize:
          description: Default page size
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        pageParam:
          description: 'Query parameter name for page (default: ''page'')'
          nullable: true
          type: string
        pageSizeParam:
          description: 'Query parameter name for page size (default: ''per_page'')'
          nullable: true
          type: string
        paramLocation:
          description: Where page/pageSize travel for POST endpoints (body or query).
          nullable: true
          type: string
        totalPagesPath:
          description: JMESPath to extract total pages
          nullable: true
          type: string
        totalPath:
          description: >-
            JMESPath to the total record count. Paging stops once the pages read

            cover it, so a Provider that rejects a page past the end is not
            asked

            for one.
          nullable: true
          type: string
        zeroBased:
          description: |-
            Whether pages are numbered from 0 instead of 1 (default: false).
            Datadog numbers page[number] from 0. A boolean, because 
            drops an integer 0 (schema: optional integers are value types).
          nullable: true
          type: boolean
      required:
        - defaultPageSize
      type: object
    SessionPagePaginationConfig:
      description: Configuration for Mixpanel-style session_id + page pagination.
      properties:
        defaultPageSize:
          description: Default page size used to detect the last page
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        pageParam:
          description: 'Query/body parameter name for page (default: ''page'')'
          nullable: true
          type: string
        pagePath:
          description: JMESPath to extract the current page from the response
          nullable: true
          type: string
        sessionIdParam:
          description: 'Query/body parameter name for session id (default: ''session_id'')'
          nullable: true
          type: string
        sessionIdPath:
          description: JMESPath to extract session id from the response
          nullable: true
          type: string
      required:
        - defaultPageSize
      type: object
    PaginationTypeEnum:
      description: Pagination strategy for API endpoints.
      enum:
        - link_header
        - cursor
        - offset
        - page_number
        - session_page
        - none
      type: string
    RestBatchConfig:
      additionalProperties: false
      description: >-
        Batch packer configuration for Google-style multipart/mixed batch
        endpoints

        (e.g., Gmail https://gmail.googleapis.com/batch/gmail/v1, Drive

        https://www.googleapis.com/batch/drive/v3). Used to bundle
        high-cardinality

        detail fetches (one sub-request per parent record) into a single HTTP
        round

        trip. Requires the tap's pagination type to be `none` (one sub-response
        per

        parent). `perParentAuth` is optional: when present each sub-request is

        authed per parent (DWD), when absent the outer POST's auth applies to
        all

        sub-requests.
      properties:
        endpoint:
          description: |-
            Multipart batch endpoint URL. Always invoked with POST and
            `Content-Type: multipart/mixed; boundary=...`.
          type: string
        format:
          description: >-
            Batch wire format. Null or absent = Google-style multipart/mixed
            (default).

            "json" = JSON batch (e.g., Microsoft Graph $batch, OData $batch).
          nullable: true
          type: string
        maxSubRequests:
          description: |-
            Maximum sub-requests packed into a single multipart body. Google
            recommends <= 100 sub-requests per batch. Typical value: 50.
          format: int64
          maximum: 100
          minimum: 1
          type: integer
      required:
        - endpoint
        - maxSubRequests
      type: object
    BodyEncodingEnum:
      description: Serialization of a POST/PUT/PATCH request body for a REST endpoint.
      enum:
        - json
        - form
      type: string
    HttpMethodEnum:
      description: HTTP method for API calls.
      enum:
        - GET
        - POST
        - PUT
        - PATCH
        - DELETE
      type: string
    ParentDataFilterBodyInject:
      additionalProperties: false
      description: |-
        When set on RestEndpointConfig, the tap (typically a root tap) injects
        ingestionConfig.parentDataFilters[filterKey].values into requestBody at
        bodyPath. No parent-tap fan-out or frontier is required.
      properties:
        bodyPath:
          description: >-
            Top-level requestBody key that receives the values array.

            Example: 'userPrincipalNameFilters' for Microsoft Purview audit
            queries.
          type: string
        field:
          description: >-
            Expected parentDataFilters[filterKey].field. Values are injected
            as-is

            when the field matches; field mismatch or empty values skip the tap

            (fail closed). When the filter key is absent, the body key is
            omitted

            (workspace-wide).
          type: string
        filterKey:
          description: Key under ingestionConfig.parentDataFilters (e.g. 'users').
          type: string
      required:
        - filterKey
        - bodyPath
        - field
      type: object
    ParentDataFilterQueryInject:
      additionalProperties: false
      description: >-
        When set on RestEndpointConfig, the tap injects

        ingestionConfig.parentDataFilters[filterKey].values into a query
        parameter.

        Two modes:

        1) OData expression (Microsoft): set clauseTemplate + join/combine
        operators

        to build a $filter string.

        2) Repeated list values (Claude Compliance actor_ids[]): omit
        clauseTemplate;

        values are passed as a list on queryParam (doseq-encoded).
      properties:
        chunkSize:
          description: >-
            Max values per request. Null uses the runtime default (10 for OData

            mode, 50 for repeated-list mode). Both defaults keep the encoded
            query

            string under the common 8KB request-line cap.
          format: double
          maximum: 500
          minimum: 1
          nullable: true
          type: number
        clauseTemplate:
          description: >-
            Per-value clause with '{value}' placeholder for OData expression
            mode.

            Example: "userPrincipalName eq '{value}'".

            Null selects repeated-list mode (values set as a list on
            queryParam).
          nullable: true
          pattern: \{value\}
          type: string
        combineOperator:
          description: |-
            How to combine the joined clauses with an existing queryParam value
            (OData mode only). When the query param is absent, only the joined
            clauses are used.
          oneOf:
            - $ref: '#/components/schemas/ParentDataFilterCombineOperatorEnum'
            - enum:
                - null
              nullable: true
              type: string
        field:
          description: >-
            Expected parentDataFilters[filterKey].field. Values are injected
            when the

            field matches; field mismatch or empty values skip the tap (fail
            closed).

            When the filter key is absent, no inject runs (workspace-wide).
          type: string
        filterKey:
          description: Key under ingestionConfig.parentDataFilters (e.g. 'users').
          type: string
        joinOperator:
          description: How to join multiple value clauses (OData mode only).
          oneOf:
            - $ref: '#/components/schemas/ParentDataFilterJoinOperatorEnum'
            - enum:
                - null
              nullable: true
              type: string
        normalize:
          description: Optional value normalization before render / inject.
          oneOf:
            - $ref: '#/components/schemas/ParentDataFilterNormalizeEnum'
            - enum:
                - null
              nullable: true
              type: string
        queryParam:
          description: |-
            Query parameter name that receives the filter.
            Examples: '$filter' (OData), 'actor_ids[]' (repeated list).
          type: string
      required:
        - filterKey
        - field
        - queryParam
      type: object
    PathParamEncodingRule:
      additionalProperties: false
      description: One transformation applied to a named endpoint-template parameter.
      properties:
        encoding:
          $ref: '#/components/schemas/PathParamEncodingEnum'
        parameter:
          type: string
      required:
        - parameter
        - encoding
      type: object
    QualityRuleTypeEnum:
      description: |-
        Discriminator literal for the QualityRuleConfig union variants.
        The wire/storage value is the snake_case form.
      enum:
        - null_rate
        - dupe_rate
        - timestamp_coverage
        - temporal_order
        - no_future_timestamp
        - timeline_gaps
        - string_pattern_rate
        - referential_integrity
        - row_count_not_suspicious
      type: string
    ProviderBudgetKindEnum:
      enum:
        - token_bucket
        - paced_window
        - adaptive_paced_window
        - adaptive_concurrent
        - concurrent
      type: string
    ProviderBudgetWindowObservation:
      properties:
        fallbackLimit:
          description: >-
            Native units per budget window while the provider allowance is
            unknown.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        limitHeader:
          maxLength: 255
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        remainingHeader:
          maxLength: 255
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        resetEpochSecondsHeader:
          maxLength: 255
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        resourceHeader:
          description: >-
            resourceHeader and resourceValue are declared together or not at
            all.
          maxLength: 255
          nullable: true
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
        resourceValue:
          nullable: true
          pattern: ^\S(.*\S)?$
          type: string
      required:
        - remainingHeader
        - limitHeader
        - resetEpochSecondsHeader
        - fallbackLimit
      type: object
    ProviderBudgetScopeEnum:
      enum:
        - quota_owner
        - delegated_subject
      type: string
    ProviderBudgetHeaderCondition:
      additionalProperties: false
      properties:
        equals:
          pattern: ^\S(.*\S)?$
          type: string
        header:
          maxLength: 255
          pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
          type: string
      required:
        - header
        - equals
      type: object
    ProviderBudgetClaimSpec:
      properties:
        budgetId:
          minLength: 1
          type: string
        charge:
          $ref: '#/components/schemas/ProviderBudgetChargeEnum'
        cost:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
      required:
        - budgetId
        - cost
        - charge
      type: object
    ProviderQuotaOwnerKindEnum:
      enum:
        - google_cloud_project
        - flow_credential
      type: string
    ParentDataFilterCombineOperatorEnum:
      description: |-
        How parentDataFilterQueryInject combines joined clauses with an existing
        query param value (typically a time-window $filter).
      enum:
        - and
        - or
      type: string
    ParentDataFilterJoinOperatorEnum:
      description: How parentDataFilterQueryInject joins multiple per-value clauses.
      enum:
        - or
        - and
      type: string
    ParentDataFilterNormalizeEnum:
      description: |-
        Optional value normalization before parentDataFilterQueryInject renders
        clauseTemplate. Unrecognized values must fail at schema validation time
        (not silently no-op at runtime).
      enum:
        - lowercase
      type: string
    PathParamEncodingEnum:
      description: >-
        Provider-neutral transformations for values inserted into endpoint
        paths.
      enum:
        - double_url_encode_slashes
      type: string
    ProviderBudgetChargeEnum:
      enum:
        - outer_request
        - batch_member
      type: string
  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.