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

# Run a Report on a Parable

> Starts a Report reading against a Parable using the data source you choose. The result shows up as a Report run. With preview, the run reads a sample of the data and can run on a set of Changes; prefer a Preview while you iterate and a full run once the Changes are published.

## 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.parables.manage`.

## Errors

* `PA-AU-001`: The Parable or its published Report context was not found, or the set of Changes to Preview is not one the caller may open on this Parable. Check the rootRefId and confirm a published Version exists; for a Preview, check the proposalId.
* `PA-AU-006`: The idempotency key was already used for different input. Generate a new idempotency key.
* `PA-AU-007`: The Parable is pocketed, so it cannot run a Report. Restore the Parable, then run its Report.
* `PA-AU-019`: The caller cannot run a Report for this Parable. Use a Workspace identity with Parable manage permission and the required RACI role.
* `PA-AU-005`: The published Version has no Pipeline to run, a Refresh named a set of Changes, or a Refresh of this Report is still running. Make a Plot a Pipeline and publish, Preview the set instead of refreshing it, or wait for the run that the message names.


## OpenAPI

````yaml /api-reference/openapi.json post /api/parable/authoring/primaries/{rootRefId}/actions/plot
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/parable/authoring/primaries/{rootRefId}/actions/plot:
    post:
      tags:
        - Parable authoring
      summary: Run a Report on a Parable
      description: >-
        Starts a Report reading against a Parable using the data source you
        choose. The result shows up as a Report run. With preview, the run reads
        a sample of the data and can run on a set of Changes; prefer a Preview
        while you iterate and a full run once the Changes are published.
      operationId: ParableAuthoringPlotWorkspaceParableReportHandler
      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: rootRefId parameter
          in: path
          name: rootRefId
          required: true
          schema:
            description: UUID v4 with automatic base62 encoding for client-facing APIs
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlotParableReportInput'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/ParableReportRunView'
                  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 { PlotParableReportInput } 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: PlotParableReportInput = JSON.parse(`{
              "idempotencyKey": "550e8400-e29b-41d4-a716-446655440000"
            }`);

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

            import os


            from parable_types_web_api import PlotParableReportInput

            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 = PlotParableReportInput.model_validate(
                json.loads("{\"idempotencyKey\":\"550e8400-e29b-41d4-a716-446655440000\"}"),
            )

            result =
            sdk.parable_authoring.plot_workspace_parable_report('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::PlotParableReportInput = serde_json::from_value(
                serde_json::json!({
              "idempotencyKey": "550e8400-e29b-41d4-a716-446655440000"
            }),

            )?;

            let result = sdk.parable_authoring.plot_workspace_parable_report(
                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.PlotParableReportInput\nif err := json.Unmarshal([]byte(`{\"idempotencyKey\":\"550e8400-e29b-41d4-a716-446655440000\"}`), &input); err != nil {\n\treturn err\n}\nresult, err := sdk.ParableAuthoringNamespace.PlotWorkspaceParableReport(ctx, \"example\", input)"
components:
  schemas:
    PlotParableReportInput:
      description: >-
        What Plot returns: the run it minted, so the picker can select it at
        once.
      properties:
        force:
          description: >-
            Refresh everything: every Pipeline recomputes, even one

            whose inputs, plan and settings match an earlier Refresh. Null or
            false

            is Refresh, which reuses such a Pipeline's output. The run records
            it,

            and the audit trail names who forced it.
          nullable: true
          type: boolean
        idempotencyKey:
          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
        preview:
          description: |-
            True runs a Preview: the whole Report end to end on a
            sample of the real data, stored and listed like a Refresh but never
            Latest, and kept for a shorter time. False or null runs a Refresh.
          nullable: true
          type: boolean
        proposalId:
          description: >-
            The set of Changes to Preview, by ParableProposal.id; a Preview
            only.

            The run reads the set as it stands when Preview is pressed. Null
            previews

            the newest published Version.
          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
        reportKey:
          description: >-
            The Report the run belongs to: an enabled Report of the captured
            Version.

            Null names the Version's first enabled Report by order, or the
            Parable

            itself when the Version has no enabled Report. Every run runs every

            Pipeline, whatever its Report. Creating a run never changes the
            authored

            definition.
          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
      required:
        - idempotencyKey
      type: object
    ParableReportRunView:
      description: |-
        One reading, and the version it read.
        `publishedCommitId` is never a version string such as `v2.3`. Read the
        version's number from the published commit.
      properties:
        completedAt:
          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
        durationMs:
          description: >-
            Measured, not derived from the two timestamps: a run whose process
            dies

            before stamping completedAt still knows how long its work took, and

            subtracting silently reports a negative when a clock moves.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        failureMessage:
          nullable: true
          type: string
        forced:
          description: >-
            Refresh everything: every Pipeline of this run recomputed,

            reusing no earlier output. False for a Refresh, which reuses
            unchanged

            Pipelines, and for every run a Report Plan fires (SCHEDULED or
            SOURCES).
          type: boolean
        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
        occurredAt:
          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
        planKey:
          description: >-
            Null when the trigger was MANUAL: somebody pressed Plot, no Plan
            fired.
          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
        plotResults:
          items:
            $ref: '#/components/schemas/ParableReportPlotResultView'
          type: array
        preview:
          description: >-
            True for a Preview: the Report run end to end on a sample

            of the real data. It is never Latest; a reader reads it only by
            choosing

            it.
          type: boolean
        proposalId:
          description: >-
            The set of Changes a Preview ran on, by ParableProposal.id. Null on
            a

            Refresh and on a Preview of a published Version.
          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
        publishedCommitId:
          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
        reportKey:
          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
        requestedBy:
          description: >-
            The person who pressed Run. Null for a SCHEDULED run: no person
            asked.
          oneOf:
            - $ref: '#/components/schemas/ParableActorSnapshotView'
            - enum:
                - null
              nullable: true
              type: object
        sources:
          items:
            $ref: '#/components/schemas/ParableReportSourceView'
          type: array
        status:
          $ref: '#/components/schemas/ParableReportRunStatus'
        trigger:
          $ref: '#/components/schemas/ParableReportRunTrigger'
        triggerSources:
          description: >-
            For a SOURCES Refresh, the source changes that fired it, in the
            order the

            fire recorded them. Empty for every other trigger.
          items:
            $ref: '#/components/schemas/ParableReportTriggerSourceView'
          type: array
        typicalDurationMs:
          description: >-
            For a run that has not ended: the median duration of the newest ten

            completed runs of its Report of the same kind (Refresh or Preview).
            The

            progress bar estimates the time left from it. Absent for a run that
            has

            ended, and for a Report with no completed run of that kind.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        unavailableReason:
          description: >-
            Why the reading cannot read this completed Refresh: the Refresh ran
            for a

            Release in another major line. Null when the Release being read is
            in the

            same major line. This is Release compatibility, not a promise about
            the

            reader's current access. A Plot that the Refresh did not store, or
            whose

            output it stored under another shape, still has no data in it.
          nullable: true
          type: string
      required:
        - id
        - reportKey
        - publishedCommitId
        - occurredAt
        - status
        - trigger
        - triggerSources
        - preview
        - forced
        - sources
        - plotResults
      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
    ParableReportPlotResultView:
      description: >-
        One Plot's outcome inside one run, pinned to the exact sealed image it
        ran.
      properties:
        completedAt:
          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
        errorMessage:
          description: A product message for a failed, cancelled or budget-paused Plot.
          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
        maxCost:
          description: >-
            The caps the Plot's query run runs under: its published caps when
            the run

            was captured, or the caps a Raise budget set since. Null

            means none was set and Parable applied its default, which this view

            cannot name.
          oneOf:
            - $ref: '#/components/schemas/ParablePlotCostCap'
            - enum:
                - null
              nullable: true
              type: object
        maxExternalCalls:
          oneOf:
            - $ref: '#/components/schemas/ParablePlotExternalCallsCap'
            - enum:
                - null
              nullable: true
              type: object
        plotEntityKey:
          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
        plotEntityVersion:
          description: >-
            The sealed version of the Plot that ran, so editing it later cannot
            rewrite

            what happened. `plotName` is captured for the same reason: a rename
            must not

            retitle history.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        plotName:
          description: An objects name
          maxLength: 80
          minLength: 2
          type: string
        reusedFrom:
          description: >-
            The earlier Refresh this Plot's output was reused from, when its
            query

            run found its inputs unchanged and completed as that output without

            running. Its spend is then zero. Null when the Plot ran.
          oneOf:
            - $ref: '#/components/schemas/ParableReportReuseView'
            - enum:
                - null
              nullable: true
              type: object
        rowCount:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        rowCountHidden:
          description: >-
            True when the reader may not see this Plot's row count; `rowCount`
            is then

            absent. The flag tells a hidden count from a count the run has not

            recorded, which is also absent.
          type: boolean
        spentCalls:
          format: double
          type: number
        spentCost:
          description: >-
            What the Plot's run has spent so far: cost in the smallest currency
            unit,

            and paid external calls. Updated with each status change, not live.
          format: double
          type: number
        startedAt:
          description: When the Plot started and finished running. Null until each happens.
          format: date-time
          nullable: true
          type: string
        status:
          $ref: '#/components/schemas/ParableReportPlotResultStatusEnum'
        updatedAt:
          description: >-
            When this result last changed: the latest status change applied to
            it.
          format: date-time
          type: string
      required:
        - id
        - plotEntityKey
        - plotEntityVersion
        - plotName
        - status
        - updatedAt
        - rowCountHidden
        - spentCost
        - spentCalls
      type: object
    ParableActorSnapshotView:
      properties:
        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/ParableActorKindEnum'
        name:
          description: An objects name
          maxLength: 80
          minLength: 2
          nullable: true
          type: string
      required:
        - id
        - kind
      type: object
    ParableReportSourceView:
      description: >-
        WHAT A READER SEES OF A REPORT.

        The authored side of reporting -- ParableReport and ParableReportPlan --
        is

        two @versioned entity kinds that ride the ordinary patch machinery and
        reach

        the client inside the composed tree, like every other Piece. Nothing
        here

        duplicates them.

        These are the OPERATIONAL rows: what happened when a Report ran. They
        are not

        entity kinds, never appear in a change list, and are read straight
        rather than

        composed, so they need views of their own.

        One Provider as a Refresh read it, or, for the Refresh menu's Latest, as
        it

        stands now.

        Immutable history: the ids are captured VALUES rather than relations, so

        deleting a connector cannot invalidate a reading that already happened.
      properties:
        connectionStatus:
          description: >-
            The connection's status when the run read the Provider, as the
            Providers

            directory settles it (while a sync runs, the status before it). Null
            when

            the Workspace had no connection for the Provider.
          oneOf:
            - $ref: '#/components/schemas/TenantConnectorStatusEnum'
            - enum:
                - null
              nullable: true
              type: string
        connectionStatusMessage:
          description: >-
            The raw detail for connectionStatus, as the Provider or Parable
            reported

            it. The Parable app shows the status in its own words instead.
          nullable: true
          type: string
        dataAsOf:
          description: >-
            When the newest version the run read of the Provider's Pool tables
            was

            committed: how old its data was. Null when the run pinned none.
          format: date-time
          nullable: true
          type: string
        delivery:
          $ref: '#/components/schemas/ParableReportSourceDeliveryEnum'
          description: >-
            How the Provider delivers its data, from the catalog's integration
            class

            (Connector.integrationClass): STREAMING when the connector streams,
            BATCH

            for any other class, UNKNOWN when the catalog has not classified it.

            Captured when the run read the Provider; the Refresh menu's Latest
            reads

            it from the catalog now. Only a STREAMING Provider whose data is
            minutes

            old can read "Updated Live".
        hasData:
          description: >-
            Whether the Provider had any data. For a Refresh: true when

            it pinned a version of any of the Provider's Pool tables, false when
            it

            read every one of them as never written or the Provider as not
            connected.

            For Latest: whether Parable reports a commit for any of its

            tables that the reader may read. Null when not known: a Refresh
            recorded

            before, or a Latest whose commits could not be read. A

            connected Provider with false is waiting for its first data, unless

            `streamsOff` names a stream: then it needs the reader.
          nullable: true
          type: boolean
        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
        logoUrl:
          description: >-
            The Provider's logo in the catalog, read when the view is built, as
            the

            Providers pages show it: its grouping's, else its vendor's. Null
            when the

            catalog has none.
          nullable: true
          type: string
        name:
          description: >-
            The product a reader knows, "Google Workspace": the catalog's name
            for the

            connection's grouping, else its connector's. When the Workspace has
            more

            than one connection of the Provider, each row is its connection's
            own name

            instead, so the rows can be told apart. A captured value: a Refresh
            keeps

            the name it recorded, and a later catalog rename does not rename it.
            The

            Refresh menu's Latest reads it from the catalog now.
          maxLength: 80
          minLength: 2
          type: string
        provider:
          description: >-
            The Provider, by its name in Plot SQL: `zoom` in
            providers.zoom.meetings.
          nullable: true
          type: string
        streamsOff:
          description: >-
            The Provider's streams the run read while the Workspace had them
            off, by

            platform tap name: `replies` in providers.slack.replies.

            They read as empty, and no data comes until one is turned on, so the

            Provider needs the reader whether or not its other streams had data.
            For

            Latest: the ones the line's newest Refresh read off that are still
            off.

            Null when there are none, and for a Refresh recorded before they
            were

            kept.
          items:
            description: >-
              A machine identifier for a data tap (lowercase letter, then
              lowercase alphanumeric or underscores)
            maxLength: 80
            minLength: 1
            pattern: ^[a-z][a-z0-9_]*$
            type: string
          nullable: true
          type: array
        tenantConnectorId:
          description: >-
            The connector this was, by captured id. Not a relation. Null for a

            Provider the run read as empty because the Workspace has not
            connected it.
          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
        vendorName:
          description: '"Google", where `name` is "Google Workspace". Not a fallback for it.'
          nullable: true
          type: string
      required:
        - id
        - name
        - delivery
      type: object
    ParableReportRunStatus:
      description: |-
        Lifecycle status of a parable report run.

        COMPLETE, FAILED and CANCELLED are terminal: a query_runner run never
        leaves them, and only a COMPLETE run is readable.
      enum:
        - pending
        - running
        - complete
        - failed
        - cancelled
      type: string
    ParableReportRunTrigger:
      description: How a parable report run was triggered.
      enum:
        - scheduled
        - manual
        - sources
      type: string
    ParableReportTriggerSourceView:
      description: >-
        One source change that fired a SOURCES Refresh, named as the

        source stands now: the Provider connection whose tap's data landed, or
        the

        Parable that completed a Refresh. History and the Refresh menu say
        "After

        Okta synced" or "After Shared Kinds refreshed" from it.
      properties:
        completedAt:
          description: The source's last completion the fire counted.
          format: date-time
          type: string
        kind:
          $ref: '#/components/schemas/ParableReportTriggerSourceKind'
        name:
          description: >-
            The Provider connection's name, or the Parable's, as it is now.
            Empty

            when the source no longer exists in the Refresh's Workspace, and for
            a

            Parable the reader may not see, which the app calls "another
            Parable".
          type: string
        sourceId:
          description: >-
            provider connection.id for PROVIDER_TAP, ProductParable.id for
            PARABLE.
          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:
        - kind
        - sourceId
        - name
        - completedAt
      type: object
    ParablePlotCostCap:
      properties:
        value:
          description: Monetary amount in smallest currency unit (e.g., cents for USD)
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - value
      type: object
    ParablePlotExternalCallsCap:
      description: A cap on a Plot's paid external calls.
      properties:
        value:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - value
      type: object
    ParableReportReuseView:
      description: |-
        The earlier Refresh whose output a Plot result reuses: the
        Refresh whose query run wrote the rows. History reads "Reused from" it.
      properties:
        occurredAt:
          description: >-
            When that Refresh was pressed or fired, as its own History row shows
            it.
          format: date-time
          type: string
        preview:
          description: >-
            True when that run was a Preview. Only a Preview reuses a

            Preview's output: a Preview's run key includes its sample, so a
            Refresh

            never names one.
          type: boolean
        reportRunId:
          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:
        - reportRunId
        - occurredAt
        - preview
      type: object
    ParableReportPlotResultStatusEnum:
      description: >-
        The outcome of running one Plot inside one report run.


        Separate from ParableReportRunStatus, which is the whole run. A run is

        COMPLETE only when every Plot in it is COMPLETE; one FAILED or CANCELLED
        Plot

        makes the whole run unreadable. The per-Plot status says which Plot
        stopped

        it and how far each of the others got.
      enum:
        - pending
        - running
        - budget_exceeded
        - complete
        - failed
        - cancelled
        - skipped
      type: string
    ParableActorKindEnum:
      description: >-
        The kind of actor a Parable responsibility names: a person, an agent, or
        an

        organization. A Parable Platform, a Parable Workspace and a Role are

        organizations.
      enum:
        - organization
        - person
        - agent
        - platform
        - workspace
        - role
      type: string
    TenantConnectorStatusEnum:
      description: Operational status of a workspace connector instance.
      enum:
        - disabled
        - sync_failed
        - manual_validation_required
        - validation_pending
        - initial_syncing
        - update_syncing
        - sync_queued
        - idle
        - sync_partial_success
        - transform_quality_degraded
        - schedule_paused
        - config_invalid
        - credential_error
        - internal_error
        - ingestion_stale
      type: string
    ParableReportSourceDeliveryEnum:
      description: >-
        How a source delivered its data at the moment a report ran.


        This is the freshness question a reader actually asks, and it is not the
        same

        question as ConnectorTap's SyncModeEnum (FULL vs INCREMENTAL), which is
        about

        how much a sync moves rather than how continuously it moves.
      enum:
        - batch
        - streaming
        - unknown
      type: string
    ParableReportTriggerSourceKind:
      description: What kind of source change made a Report plan's afterSources fire due.
      enum:
        - provider_tap
        - parable
      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.