# Parable Developers > API, SDKs, and guides for your Parable workspace. ## Docs - [Introduction](https://developers.askparable.com/index.md): The Parable API, SDKs, and data platform for your workspace. - [Authentication](https://developers.askparable.com/getting-started/authentication.md): Authenticate API requests with workspace API tokens. - [Your first request](https://developers.askparable.com/getting-started/first-request.md): Verify your token and list the connectors in your workspace. - [SDKs](https://developers.askparable.com/platform/sdks.md): Official clients for TypeScript, Go, Python, and Rust. - [TypeScript SDK](https://developers.askparable.com/platform/sdk-typescript.md): Install the TypeScript client, authenticate, and call the API. - [Go SDK](https://developers.askparable.com/platform/sdk-go.md): Install the Go client, authenticate, and call the API. - [Python SDK](https://developers.askparable.com/platform/sdk-python.md): Install the Python client, authenticate, and call the API. - [Rust SDK](https://developers.askparable.com/platform/sdk-rust.md): Install the Rust client, authenticate, and call the API. - [How connectors work](https://developers.askparable.com/connectors/overview.md): A connector is a definition plus your instance: auth strategies, taps, and rate limits. - [How ingestion walks a source](https://developers.askparable.com/connectors/ingestion.md): Read the connector definition to see how a sync resolves the URL, walks taps in order, pages the API, and lands records. - [Auth strategies](https://developers.askparable.com/connectors/auth.md): A connector can offer several ways to authenticate. You pick one when you connect. - [Taps and streams](https://developers.askparable.com/connectors/taps.md): A tap is one stream: a transport, a pagination style, a sync mode, and a record shape. - [How taps project into tables](https://developers.askparable.com/connectors/tap-projection.md): Dedup keys, ordering keys, and identity keys on a tap schema are how provider tables stay unique and joinable. - [Parable Data Engine](https://developers.askparable.com/data/index.md): Query your workspace lake: providers, artifacts, parables, workspace, and AI SQL functions. - [Providers](https://developers.askparable.com/data/providers.md): Query any connected tool at providers.{connector}.{table} and join connectors in SQL. - [Artifacts](https://developers.askparable.com/data/artifacts.md): Published uploads live at artifacts.{table}. - [Parables](https://developers.askparable.com/data/parables.md): Materialized Plot results live at parables.{parable}.{plot}. - [Workspace](https://developers.askparable.com/data/workspace.md): Live workspace metadata lives at workspace.{table}. - [Quality](https://developers.askparable.com/data/quality.md): SPC, checks, and table health live at providers_quality.summary.* and per-table history sidecars. - [AI](https://developers.askparable.com/data/ai.md): Call ponder() and embed() in Flight SQL to run models over lake tables. - [API Reference](https://developers.askparable.com/api-reference/overview.md): The Parable REST API: endpoints, parameters, and a playground. - [Field types](https://developers.askparable.com/platform/field-types.md): Every Parable scalar, by namespaced name, and how it looks on the wire. - [artifacts](https://developers.askparable.com/api-reference/artifacts/artifacts.md): List artifacts uploaded to this workspace. - [browseArtifacts](https://developers.askparable.com/api-reference/artifacts/browseartifacts.md): List artifacts and virtual subfolders at a given path for the current workspace. Pass `path` to drill into a folder; omit (or pass empty) to list the workspace root. - [deleteArtifactFolder](https://developers.askparable.com/api-reference/artifacts/deleteartifactfolder.md): DELETE /api/artifacts/folder?path={path} Soft-delete every non-deleted artifact whose path equals or descends from `path` for the current workspace. Returns the number of artifacts deleted. Refused for any artifact in the subtree that has a published TenantConnectorTap. - [publishArtifact](https://developers.askparable.com/api-reference/artifacts/publishartifact.md): Publish an upload-ready TenantArtifact with a valid dataSchema as a TenantConnectorTap (EDR-0021 glue). Creates the workspace's Artifact-connector TenantConnector if missing, then creates a TenantConnectorTap whose `outputSchema` is a snapshot copy of `artifact.dataSchema`. The artifact's schema and… - [runArtifactSchemaInference](https://developers.askparable.com/api-reference/artifacts/runartifactschemainference.md): Run (or re-run) schema inference on a CSV artifact. Reads the head from GCS, parses the sample, calls the inferer, and persists the resulting schema + column metadata. Used both for the initial inference (post- upload) and for recomputing after a prior failure or user request. - [unpublishArtifact](https://developers.askparable.com/api-reference/artifacts/unpublishartifact.md): Unpublish a TenantArtifact. Soft-deletes the artifact-derived TenantConnectorTap and its ConnectorTapContract in a single transaction. Idempotent: returns 404 ARTIFACT_NOT_PUBLISHED when no active tap exists. V1: the materialized Delta table in GCS is not removed. - [updateArtifactDataSchema](https://developers.askparable.com/api-reference/artifacts/updateartifactdataschema.md): Replace the data schema on an existing artifact after a manual edit. This does not change the outcome of the last automated inference attempt. - [uploadArtifact](https://developers.askparable.com/api-reference/artifacts/uploadartifact.md): Upload an artifact file to this workspace. Behavior depends on `file.fileType`: - **CSV**: the file head is parsed to validate encoding/delimiter/columns and a header-only `dataSchema` is synthesized with every column typed `String`. The artifact is persisted with `uploadStatus = READY`, `schemaInfe… - [artifact](https://developers.askparable.com/api-reference/artifacts/artifact.md): Fetch a single artifact by id, scoped to the calling workspace. Returns null when the artifact does not exist or does not belong to this workspace (cross-workspace existence is intentionally hidden). - [deleteArtifact](https://developers.askparable.com/api-reference/artifacts/deleteartifact.md): DELETE /api/artifacts/{artifactId} Soft-delete a workspace artifact. Refused with a typed error if a TenantConnectorTap was published from this artifact; the caller must remove the tap first. - [artifactDataPreview](https://developers.askparable.com/api-reference/artifacts/artifactdatapreview.md): Preview the data backing an artifact (first N rows after the header). `limit` is optional and capped server-side to 500. - [updateArtifact](https://developers.askparable.com/api-reference/artifacts/updateartifact.md): PATCH /api/artifacts/{id} Patch mutable fields on an existing artifact (currently `path` and `fileName`). Fields omitted are left unchanged. Pass `path: null` explicitly to move the artifact to the workspace root. - [catalog](https://developers.askparable.com/api-reference/catalog/catalog.md): Returns the workspace's catalog grouped by layer. Set includeLineage=true to include graph edges across contracts. Set includeHealth=true to include the latest health snapshot per contract (sourced from the most recent transformation_dataset_result joined to transformation_run, so lastSuccessfulRunA… - [contractTableStats](https://developers.askparable.com/api-reference/catalog/contracttablestats.md): Latest catalog table-statistics snapshot for every contract in the workspace's catalog (EDR-0031). Sourced from the Query Layer's REST control surface; web-api applies workspace permission gating and forwards the response unchanged. - [contractTableStatsById](https://developers.askparable.com/api-reference/catalog/contracttablestatsbyid.md): Latest catalog table-statistics snapshot for one contract. Returns null when the contract has never had a successful capture. - [tableMaintenanceRuns](https://developers.askparable.com/api-reference/catalog/tablemaintenanceruns.md): Maintenance-run log for the workspace's catalog. Admin-only because it surfaces internal Delta-maintenance operations run by services/provider-transformations queue jobs through parable-dataplane-quality-rs. - [tableQualityResults](https://developers.askparable.com/api-reference/catalog/tablequalityresults.md): Latest TableQualityResult for every contract in the workspace's catalog. Records are written by services/provider-transformations queue jobs through parable-dataplane-quality-rs. - [tableShapeStats](https://developers.askparable.com/api-reference/catalog/tableshapestats.md): Latest TableShapeStats snapshot for every contract in the workspace's catalog. First-build implementation of the typed stats surface EDR-0031 proposed. The canonical type lives in platform-schemas/services/dataplane-maintenance/; records are written by services/provider-transformations queue jobs th… - [tableSpcResults](https://developers.askparable.com/api-reference/catalog/tablespcresults.md): Latest TableSpcResult for every contract in the workspace's catalog. Records are written by services/provider-transformations queue jobs through parable-dataplane-quality-rs. - [connectorRequests](https://developers.askparable.com/api-reference/connector-requests/connectorrequests.md) - [createConnectorRequest](https://developers.askparable.com/api-reference/connector-requests/createconnectorrequest.md) - [connectorRequest](https://developers.askparable.com/api-reference/connector-requests/connectorrequest.md) - [addConnectorToTenant](https://developers.askparable.com/api-reference/connectors/addconnectortotenant.md): POST /api/connectors Add a connector to this workspace with initial configuration - [connectorCategories](https://developers.askparable.com/api-reference/connectors/connectorcategories.md): GET /api/connectors/categories All connector categories ordered by sort_order. Used by the DYNAMIC_TOOL_GROUPS milestone picker to resolve section labels from category slugs. Returns a flat list -- children are nested via ConnectorCategory.children when loaded. - [configureConnector](https://developers.askparable.com/api-reference/connectors/configureconnector.md): POST /api/connectors/configure Configure an existing connector instance providing the required account setup - [connectorOAuthComplete](https://developers.askparable.com/api-reference/connectors/connectoroauthcomplete.md) - [connectorOAuthStart](https://developers.askparable.com/api-reference/connectors/connectoroauthstart.md) - [tenantConnectorTaps](https://developers.askparable.com/api-reference/connectors/tenantconnectortaps.md): List all ConnectorTap definitions available across this workspace's installed connector instances. The customer data catalog uses this to enrich tap contracts with their tap definition (name, description, sync config, etc.). Returns one ConnectorTap per (connector, tap) pair the workspace has access… - [validateCredentials](https://developers.askparable.com/api-reference/connectors/validatecredentials.md): POST /api/connectors/validate Validate stored credentials by testing against the third-party service. Updates credential_metadata status based on validation result. - [removeConnector](https://developers.askparable.com/api-reference/connectors/removeconnector.md): DELETE /api/connectors/{tenantConnectorId} Remove an assigned connector from this workspace - [connectorConfigurationHistory](https://developers.askparable.com/api-reference/connectors/connectorconfigurationhistory.md): GET /api/connectors/{tenantConnectorId}/config-history All the configuration history for a specific workspace connector instance - [ingestTokens](https://developers.askparable.com/api-reference/ingest-tokens/ingesttokens.md): GET /api/ingest-tokens List the workspace's ingest tokens, newest-first. When tenantConnectorTapId is supplied results are scoped to that tap. Includes revoked and expired rows so the UI can show their disposition. - [mintIngestToken](https://developers.askparable.com/api-reference/ingest-tokens/mintingesttoken.md): POST /api/ingest-tokens Mint a new ingest token for a collector TenantConnectorTap. The plaintext is returned exactly once in MintIngestTokenResult.token (with the full endpoint URL); only the SHA-256 hash is persisted. Refused with a typed error if the tap already has a live (non-revoked, non-expir… - [revokeIngestToken](https://developers.askparable.com/api-reference/ingest-tokens/revokeingesttoken.md): POST /api/ingest-tokens/{id}/revoke Revoke an ingest token immediately (modulo collector cache TTL). Idempotent -- revoking an already-revoked token returns true without error. Returns 404 if the token does not exist or belongs to a different workspace. - [rotateIngestToken](https://developers.askparable.com/api-reference/ingest-tokens/rotateingesttoken.md): POST /api/ingest-tokens/{id}/rotate Rotate an ingest token: mints a replacement for the same tap and puts the old token into a rotation grace window (expiresAt set server-side) so senders with the URL registered in a vendor console have time to update. Returns the new token's plaintext exactly once.… - [info](https://developers.askparable.com/api-reference/query/info.md): Get workspace info for the current workspace context - [roles](https://developers.askparable.com/api-reference/roles/roles.md): List workspace-scoped roles assignable within the current workspace. - [createTenantConnectorTap](https://developers.askparable.com/api-reference/connector-taps/createtenantconnectortap.md): POST /api/workspace-connector-taps Create a per-workspace tap. For platform tap overrides, the outputSchema must be a structural subset of the platform tap's schema. For artifact-derived taps, the artifactId references the originating TenantArtifact. - [tenantConnectorTaps](https://developers.askparable.com/api-reference/connector-taps/tenantconnectortaps.md): GET /api/workspace-connector-taps List the workspace's connector taps. When tenantConnectorId is supplied results are scoped to that connector; otherwise all taps for the workspace are returned. Paginated via limit/offset. Default limit: 250, max limit: 250. The declared max is the single source of… - [tenantConnectorTap](https://developers.askparable.com/api-reference/connector-taps/tenantconnectortap.md): GET /api/workspace-connector-taps/{id} Fetch a single workspace connector tap by id. The workspace scope is enforced in the service layer. - [deleteTenantConnectorTap](https://developers.askparable.com/api-reference/connector-taps/deletetenantconnectortap.md): DELETE /api/workspace-connector-taps/{id} Soft-delete a workspace connector tap. Refused with a typed error if any ConnectorTapContract still references the tap; callers must remove the contract first. - [updateTenantConnectorTap](https://developers.askparable.com/api-reference/connector-taps/updatetenantconnectortap.md): PATCH /api/workspace-connector-taps/{id} Update mutable fields on an existing tap. The platform tap binding, workspace-connector binding, and artifact reference are immutable. - [inviteUser](https://developers.askparable.com/api-reference/users/inviteuser.md): POST /api/users/invitations Invite a user into by email with the specified permissions - [revokeInvite](https://developers.askparable.com/api-reference/users/revokeinvite.md): DELETE /api/users/invitations/{inviteId} Revokes an invite that has been sent out - [resendInvite](https://developers.askparable.com/api-reference/users/resendinvite.md): POST /api/users/invitations/{inviteId}/resend Resend a pending invite email and extend the expiry. - [invites](https://developers.askparable.com/api-reference/users/invites.md): All the invites that have been sent out for this Workspace - [me](https://developers.askparable.com/api-reference/users/me.md): Get the current user's info on this workspace - [user](https://developers.askparable.com/api-reference/users/user.md): Get a specific Workspace user by id - [users](https://developers.askparable.com/api-reference/users/users.md): All Users that have been created (accepted their invites) for this workspace. When permission is provided, only users holding at least one of the listed permissions are returned (server-side filter — permissions are never exposed in the response). - [removeUser](https://developers.askparable.com/api-reference/users/removeuser.md): DELETE /api/users/{userId} Remove a user. - [updateTenantUserRoles](https://developers.askparable.com/api-reference/users/updatetenantuserroles.md): PATCH /api/users/{userId}/roles Update a workspace user's role assignments. - [updateTenantUserStatus](https://developers.askparable.com/api-reference/users/updatetenantuserstatus.md): PATCH /api/users/{userId}/status Update a workspace user's status (suspend, reactivate). - [catalog](https://developers.askparable.com/api-reference/catalog-v2/catalog.md): The workspace's semantic catalog, proxied unchanged from query-layer v2. - [providerAnnotations](https://developers.askparable.com/api-reference/catalog-v2/providerannotations.md) - [connectorInstancesForVendors](https://developers.askparable.com/api-reference/vendors/connectorinstancesforvendors.md): List connector instances grouped by vendor (workspace-scoped). Returns one entry per vendor that has configured connectors. - [parableVendorGroupings](https://developers.askparable.com/api-reference/vendors/parablevendorgroupings.md): Vendor slug (e.g., 'atlassian') Grouping path within vendor (e.g., 'jira/cloud/api-token') List all groupings for a specific vendor. Returns full grouping hierarchy for the vendor. Public endpoint; no authentication required. - [parableVendorGrouping](https://developers.askparable.com/api-reference/vendors/parablevendorgrouping.md): Get a grouping by vendor slug and grouping path. Public endpoint; no authentication required. - [parableVendors](https://developers.askparable.com/api-reference/vendors/parablevendors.md): List vendors with pagination and optional search. Case-insensitive search on name, slug, and description. Default limit: 50, max limit: 250. Default ordering: sort_order, name. - [parableVendorsWithConnectors](https://developers.askparable.com/api-reference/vendors/parablevendorswithconnectors.md): List vendors that have at least one configured connector (workspace-scoped). Returns full vendor data with connector instances. Use for merging connectors into the paginated parableVendors catalog. - [parableVendor](https://developers.askparable.com/api-reference/vendors/parablevendor.md): Get a single vendor by slug. Public endpoint; no authentication required. - [tenantConnectorCredentialDetail](https://developers.askparable.com/api-reference/vendors/tenantconnectorcredentialdetail.md): Get credential error detail for a credential metadata record. Pass the credentialMetadataId from TenantConnectorInstance. Returns null when no validation result exists for this credential. Only meaningful when connectionStatus is CREDENTIAL_ERROR. - [tenantConnectorInstances](https://developers.askparable.com/api-reference/vendors/tenantconnectorinstances.md): List all configured connector instances for current workspace. Returns instances with computed status and sentiment. - [tenantConnectorInstancesForGrouping](https://developers.askparable.com/api-reference/vendors/tenantconnectorinstancesforgrouping.md): List connector instances for a grouping (workspace-scoped). Returns empty when no workspace context or no permission. - [tenantConnectorInstancesForVendor](https://developers.askparable.com/api-reference/vendors/tenantconnectorinstancesforvendor.md): List connector instances for a vendor (workspace-scoped). Returns empty when no workspace context or no permission. - [tenantConnectorInstance](https://developers.askparable.com/api-reference/vendors/tenantconnectorinstance.md): Get a single connector instance by ID. - [tenantConnectorSyncDetail](https://developers.askparable.com/api-reference/vendors/tenantconnectorsyncdetail.md): Get sync error detail for a connector instance. Pass the workspace connector ID. Returns error data from the most recent FAILED or PARTIAL_SUCCESS job, regardless of any newer PENDING or RUNNING jobs that may exist. Returns null when no failed sync job with error data exists. Only meaningful when co… ## OpenAPI Specs - [openapi](https://developers.askparable.com/api-reference/openapi.json)