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

# Read publication progress

> Returns the declared inventory and persisted processing results for an exact revision in the selected Workspace, including the schema analysis derived for each table, partial failures and reused tables. Does not read file bytes or run queries. A removed revision or deleted namespace is not found.

## 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.artifacts.view`.


## OpenAPI

````yaml /api-reference/openapi.json post /api/artifact-publications/receipt
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/artifact-publications/receipt:
    post:
      tags:
        - Artifacts
      summary: Read publication progress
      description: >-
        Returns the declared inventory and persisted processing results for an
        exact revision in the selected Workspace, including the schema analysis
        derived for each table, partial failures and reused tables. Does not
        read file bytes or run queries. A removed revision or deleted namespace
        is not found.
      operationId: ArtifactsArtifactPublicationReceiptHandler
      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/ArtifactPublicationSelection'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/ArtifactPublicationReceipt'
                  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 { ArtifactPublicationSelection } 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: ArtifactPublicationSelection = JSON.parse(`{
              "namespaceId": "550e8400-e29b-41d4-a716-446655440000",
              "revisionId": "550e8400-e29b-41d4-a716-446655440000"
            }`);

            const result = await sdk.artifacts.artifactPublicationReceipt(
              input
            );
        - label: Python SDK
          lang: python
          source: |-
            import json
            import os

            from parable_types_web_api import ArtifactPublicationSelection
            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 = ArtifactPublicationSelection.model_validate(
                json.loads("{\"namespaceId\":\"550e8400-e29b-41d4-a716-446655440000\",\"revisionId\":\"550e8400-e29b-41d4-a716-446655440000\"}"),
            )
            result = sdk.artifacts.artifact_publication_receipt(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::ArtifactPublicationSelection =
            serde_json::from_value(
                serde_json::json!({
              "namespaceId": "550e8400-e29b-41d4-a716-446655440000",
              "revisionId": "550e8400-e29b-41d4-a716-446655440000"
            }),

            )?;

            let result = sdk.artifacts.artifact_publication_receipt(
                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.ArtifactPublicationSelection\nif err := json.Unmarshal([]byte(`{\"namespaceId\":\"550e8400-e29b-41d4-a716-446655440000\",\"revisionId\":\"550e8400-e29b-41d4-a716-446655440000\"}`), &input); err != nil {\n\treturn err\n}\nresult, err := sdk.ArtifactsNamespace.ArtifactPublicationReceipt(ctx, input)"
components:
  schemas:
    ArtifactPublicationSelection:
      additionalProperties: false
      properties:
        namespaceId:
          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
        revisionId:
          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:
        - namespaceId
        - revisionId
      type: object
    ArtifactPublicationReceipt:
      properties:
        activeRevisionId:
          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
        expectedBaseRevisionId:
          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
        failureCode:
          nullable: true
          type: string
        namespaceId:
          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
        namespaceSlug:
          description: >-
            An immutable data-catalog segment:
            parables.{parable_slug}.{plot_slug}
          maxLength: 255
          minLength: 1
          pattern: ^[a-z][a-z0-9]*(_[a-z0-9]+)*$
          type: string
        previousRevisionId:
          description: >-
            The revision active before the current one; activation can switch
            back to 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
        revisionId:
          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
        state:
          $ref: '#/components/schemas/ArtifactRevisionStateEnum'
        tables:
          items:
            $ref: '#/components/schemas/ArtifactPublicationTableReceipt'
          type: array
      required:
        - namespaceId
        - namespaceSlug
        - revisionId
        - state
        - tables
      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
    ArtifactRevisionStateEnum:
      description: >-
        READY means activated successfully at least once; the namespace selects
        the current revision.
      enum:
        - STAGING
        - FAILED
        - READY
      type: string
    ArtifactPublicationTableReceipt:
      properties:
        analysisWork:
          oneOf:
            - $ref: '#/components/schemas/ArtifactWorkStatus'
            - enum:
                - null
              nullable: true
              type: object
        declaration:
          $ref: '#/components/schemas/ArtifactPublicationTableInput'
        ingestWork:
          oneOf:
            - $ref: '#/components/schemas/ArtifactWorkStatus'
            - enum:
                - null
              nullable: true
              type: object
        outputSchema:
          description: >-
            The schema the worker derived from the uploaded input. Null until
            analysis succeeds.
          nullable: true
          type: object
        reused:
          description: >-
            True when the table was unchanged from the base revision and reuses
            its stored data.
          type: boolean
        storageVerified:
          type: boolean
        tableId:
          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:
        - tableId
        - declaration
        - storageVerified
        - reused
      type: object
    ArtifactWorkStatus:
      properties:
        artifactId:
          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
        errorCode:
          oneOf:
            - $ref: '#/components/schemas/ArtifactWorkErrorCode'
            - enum:
                - null
              nullable: true
              type: string
        errorMessage:
          nullable: true
          type: string
        state:
          $ref: '#/components/schemas/ArtifactWorkState'
        tapId:
          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
        workId:
          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:
        - workId
        - artifactId
        - state
      type: object
    ArtifactPublicationTableInput:
      additionalProperties: false
      description: >-
        Complete immutable input declaration. Storage locations are assigned by
        the service,

        and the worker derives the table's schema from the uploaded input.
      properties:
        inputFormat:
          $ref: '#/components/schemas/ArtifactInputFormat'
        inputSha256:
          description: Lowercase hexadecimal SHA-256 digest
          maxLength: 64
          minLength: 64
          pattern: ^[0-9a-f]{64}$
          type: string
        name:
          description: >-
            An immutable data-catalog segment:
            parables.{parable_slug}.{plot_slug}
          maxLength: 255
          minLength: 1
          pattern: ^[a-z][a-z0-9]*(_[a-z0-9]+)*$
          type: string
        rowCount:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          type: integer
        sizeBytes:
          description: File size in bytes (non-negative, BIGINT-backed)
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - name
        - rowCount
        - inputSha256
        - sizeBytes
        - inputFormat
      type: object
    ArtifactWorkErrorCode:
      enum:
        - INVALID_SOURCE
        - INVALID_SCHEMA
        - SIZE_MISMATCH
        - CHECKSUM_MISMATCH
        - ROW_COUNT_MISMATCH
        - UNSUPPORTED_FORMAT
        - STORAGE_ERROR
        - CANCELLED
        - INTERNAL_ERROR
        - DISPATCH_REJECTED
        - DISPATCH_EXHAUSTED
      type: string
    ArtifactWorkState:
      enum:
        - PENDING
        - CLAIMED
        - RUNNING
        - SUCCEEDED
        - FAILED
        - CANCELLED
      type: string
    ArtifactInputFormat:
      description: >-
        The single transport-format contract shared by uploads and publication
        ingestion.
      enum:
        - CSV
        - ARROW_IPC_STREAM
        - OPAQUE
      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.