> ## 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.

# Add a Tap to a Provider connection

> Sets up a Tap — one stream of data — on a Provider connection in this Workspace. Anything you leave out is copied from the Provider's own definition of that Tap.

> **[Add a Tap to a Provider connection](/protocols/_generated/mcp/web-api/tenant-connector-taps#tool-add_tap)**
>
> `add_tap`


## OpenAPI

````yaml /protocols/_generated/openapi/web-api.json post /api/tenant-connector-taps/create-tenant-connector-tap
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/tenant-connector-taps/create-tenant-connector-tap:
    post:
      tags:
        - Workspace connector taps
      summary: Add a Tap to a Provider connection
      description: >-
        Sets up a Tap — one stream of data — on a Provider connection in this
        Workspace. Anything you leave out is copied from the Provider's own
        definition of that Tap.
      operationId: TenantConnectorTapsCreateTenantConnectorTapHandler
      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
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTenantConnectorTapInput'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/TenantConnectorTapInfo'
                  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. A value that breaks a
            field rule gives the code `WA-VL-001` and an `errors` member that
            names each field.
          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";

            import type { CreateTenantConnectorTapInput } from
            "@parable-platform/web-api-types";


            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 input: CreateTenantConnectorTapInput = JSON.parse(`{
              "tenantConnectorId": "550e8400-e29b-41d4-a716-446655440000",
              "connectorTapId": "550e8400-e29b-41d4-a716-446655440000"
            }`);

            const result = await
            sdk.tenantConnectorTaps.createTenantConnectorTap(
              input
            );
        - label: Python SDK
          lang: python
          source: >-
            import json

            import os


            from parable_types_web_api import CreateTenantConnectorTapInput

            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"]},
                )
            )


            input_data = CreateTenantConnectorTapInput.model_validate(
                json.loads("{\"tenantConnectorId\":\"550e8400-e29b-41d4-a716-446655440000\",\"connectorTapId\":\"550e8400-e29b-41d4-a716-446655440000\"}"),
            )

            result =
            sdk.tenant_connector_taps.create_tenant_connector_tap(input_data)
        - label: Rust SDK
          lang: rust
          source: >-
            use parable_web_api_sdk::{types, 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 input: types::CreateTenantConnectorTapInput =
            serde_json::from_value(
                serde_json::json!({
              "tenantConnectorId": "550e8400-e29b-41d4-a716-446655440000",
              "connectorTapId": "550e8400-e29b-41d4-a716-446655440000"
            }),

            )?;

            let result = sdk.tenant_connector_taps.create_tenant_connector_tap(
                input,
                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\nvar input webapitypes.CreateTenantConnectorTapInput\nif err := json.Unmarshal([]byte(`{\"tenantConnectorId\":\"550e8400-e29b-41d4-a716-446655440000\",\"connectorTapId\":\"550e8400-e29b-41d4-a716-446655440000\"}`), &input); err != nil {\n\treturn err\n}\nresult, err := sdk.TenantConnectorTapsNamespace.CreateTenantConnectorTap(ctx, input)"
components:
  schemas:
    CreateTenantConnectorTapInput:
      description: >-
        Create a per-workspace override of a platform tap. Required input is the

        source instance and the platform data pull. Everything else is optional

        and, when omitted, is copied from the platform ConnectorTap.
        Artifact-derived taps use `publishArtifact`.
      properties:
        connectorTapId:
          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
        tap:
          oneOf:
            - $ref: '#/components/schemas/TenantConnectorTapInput'
            - enum:
                - null
              nullable: true
              type: object
        tenantConnectorId:
          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:
        - tenantConnectorId
        - connectorTapId
      type: object
    TenantConnectorTapInfo:
      description: >-
        Per-workspace tap configuration. Either narrows a platform
        `ConnectorTap`'s

        output schema for this workspace (override case) or stands in for an

        artifact-derived tap (artifact case). See for the model.
      properties:
        artifactId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          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
        canonicalPersonSource:
          description: >-
            Whether this tap is one of the Workspace's canonical person/identity

            sources. Any number of active taps may carry the designation;
            ordering

            among canonical sources is by `createdAt`, earlier wins.
          type: boolean
        config:
          oneOf:
            - $ref: '#/components/schemas/TenantConnectorTapConfig'
            - enum:
                - null
              nullable: true
              type: object
        connectorTapId:
          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
        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
        description:
          nullable: true
          type: string
        enabled:
          type: boolean
        enabledSince:
          description: >-
            Start of the current uninterrupted enabled period. Null when
            disabled or

            when the enabled period predates tracking.
          format: date-time
          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
        kind:
          $ref: '#/components/schemas/TenantConnectorTapKindEnum'
          description: >-
            Discriminates override / custom / artifact. Readers use it to

            pick effective-schema semantics: OVERRIDE inherits platform
            directives,

            CUSTOM / ARTIFACT outputSchema is self-authoritative.
        name:
          description: An objects name
          maxLength: 80
          minLength: 2
          type: string
        outputSchema:
          description: A Parable Schema in JSON
          type: object
        tenantConnectorId:
          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
        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
      required:
        - id
        - createdAt
        - updatedAt
        - tenantConnectorId
        - connectorTapId
        - name
        - enabled
        - kind
        - outputSchema
        - canonicalPersonSource
      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
    TenantConnectorTapInput:
      description: |-
        Optional fields shared by create (nested under `tap`) and update.
        Omitted create fields come from the platform ConnectorTap: name,
        description, and outputSchema copy the platform tap, enabled defaults
        to true, kind is OVERRIDE.
      properties:
        canonicalPersonSource:
          description: >-
            Mark this tap as one of the Workspace's canonical person/identity

            sources. Any number of active taps may carry the designation;
            ordering

            among canonical sources is by tap creation time, earlier wins.

            Null on create = false. Null on update = leave unchanged.
          nullable: true
          type: boolean
        config:
          oneOf:
            - $ref: '#/components/schemas/TenantConnectorTapConfig'
            - enum:
                - null
              nullable: true
              type: object
        description:
          nullable: true
          type: string
        enabled:
          nullable: true
          type: boolean
        name:
          description: An objects name
          maxLength: 80
          minLength: 2
          nullable: true
          type: string
        outputSchema:
          description: A Parable Schema in JSON
          nullable: true
          type: object
      type: object
    TenantConnectorTapConfig:
      description: >-
        =============================================================================

        provider connection.config

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

        Typed JSON payload for provider connection.config /.

        Kind-dependent keys share one object: OVERRIDE/CUSTOM may set
        selectedFields;

        ARTIFACT uses catalogSlug + storageUri; promotion sets
        materializedDefault.

        Only these keys are preserved across typed config round-trips;
        undeclared

        JSON keys are dropped when the control plane marshals this type.
      properties:
        catalogSlug:
          description: >-
            ARTIFACT taps: the table's name in SQL and in the catalog.
            Publishing the

            artifact writes it. A client write carrying it is rejected
            (WA-TCT-029).
          maxLength: 255
          minLength: 1
          nullable: true
          pattern: ^[a-z0-9]+(?:[-_][a-z0-9]+)*$
          type: string
        materializedDefault:
          description: |-
            True when Parable owns this OVERRIDE copy and refreshes it when the
            Provider's definition changes. Cleared when a person edits the Tap's
            schema or config.
          nullable: true
          type: boolean
        selectedFields:
          description: >-
            The source columns this Workspace collects. When set, ingestion
            requests

            only these fields from the source API, plus the system, cursor,
            primary

            key and deletion fields. Unknown names are skipped. The list may
            name

            custom columns that the platform's output schema does not have.
            Absent or

            null means "collect every field". An empty list is refused.
          items:
            maxLength: 255
            pattern: ^[A-Za-z][A-Za-z0-9_]*$
            type: string
          maxItems: 500
          minItems: 1
          nullable: true
          type: array
        storageUri:
          description: |-
            ARTIFACT taps: where the published artifact table is stored, in the
            Workspace's own storage. Publishing the artifact writes it. A client
            write carrying it is rejected (WA-TCT-029).
          format: uri
          maxLength: 4096
          nullable: true
          pattern: ^[a-zA-Z][a-zA-Z0-9+.-]*://[^\s]+$
          type: string
        systemDisabled:
          description: >-
            True when Parable turned the Tap off because its platform Tap left
            the

            enabled selection. Parable turns back on only Taps it turned off, so
            a

            Tap that a person turned off stays off.
          nullable: true
          type: boolean
      type: object
    TenantConnectorTapKindEnum:
      description: >-
        Discriminates the three provider connection cases / CFGR-8). The

        kind decides how the effective schema is resolved for promote metadata:

        OVERRIDE merges platform directives onto the workspace overlay; CUSTOM
        and

        ARTIFACT are self-authoritative (the workspace outputSchema carries its
        own

        `x-transform*` directives).
      enum:
        - override
        - custom
        - artifact
      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.