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

# Decline a Provider Pool rebuild

> Declines a pending rebuild with a reason. The Tap keeps its current stored layout, and the same change is not proposed again until the Tap's settings change.

## Access

This operation needs a Parable token. An MCP token cannot call it. See [Authentication](/getting-started/authentication.md) for the kinds of token.

Your roles must grant `tenant.connectors.rebuilds.approve`.

## Errors

* `WA-TCT-030`: No rebuild with this ID belongs to this Workspace. Check the rebuild ID.
* `WA-TCT-032`: A later change replaced the rebuild. The details carry successorId, null when the change was reverted. Decline the replacing rebuild instead.
* `WA-TCT-034`: The rebuild is not waiting for approval. The details carry state. Read the rebuild's state.


## OpenAPI

````yaml /api-reference/openapi.json post /api/tenant-connector-taps/provider-pool-rebuilds/{id}/decline
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/provider-pool-rebuilds/{id}/decline:
    post:
      tags:
        - Workspace connector taps
      summary: Decline a Provider Pool rebuild
      description: >-
        Declines a pending rebuild with a reason. The Tap keeps its current
        stored layout, and the same change is not proposed again until the Tap's
        settings change.
      operationId: TenantConnectorTapsDeclineTenantProviderPoolRebuildHandler
      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
        - description: id parameter
          in: path
          name: id
          required: true
          schema:
            description: UUID v4 with automatic base62 encoding for client-facing APIs
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeclineTenantProviderPoolRebuildInput'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/TenantProviderPoolRebuild'
                  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'
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The resource that the path names was not found.
          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 { DeclineTenantProviderPoolRebuildInput } 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: DeclineTenantProviderPoolRebuildInput = JSON.parse(`{
              "reason": "example"
            }`);

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

            import os


            from parable_types_web_api import
            DeclineTenantProviderPoolRebuildInput

            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 = DeclineTenantProviderPoolRebuildInput.model_validate(
                json.loads("{\"reason\":\"example\"}"),
            )

            result =
            sdk.tenant_connector_taps.decline_tenant_provider_pool_rebuild('example',
            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::DeclineTenantProviderPoolRebuildInput =
            serde_json::from_value(
                serde_json::json!({
              "reason": "example"
            }),

            )?;

            let result =
            sdk.tenant_connector_taps.decline_tenant_provider_pool_rebuild(
                serde_json::from_value(serde_json::json!("example"))?,
                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.DeclineTenantProviderPoolRebuildInput\nif err := json.Unmarshal([]byte(`{\"reason\":\"example\"}`), &input); err != nil {\n\treturn err\n}\nresult, err := sdk.TenantConnectorTapsNamespace.DeclineTenantProviderPoolRebuild(ctx, \"example\", input)"
components:
  schemas:
    DeclineTenantProviderPoolRebuildInput:
      description: Decline one of this Workspace's Provider Pool rebuilds.
      properties:
        reason:
          maxLength: 2000
          minLength: 1
          type: string
      required:
        - reason
      type: object
    TenantProviderPoolRebuild:
      description: |-
        A rebuild of one of this Workspace's Provider Pool taps, waiting for
        approval or in progress, technical spec 0082 "Provider Pool
        layouts and rebuilds").
      properties:
        abortedAt:
          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
          nullable: true
          type: string
        abortedReason:
          nullable: true
          type: string
        approvedAt:
          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
          nullable: true
          type: string
        approvedBy:
          description: UUID v4 string as base62
          nullable: true
          pattern: ^[0-9A-Za-z]{1,22}$
          type: string
        classification:
          $ref: '#/components/schemas/ProviderPoolLayoutClassification'
        classificationHash:
          description: Approval sends this hash back.
          type: string
        connectorId:
          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
        declinedAt:
          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
          nullable: true
          type: string
        declinedBy:
          description: UUID v4 string as base62
          nullable: true
          pattern: ^[0-9A-Za-z]{1,22}$
          type: string
        declinedReason:
          nullable: true
          type: string
        effectiveTapId:
          description: The platform tap the Workspace tap's Provider Pool is stored under.
          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
        failedAt:
          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
          nullable: true
          type: string
        fromLayoutId:
          description: The served layout the item was classified against.
          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
        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
        identityAccountsRekeyed:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        identityImpact:
          $ref: '#/components/schemas/ProviderPoolIdentityImpactEnum'
        notBefore:
          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
          nullable: true
          type: string
        readyAt:
          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
          nullable: true
          type: string
        reasons:
          items:
            $ref: '#/components/schemas/ProviderPoolRebuildReasonEnum'
          type: array
        rebuildTableIds:
          items:
            type: string
          type: array
        requestedAt:
          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
        requestedBy:
          description: UUID v4 string as base62
          pattern: ^[0-9A-Za-z]{1,22}$
          type: string
        stale:
          description: >-
            A PENDING_APPROVAL item older than the stale age, 14 days unless
            Parable

            configured another. Derived on read.
          type: boolean
        staleAt:
          description: When a PENDING_APPROVAL item goes stale; null in any other state.
          format: date-time
          nullable: true
          type: string
        startedAt:
          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
          nullable: true
          type: string
        state:
          $ref: '#/components/schemas/ProviderPoolRebuildStateEnum'
        supersededById:
          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
        swappedAt:
          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
          nullable: true
          type: string
        tapName:
          description: The platform tap's name.
          maxLength: 80
          minLength: 1
          pattern: ^[a-z][a-z0-9_]*$
          type: string
        targetLayoutId:
          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
        tenantConnectorId:
          description: The connection the Tap belongs to.
          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
        tenantConnectorTapId:
          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:
        - id
        - connectorId
        - tapName
        - effectiveTapId
        - tenantConnectorTapId
        - tenantConnectorId
        - state
        - reasons
        - fromLayoutId
        - targetLayoutId
        - classification
        - classificationHash
        - identityImpact
        - rebuildTableIds
        - requestedBy
        - requestedAt
        - stale
      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
    ProviderPoolLayoutClassification:
      description: >-
        What moving a Workspace tap from its served Provider Pool layout to a

        proposed one needs, table by table, amended

        decisions 11 and 12). Produced by the mapping planner's
        `classify_layout`

        (Go `promotemeta.ClassifyLayout`); an approval echoes
        `classificationHash`.
      properties:
        classificationHash:
          description: '`sha256:` over the canonical JSON of every other field.'
          type: string
        identityImpact:
          $ref: '#/components/schemas/ProviderPoolIdentityImpactEnum'
        proposedPlanHash:
          type: string
        rebuildTableIds:
          description: >-
            Ids of the tables a rebuild writes, in `tables` order. The root
            table is

            included when only the identity impact requires the rebuild.
          items:
            type: string
          type: array
        requiresRebuild:
          description: |-
            Whether the change needs a rebuild item: a table classed NEW_TABLE,
            TABLE_REBUILD or TAP_REBUILD, or an identity impact other than
            IDENTITY_UNCHANGED. Otherwise Parable applies the change without a
            rebuild.
          type: boolean
        servedPlanHash:
          description: '`plan_hash` of the served and proposed layouts.'
          type: string
        tables:
          description: |-
            One entry per root or child table of either layout, root first, then
            children by table id.
          items:
            $ref: '#/components/schemas/ProviderPoolTableClassification'
          type: array
      required:
        - servedPlanHash
        - proposedPlanHash
        - tables
        - identityImpact
        - requiresRebuild
        - rebuildTableIds
        - classificationHash
      type: object
    ProviderPoolIdentityImpactEnum:
      description: |-
        What a layout change does to identity resolution's input from the tap's
        root table.
      enum:
        - IDENTITY_UNCHANGED
        - IDENTITY_KEYS_CHANGED
        - IDENTITY_SOURCE_REMOVED
      type: string
    ProviderPoolRebuildReasonEnum:
      description: >-
        What caused a Provider Pool rebuild queue item. Changes coalesced into
        one

        item keep every reason.
      enum:
        - CONNECTOR_TAP_CHANGED
        - WORKSPACE_TAP_CHANGED
        - PLANNER_CHANGED
        - OPERATOR_REQUESTED
        - ROLLOUT
      type: string
    ProviderPoolRebuildStateEnum:
      description: >-
        Lifecycle of one Provider Pool rebuild queue item. Abort is allowed from

        APPROVED, BUILDING, READY and FAILED; retry moves FAILED back to
        APPROVED.

        Stale is derived from the request time, not stored.
      enum:
        - PENDING_APPROVAL
        - SUPERSEDED
        - DECLINED
        - APPROVED
        - BUILDING
        - READY
        - SWAPPED
        - CLEANED
        - FAILED
        - ABORTED
      type: string
    ProviderPoolTableClassification:
      description: |-
        The class of one root or child table of a proposed Provider Pool layout
        against the served one. A table's quarantine table follows
        its class.
      properties:
        cascaded:
          description: >-
            Whether the class came from a change of the root table rather than
            of

            this table: a child whose parent merge key, partition date, data
            kind or

            write semantics changed. Children hang off the root only, so the
            root is

            the one table a class cascades from.
          type: boolean
        changes:
          description: Every change found, in a stable order.
          items:
            $ref: '#/components/schemas/ProviderPoolLayoutChange'
          type: array
        kind:
          $ref: '#/components/schemas/CatalogTableKindEnum'
          description: MAIN or CHILD.
        proposedPhysicalName:
          description: Physical name in the proposed layout; null for a removed table.
          nullable: true
          type: string
        servedPhysicalName:
          description: Physical name in the served layout; null for a new table.
          nullable: true
          type: string
        tableClass:
          $ref: '#/components/schemas/ProviderPoolTableClassEnum'
          description: >-
            The highest class among the table's changes, NONE when there are
            none.
        tableId:
          description: >-
            "" for the root table, else the exploded child's source path joined
            by

            "__". Tables of the two layouts are matched on it.
          type: string
      required:
        - tableId
        - kind
        - tableClass
        - changes
        - cascaded
      type: object
    ProviderPoolLayoutChange:
      description: |-
        One reason a table of a proposed Provider Pool layout differs from the
        served one.
      properties:
        column:
          description: >-
            The physical column the reason is about, in the proposed layout when
            it

            has one, else in the served layout. Null for a table-level reason.
          nullable: true
          type: string
        reason:
          $ref: '#/components/schemas/ProviderPoolLayoutChangeReasonEnum'
      required:
        - reason
      type: object
    CatalogTableKindEnum:
      description: |-
        Position of a served table in its Tap's mapping plan. SQL over Flight
        serves the same values under the `parable.annotation.table_kind` schema
        metadata key.
      enum:
        - main
        - quarantine
        - child
        - child_quarantine
      type: string
    ProviderPoolTableClassEnum:
      description: >-
        Vocabulary of a Provider Pool layout change, amended decisions 10-12).
        The mapping planner's `classify_layout` compares

        a Workspace tap's served layout with a proposed one, table by table.

        What one table's change from the served layout to the proposed one
        needs.

        Ordered from least to most work; a table with several changes takes the

        highest.
      enum:
        - NONE
        - CATALOG_ONLY
        - ADDITIVE
        - REMOVED
        - NEW_TABLE
        - TABLE_REBUILD
        - TAP_REBUILD
      type: string
    ProviderPoolLayoutChangeReasonEnum:
      description: |-
        Why `classify_layout` gave a table its class. Each reason implies one
        class; the table's class is the highest of its reasons.
      enum:
        - ACCESS_CHANGED
        - DOCUMENTATION_CHANGED
        - COLUMN_ADDED
        - STRUCT_FIELD_ADDED
        - COLUMN_WIDENED
        - COLUMN_REMOVED
        - STRUCT_FIELD_REMOVED
        - TABLE_REMOVED
        - TABLE_ADDED
        - TABLE_RENAMED
        - COLUMN_RENAMED
        - COLUMN_SOURCE_CHANGED
        - COLUMN_RETYPED
        - COLUMN_ENCODING_CHANGED
        - COLUMN_STRUCTURAL_CHANGED
        - DEDUP_KEYS_CHANGED
        - ORDERING_COLUMN_CHANGED
        - CUSTOM_FIELD_ROUTING_CHANGED
        - PARENT_MERGE_KEY_CHANGED
        - PARTITION_DATE_CHANGED
        - DATA_KIND_CHANGED
        - DELETION_SEMANTICS_CHANGED
        - DEDUPLICATE_ACROSS_LOADS_CHANGED
        - SYNTHETIC_KEY_CHANGED
      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.