import json
import os
from parable_types_web_api import PublishArtifactInput
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 = PublishArtifactInput.model_validate(
json.loads("{\"requestId\":\"550e8400-e29b-41d4-a716-446655440000\",\"artifactId\":\"550e8400-e29b-41d4-a716-446655440000\",\"tableName\":\"example\"}"),
)
result = sdk.artifacts.publish_artifact(input_data)sdk, err := webapisdk.New(webapisdk.SDKConfig{
BaseURL: os.Getenv("PARABLE_API_URL"),
Auth: &webapisdk.AuthConfig{Token: os.Getenv("PARABLE_API_TOKEN")},
RequestInterceptor: func(ctx context.Context, req *http.Request) error {
req.Header.Set("X-Tenant", os.Getenv("PARABLE_WORKSPACE"))
return nil
},
})
if err != nil {
return err
}
var input webapitypes.PublishArtifactInput
if err := json.Unmarshal([]byte(`{"requestId":"550e8400-e29b-41d4-a716-446655440000","artifactId":"550e8400-e29b-41d4-a716-446655440000","tableName":"example"}`), &input); err != nil {
return err
}
result, err := sdk.ArtifactsNamespace.PublishArtifact(ctx, input){
"data": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"meta": {
"requestId": "<string>",
"totalCount": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"next": "<string>",
"prev": "<string>"
}
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}Publish an Artifact as a data source
Queues a reviewed CSV Artifact for publication. Captures its schema and immutable input, and makes the table available only after successful processing.
import json
import os
from parable_types_web_api import PublishArtifactInput
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 = PublishArtifactInput.model_validate(
json.loads("{\"requestId\":\"550e8400-e29b-41d4-a716-446655440000\",\"artifactId\":\"550e8400-e29b-41d4-a716-446655440000\",\"tableName\":\"example\"}"),
)
result = sdk.artifacts.publish_artifact(input_data)sdk, err := webapisdk.New(webapisdk.SDKConfig{
BaseURL: os.Getenv("PARABLE_API_URL"),
Auth: &webapisdk.AuthConfig{Token: os.Getenv("PARABLE_API_TOKEN")},
RequestInterceptor: func(ctx context.Context, req *http.Request) error {
req.Header.Set("X-Tenant", os.Getenv("PARABLE_WORKSPACE"))
return nil
},
})
if err != nil {
return err
}
var input webapitypes.PublishArtifactInput
if err := json.Unmarshal([]byte(`{"requestId":"550e8400-e29b-41d4-a716-446655440000","artifactId":"550e8400-e29b-41d4-a716-446655440000","tableName":"example"}`), &input); err != nil {
return err
}
result, err := sdk.ArtifactsNamespace.PublishArtifact(ctx, input){
"data": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"meta": {
"requestId": "<string>",
"totalCount": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"next": "<string>",
"prev": "<string>"
}
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}{
"detail": "<string>",
"status": 400,
"title": "Bad Request",
"type": "about:blank",
"code": "WA-VL-001",
"details": "<unknown>",
"errors": "<unknown>",
"requestId": "<string>"
}Access
This operation needs a Parable token. An MCP token cannot call it. See Authentication for the kinds of token. Your roles must granttenant.connectors.taps.write.
Errors
WA-TCT-004: The Artifact was not found in this Workspace. Check the artifact identifier and Workspace context.WA-TCT-009: The Artifact is not ready to publish. Wait for file processing and review the schema first.WA-TCT-010: The Artifact is already published. Use the existing Tap or unpublish it before publishing again.WA-TCT-016: This Artifact file type cannot yet be published. Use a CSV Artifact.
Authorizations
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.
Headers
Workspace slug. Overrides subdomain-based workspace resolution when provided.
"acme"
Optional request correlation ID echoed back in the response.
"550e8400-e29b-41d4-a716-446655440000"
Body
Input for publishing a artifact as a provider connection. The artifact
must be READY with a non-null dataSchema. Publish creates a fresh
TenantConnectorTap whose outputSchema is a snapshot copy of
artifact.dataSchema at publish time; the two diverge thereafter.
Optional name overrides the auto-derived {slug(filename)}-{first 8 hex of artifactId}
default; on a unique-index collision the request returns NAME_ALREADY_EXISTS.
tableName becomes the table's name in the data catalog, and SQL reads
the published data under it. It is also stored as the artifact catalogSlug
/ table identity on the published ARTIFACT tap.
UUID v4 with automatic base62 encoding for client-facing APIs
^([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})$UUID v4 with automatic base62 encoding for client-facing APIs
^([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})$A URL friendly version of a string
1 - 255^[a-z0-9]+(?:[-_][a-z0-9]+)*$An objects name
2 - 80