import { WebApiSDK } from "@parable-platform/web-api-sdk";
import type { CreateParableArtifactInput } 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: CreateParableArtifactInput = JSON.parse(`{
"fileName": "example",
"text": "example",
"idempotencyKey": "example"
}`);
const result = await sdk.parableArtifacts.createParableArtifact(
"example",
input
);import json
import os
from parable_types_web_api import CreateParableArtifactInput
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 = CreateParableArtifactInput.model_validate(
json.loads("{\"fileName\":\"example\",\"text\":\"example\",\"idempotencyKey\":\"example\"}"),
)
result = sdk.parable_artifacts.create_parable_artifact('example', input_data)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::CreateParableArtifactInput = serde_json::from_value(
serde_json::json!({
"fileName": "example",
"text": "example",
"idempotencyKey": "example"
}),
)?;
let result = sdk.parable_artifacts.create_parable_artifact(
serde_json::from_value(serde_json::json!("example"))?,
input,
Some(&options)
).await?;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.CreateParableArtifactInput
if err := json.Unmarshal([]byte(`{"fileName":"example","text":"example","idempotencyKey":"example"}`), &input); err != nil {
return err
}
result, err := sdk.ParableArtifactsNamespace.CreateParableArtifact(ctx, "example", input){
"data": {
"notice": "<string>",
"status": "ready",
"artifact": {
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"fileName": "<string>",
"fileSize": 4503599627370495,
"fileType": "csv",
"id": "<string>",
"kind": "image",
"madeByPonder": true,
"schemaInferenceStatus": "not_requested",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedBy": "<string>",
"uploadStatus": "pending",
"analysisWork": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"attributedTapId": "<string>",
"dataSchema": {},
"deletedAt": "2023-11-07T05:31:56Z",
"familyName": "<string>",
"media": {
"design": {
"hasThumbnail": true
},
"font": {
"axes": [
{
"default": 123,
"max": 123,
"min": 123,
"tag": "<string>"
}
],
"family": "<string>",
"instances": [
{
"coordinates": [
{
"tag": "<string>",
"value": 123
}
],
"name": "<string>"
}
],
"italic": true,
"revision": 123,
"subfamily": "<string>",
"weight": 0,
"width": 0,
"fullName": "<string>",
"postscriptName": "<string>",
"sampleText": "<string>"
},
"image": {
"animated": true,
"height": 0,
"width": 0
},
"video": {
"codec": "<string>",
"durationMs": 0,
"height": 0,
"width": 0
}
},
"parableId": "<string>",
"path": "<string>",
"publishWork": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"rowCount": 0,
"tableAddress": "<string>",
"tableSchema": {},
"uploadExpiresAt": "2023-11-07T05:31:56Z",
"uploadedBy": {
"email": "jsmith@example.com",
"id": "<string>",
"name": "<string>"
}
},
"image": {
"data": "<string>",
"fileName": "<string>",
"mediaType": "<string>"
},
"markup": "<string>",
"omitted": "<string>",
"recovery": "<string>",
"sample": {
"rows": [
{}
],
"schema": {},
"truncated": true,
"inference": {
"columnMetadata": [
{
"confidence": "low",
"demoted": true,
"fieldPath": "<string>",
"sampleFailures": 0,
"sampleSeen": 0,
"firstSampleError": "<string>"
}
],
"model": "<string>",
"schema": {},
"tokenInputCount": 0,
"tokenOutputCount": 0,
"processor": "VERTEX"
}
},
"sampleRowCount": 0
},
"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>"
}{
"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>"
}Create a Parable Artifact
Stores one text file in a Parable’s Artifacts: SVG, CSV or JSON Lines text. It uses the same name rule, allowlist, size setting and worker check as a person’s upload, and adds a file only where the caller could. The same idempotencyKey with the same name and text stores one file. The hosted MCP endpoint takes a request of at most 1 MiB, JSON included, so a file over MCP must be smaller. Pass the rootRefId of the Parable.
import { WebApiSDK } from "@parable-platform/web-api-sdk";
import type { CreateParableArtifactInput } 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: CreateParableArtifactInput = JSON.parse(`{
"fileName": "example",
"text": "example",
"idempotencyKey": "example"
}`);
const result = await sdk.parableArtifacts.createParableArtifact(
"example",
input
);import json
import os
from parable_types_web_api import CreateParableArtifactInput
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 = CreateParableArtifactInput.model_validate(
json.loads("{\"fileName\":\"example\",\"text\":\"example\",\"idempotencyKey\":\"example\"}"),
)
result = sdk.parable_artifacts.create_parable_artifact('example', input_data)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::CreateParableArtifactInput = serde_json::from_value(
serde_json::json!({
"fileName": "example",
"text": "example",
"idempotencyKey": "example"
}),
)?;
let result = sdk.parable_artifacts.create_parable_artifact(
serde_json::from_value(serde_json::json!("example"))?,
input,
Some(&options)
).await?;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.CreateParableArtifactInput
if err := json.Unmarshal([]byte(`{"fileName":"example","text":"example","idempotencyKey":"example"}`), &input); err != nil {
return err
}
result, err := sdk.ParableArtifactsNamespace.CreateParableArtifact(ctx, "example", input){
"data": {
"notice": "<string>",
"status": "ready",
"artifact": {
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"fileName": "<string>",
"fileSize": 4503599627370495,
"fileType": "csv",
"id": "<string>",
"kind": "image",
"madeByPonder": true,
"schemaInferenceStatus": "not_requested",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedBy": "<string>",
"uploadStatus": "pending",
"analysisWork": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"attributedTapId": "<string>",
"dataSchema": {},
"deletedAt": "2023-11-07T05:31:56Z",
"familyName": "<string>",
"media": {
"design": {
"hasThumbnail": true
},
"font": {
"axes": [
{
"default": 123,
"max": 123,
"min": 123,
"tag": "<string>"
}
],
"family": "<string>",
"instances": [
{
"coordinates": [
{
"tag": "<string>",
"value": 123
}
],
"name": "<string>"
}
],
"italic": true,
"revision": 123,
"subfamily": "<string>",
"weight": 0,
"width": 0,
"fullName": "<string>",
"postscriptName": "<string>",
"sampleText": "<string>"
},
"image": {
"animated": true,
"height": 0,
"width": 0
},
"video": {
"codec": "<string>",
"durationMs": 0,
"height": 0,
"width": 0
}
},
"parableId": "<string>",
"path": "<string>",
"publishWork": {
"artifactId": "<string>",
"state": "PENDING",
"workId": "<string>",
"errorCode": "INVALID_SOURCE",
"errorMessage": "<string>",
"tapId": "<string>"
},
"rowCount": 0,
"tableAddress": "<string>",
"tableSchema": {},
"uploadExpiresAt": "2023-11-07T05:31:56Z",
"uploadedBy": {
"email": "jsmith@example.com",
"id": "<string>",
"name": "<string>"
}
},
"image": {
"data": "<string>",
"fileName": "<string>",
"mediaType": "<string>"
},
"markup": "<string>",
"omitted": "<string>",
"recovery": "<string>",
"sample": {
"rows": [
{}
],
"schema": {},
"truncated": true,
"inference": {
"columnMetadata": [
{
"confidence": "low",
"demoted": true,
"fieldPath": "<string>",
"sampleFailures": 0,
"sampleSeen": 0,
"firstSampleError": "<string>"
}
],
"model": "<string>",
"schema": {},
"tokenInputCount": 0,
"tokenOutputCount": 0,
"processor": "VERTEX"
}
},
"sampleRowCount": 0
},
"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>"
}{
"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>"
}Create a Parable Artifact
create_parable_artifactAuthorizations
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"
Path Parameters
rootRefId parameter UUID v4 with automatic base62 encoding for client-facing APIs
Body
A text file that an agent wrote. It goes through the same name rule, allowlist, size setting and worker check as a person's upload.
The file name, such as logo.svg. A name the Parable already has gets a number.
1A new key for each file. The same key with the same name and text stores one file: the call answers that file's current state.
^([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})$The file's whole text.
1Response
Successful response
One file of a Parable as a model reads it. The answer holds the file's bytes when they fit, and never an address for them: a signed download URL stays in web-api. Apart from its image, an answer is fewer than 40,000 characters.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?