This page documents the canonical HTTP contract. Switch to the CLI example when you want the operator workflow.
The request model accepts userId and organizationId for compatibility, but the route derives ownership from the authenticated principal and ignores those supplied identifiers. The nested tableContract is validated inside the command model; route code does not translate command-model validation errors to a documented client status. The response illustration is abridged; TableOut can also include timestamps, lifecycle/deletion fields, schema classification, and the server-derived table contract.
Body parameters
namerequiredstring
Non-blank table display name; trimmed by the backend.
metadata· optionalobject
Optional JSON object stored as metadata; defaults to an empty object.
tableContract· optionalOptional contract. Required fields: record_semantics, row_behavior, creation_origin, artifact_role, classification; entity_scope can be inferred from anchors. See definition.
userId· optionalstring
Accepted for compatibility but ignored; owner comes from authentication.
organizationId· optionalstring
Accepted for compatibility but ignored; organization comes from authentication.
| Name | Type | Description |
|---|---|---|
| namerequired | string | Non-blank table display name; trimmed by the backend. |
| metadata | object | Optional JSON object stored as metadata; defaults to an empty object. |
| tableContract | ResearchTableContractV1 | Optional contract. Required fields: record_semantics, row_behavior, creation_origin, artifact_role, classification; entity_scope can be inferred from anchors. See definition. |
| userId | string | Accepted for compatibility but ignored; owner comes from authentication. |
| organizationId | string | Accepted for compatibility but ignored; organization comes from authentication. |
Definitions
ResearchTableContractV1
Extra fields are rejected. version defaults to 1; arrays default empty. Required fields are shown below.
Fields
version· optionalinteger
Literal 1; defaults to 1.
record_semanticsrequiredstring
One of entity, event, relationship, generic.
entity_scope· optionalstring
One of person, company, person_company, none, mixed, unknown; inferred from anchors when omitted, otherwise defaults to unknown.
anchors· optionalarray<string>
Items: company or person; default [].
record_kinds· optionalarray<string>
String array; default [].
canonical_signals· optionalarray<CanonicalSignalRef>
Each item requires signal_type (nonblank); optional signal_subtype; default [].
evidence_kinds· optionalarray<string>
String array; default [].
row_behaviorrequiredstring
One of mutable_set, append_log, snapshot.
creation_originrequiredstring
One of blank, csv_import, crm_import, api, integration, scheduled_agent, derived, unknown.
artifact_rolerequiredstring
One of standalone, source, result, routed_output.
classificationrequiredSee nested definition.
| Name | Type | Description |
|---|---|---|
| version | integer | Literal 1; defaults to 1. |
| record_semanticsrequired | string | One of entity, event, relationship, generic. |
| entity_scope | string | One of person, company, person_company, none, mixed, unknown; inferred from anchors when omitted, otherwise defaults to unknown. |
| anchors | array<string> | Items: company or person; default []. |
| record_kinds | array<string> | String array; default []. |
| canonical_signals | array<CanonicalSignalRef> | Each item requires signal_type (nonblank); optional signal_subtype; default []. |
| evidence_kinds | array<string> | String array; default []. |
| row_behaviorrequired | string | One of mutable_set, append_log, snapshot. |
| creation_originrequired | string | One of blank, csv_import, crm_import, api, integration, scheduled_agent, derived, unknown. |
| artifact_rolerequired | string | One of standalone, source, result, routed_output. |
| classificationrequired | TableContractClassification | See nested definition. |
TableContractClassification
Extra fields are rejected.
Fields
sourcerequiredstring
One of creator, runtime, migration, user.
version· optionalinteger
Literal 1; defaults to 1.
confidencerequirednumber
Inclusive range 0.0–1.0.
evidence· optionalarray<string>
Defaults to []; labels normalized/deduplicated.
conflicts· optionalarray<string>
Defaults to []; labels normalized/deduplicated.
| Name | Type | Description |
|---|---|---|
| sourcerequired | string | One of creator, runtime, migration, user. |
| version | integer | Literal 1; defaults to 1. |
| confidencerequired | number | Inclusive range 0.0–1.0. |
| evidence | array<string> | Defaults to []; labels normalized/deduplicated. |
| conflicts | array<string> | Defaults to []; labels normalized/deduplicated. |
CanonicalSignalRef
Extra fields are rejected.
Fields
signal_typerequiredstring
Must normalize to a known sales signal type.
signal_subtype· optionalstring
Optional normalized subtype; blank becomes null.
| Name | Type | Description |
|---|---|---|
| signal_typerequired | string | Must normalize to a known sales signal type. |
| signal_subtype | string | Optional normalized subtype; blank becomes null. |
Errors
| Status | Meaning |
|---|---|
| 401 | Invalid API key or missing auth. |
| 403 | API key lacks required scope: tables:write. |
