curl --request PATCH \
--url https://ndi-api.nace.ai/v1/workspaces/{workspace_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'{
"access": {
"default_label": "<string>",
"labels": [
{
"description": "<string>",
"name": "<string>"
}
]
},
"config_version": 123,
"created_at": "2023-11-07T05:31:56Z",
"currency": {
"default": "USD"
},
"domain_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"domain_slug": "<string>",
"domain_version": 123,
"knowledge_graph": {
"auto_build": true,
"exclude_categories": [
"<string>"
],
"exclude_path_prefixes": [
"<string>"
]
},
"name": "<string>",
"owner_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retention_policy": {
"derived_ttl_days": 2,
"job_ttl_days": 30,
"source_ttl_days": 2
},
"share_count": 1,
"status": "active",
"updated_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"global_context": "",
"ledger_understanding": {
"engine": "measured",
"gl_parsing": true,
"package_confirmation": "required",
"package_scope": {
"path_prefix": "<string>",
"paths": [
"<string>"
],
"selection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"prepared_relationships": [
{
"bucket_count": 123,
"keys": [
{
"left_column": "<string>",
"right_column": "<string>",
"left_normalization": {
"kind": "identity"
},
"right_normalization": {
"kind": "identity"
}
}
],
"left": {
"path": "<string>",
"component": "<string>"
},
"name": "<string>",
"right": {
"path": "<string>",
"component": "<string>"
}
}
],
"trigger": "auto"
},
"purpose": "perception_playground"
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}update_workspace
Change a workspace’s mutable configuration. Cost class: fast.
Presence-aware, and whole-block: an omitted field is left alone, a supplied
one replaces its block entirely. Read the workspace, edit the block, send it
back — partial blocks fall back to the schema defaults, which is how a caller
flipping auto_build would otherwise wipe its own exclusion rules.
Graph builds are explicit by default: a build happens when
POST /v1/workspaces/{id}/knowledge-graph/builds asks for one. Turning
knowledge_graph.auto_build on hands that trigger to ingestion instead, for
a workspace that wants a graph over everything it ingests and accepts the bill
for one per ingestion. Either way a build already in flight is unaffected —
cancel it if that is what you meant.
currency follows the same whole-block rule, so {} is how its policy is
cleared. Setting currency.default changes how the next ingestion reads
amounts marked with a symbol that names several currencies ($, ¥, kr);
amounts already extracted as ambiguous stay that way until their file is
re-ingested, because the catalog records what a past extraction could read.
retention_policy follows the same whole-block rule. A changed
derived_ttl_days recomputes the expiry of files already ingested; see the
field description for how each TTL applies to existing data.
The domain, the label list, and the workspace name are deliberately not mutable here. The first two are part of the versioned config record stamped onto every derived artifact, so editing them in place would re-describe material that was derived under the old one.
curl --request PATCH \
--url https://ndi-api.nace.ai/v1/workspaces/{workspace_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'{
"access": {
"default_label": "<string>",
"labels": [
{
"description": "<string>",
"name": "<string>"
}
]
},
"config_version": 123,
"created_at": "2023-11-07T05:31:56Z",
"currency": {
"default": "USD"
},
"domain_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"domain_slug": "<string>",
"domain_version": 123,
"knowledge_graph": {
"auto_build": true,
"exclude_categories": [
"<string>"
],
"exclude_path_prefixes": [
"<string>"
]
},
"name": "<string>",
"owner_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retention_policy": {
"derived_ttl_days": 2,
"job_ttl_days": 30,
"source_ttl_days": 2
},
"share_count": 1,
"status": "active",
"updated_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"global_context": "",
"ledger_understanding": {
"engine": "measured",
"gl_parsing": true,
"package_confirmation": "required",
"package_scope": {
"path_prefix": "<string>",
"paths": [
"<string>"
],
"selection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"prepared_relationships": [
{
"bucket_count": 123,
"keys": [
{
"left_column": "<string>",
"right_column": "<string>",
"left_normalization": {
"kind": "identity"
},
"right_normalization": {
"kind": "identity"
}
}
],
"left": {
"path": "<string>",
"component": "<string>"
},
"name": "<string>",
"right": {
"path": "<string>",
"component": "<string>"
}
}
],
"trigger": "auto"
},
"purpose": "perception_playground"
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}Authorizations
Path Parameters
Workspace identifier.
Body
Change a workspace's mutable configuration.
Presence-aware: a field omitted from the body is left exactly as it is, so a
caller changing one block cannot clear another by not mentioning it. A field
that is supplied replaces its block whole — the rule set_key_grants
follows for label grants, which is what keeps turning a policy off the same
operation as turning it on, with no add/remove asymmetry to get wrong.
The retention policy, the knowledge-graph, currency and ledger-understanding policies and the global context are mutable. The domain and the label list are not: both are part of the versioned config record that every derived artifact is stamped with, so editing them in place would silently re-describe material that was derived under the old one.
The workspace's complete new currency-reading policy, or omitted to leave it unchanged. Whole-block like knowledge_graph: an empty object resets to the USD default, and {"default": null} is how the policy is cleared to assume nothing. Applies from the next ingestion onwards: amounts already extracted as ambiguous stay that way until their file is re-ingested, since the catalog records what a past extraction could read.
Show child attributes
Show child attributes
The workspace's new global context, or omitted to leave it unchanged; "" clears it. Standing background for every query in this workspace — how its journals are keyed, which entity it covers, what an auditor already knows. A je-testing or search request that omits context runs with this text; a request that sends context replaces it for that run, and "" runs with none. Empty means none. Surrounding whitespace is stripped.
20000The workspace's complete new knowledge-graph policy, or omitted to leave it unchanged. Supplying it replaces every field it holds, so send the block read back from the workspace with your edits applied rather than only the key you are changing.
Show child attributes
Show child attributes
The workspace's complete new ledger-understanding policy, or omitted to leave it unchanged. Whole-block like knowledge_graph. Turning the trigger off stops future ingestions chaining a run; it never refuses an explicit one, and it does not withdraw a report already measured.
Show child attributes
Show child attributes
The workspace's complete new retention policy, or omitted to leave it unchanged. Whole-block like knowledge_graph: a field you leave out reverts to its default, so send the block read back from the workspace with your edits applied. A changed derived_ttl_days is applied to files already ingested (their expiry is recomputed from ingestion time, so a shorter TTL can expire them at the next sweep), and null clears their expiry. source_ttl_days is evaluated at each sweep, so it applies to existing files immediately. job_ttl_days applies to jobs created after the change; payloads of existing jobs keep the expiry they were given.
Show child attributes
Show child attributes
Response
Successful Response
A provisioned workspace, as the API returns it.
Storage is provisioned for the caller and is not part of the wire contract: the root URI is an internal detail until customer-owned roots are exposed.
A workspace's access-control setting, chosen once at creation.
labels = [] is the default and means no filtering at all — no
classification pass at ingestion, no filter clause at retrieval, and
Coverage reports nothing. A workspace that does not need document-level
access control should not pay for a classification that always returns the
same answer.
Coverage reporting is always strict: whenever the gate withholds candidates, the response says so in counts and label names. A silently narrowed answer is the failure mode this platform exists to prevent, so there is no opt-out.
Show child attributes
Show child attributes
How this workspace's documents should be read where they leave a currency open.
Extraction never converts an amount and never invents a currency: one whose
currency the source does not state is recorded as ambiguous with no
value, so it matches no amount filter. New workspaces default to
DEFAULT_WORKSPACE_CURRENCY (USD), so a corpus that writes every total as a
bare $900.00 and names a currency nowhere is filterable out of the box.
Set default to another ISO code to change the reading, or to null to
assume nothing — an amount whose currency the source never states then stays
ambiguous rather than being read as USD.
Show child attributes
Show child attributes
A workspace's knowledge-graph build policy.
The defaults keep the whole corpus in scope and build the graph after every
ingestion, so fact search and deep search have it to navigate by. Set
auto_build=false for a workspace that builds only on request.
exclude_path_prefixes and exclude_categories are the workspace-wide
skip rules a file's graph_inclusion can override — a file matching either
is left out of the graph corpus unless it is explicitly include\ d.
Show child attributes
Show child attributes
The console user who owns the workspace, or null for an organization-owned integration workspace.
A workspace's retention setting, chosen at creation and editable afterwards.
derived_ttl_days anchors on ingested_at and source_ttl_days on
created_at — one anchor each, not configurable.
Show child attributes
Show child attributes
Number of users explicitly granted workspace access; excludes the owner.
x >= 0Lifecycle states visible on the API surface.
deleted is a final internal state; a deleted workspace never appears in
any list or get response — it is as if it never existed.
active, deleting Standing background for every query in this workspace — how its journals are keyed, which entity it covers, what an auditor already knows. A je-testing or search request that omits context runs with this text; a request that sends context replaces it for that run, and "" runs with none. Empty means none. Surrounding whitespace is stripped.
When this workspace understands its general ledger — table and column roles, the journal key and its balance proof, and the integrity battery. A workspace configured before this block existed reads back the default.
Show child attributes
Show child attributes
Set when the platform provisioned this workspace on a person's behalf rather than at a caller's request. Such a workspace cannot be deleted. Null for every workspace created through this API.
perception_playground