openapi: 3.0.0 info: title: ThoughtSpot Public REST 10.1.0.cl 26.8.0.cl API version: '2.0' servers: - url: '{base-url}' variables: base-url: default: https://localhost:443 security: - bearerAuth: [] tags: - name: 26.8.0.cl paths: /api/rest/2.0/ai/memory/export: post: operationId: exportMemory description: "\nExports memory entries (rules, recipes, and always-apply rules) for\nthe specified data-models as a single YAML payload. The payload can\nbe edited locally and re-submitted through `importMemory`.\nRequires Spotter access (use/manage) and either edit or memory\naccess on corresponding data model sources.
Beta Version: 26.8.0.cl or later\n\nThis API allows users to export data-model memories for a given list of data-models. This exported yaml file can then be modified and used as input to the import API in target env.\n\nThis API enables customers to migrate memories from a source env to a target env. This improves memory adoption for Spotter by giving the users a chance to develop their memories in one env and replicate the same in another env.\n\n#### Usage guidelines\n\nTo export memory for one or more data-models, the request may include:\n- `sources`: A list of typed scope groups identifying which data-models to export memory for. Each group contains:\n - `type`: The source object type for this group — `DATA_MODEL`.\n - `identifiers`: An array of GUIDs or human-readable `obj_id`s of the data-models to export memory for. obj_ids are resolved server-side before forwarding.\n\nThe API returns a response object with:\n- `content`: The serialized memory payload (YAML) — exactly the shape that the `importMemory` API consumes. Edit it locally and pass it back through `importMemory` to apply changes.\n\n#### Source Type\n\n- **DATA_MODEL**: The `identifiers` are data-model GUIDs. This is the default source type for Spotter memory and covers the rules, recipes and always-apply rules attached directly to a data-model.\n\n#### File format\n\nThe exported `content` is a YAML document with a single top-level `memories` key holding a list of memory items — exactly the format the `importMemory` API consumes. The full format reference (an annotated example, memory item fields, per-type content, and `datamodel_sources` identification) is documented in the `importMemory` API's **File format** section. Exported files populate each source's `guid` and, if present, `obj_id` as well.\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have necessary permissions, or lacks read access on a referenced data-model, or the bearer token does not correspond to the data-model's org. |\n\n> ###### Note:\n> - To use this API, the user needs Spotter access (use/manage) and either edit or memory access on the data-model and they must use corresponding org related bearerToken where the data-model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 26.8.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n" tags: - 26.8.0.cl requestBody: content: application/json: schema: $ref: '#/components/schemas/ExportMemoryRequest' required: true parameters: [] responses: '200': description: Common successful response content: application/json: schema: $ref: '#/components/schemas/ExportMemoryResponse' examples: example_1: summary: Serialized YAML memory payload returned value: content: "memories:\n- type: RULE\n content:\n rule_definition: \"Earnings: total sales filtered to West region only.\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RULE\n content:\n rule_definition: \"Geographic data is organized in a three-level hierarchy from broadest to most specific: Region (highest level) → State (middle level) → County (lowest level). This hierarchical structure enables progressive drill-down analysis, where each level provides increasingly granular geographic segmentation for sales and quantity metrics.\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RULE\n content:\n rule_definition: \"Hot products: top 5 products by total sales (no region filter applied).\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: Calculate earnings for East region current year\n recipe: \"{\\\"task\\\": \\\"Compute earnings by extracting sales and filtering to East region for the current year\\\", \\\"steps\\\": [{\\\"instruction\\\": \\\"Extract sales, then apply a filter for current year and a filter for East region.\\\", \\\"analytical_mappings\\\": {\\\"tml_tokens\\\": [\\\"[sales] [date] = 'this year' [region] = 'east'\\\"], \\\"formulas\\\": []}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: Total sales for East region current year\n recipe: \"{\\\"task\\\": \\\"Compute total sales filtered to East region for the current year\\\", \\\"steps\\\": [{\\\"instruction\\\": \\\"Calculate total sales where region is East and date is current year.\\\", \\\"analytical_mappings\\\": {\\\"tml_tokens\\\": [\\\"[sales] [date] = 'this year' [region] = 'east'\\\"], \\\"formulas\\\": []}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: What is the total quantity purchased by city and region?\n recipe: \"{\\\"task\\\":\\\"Calculate total quantity purchased grouped by city and region\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Sum the quantity purchased metric and group the results by city and region to show purchasing volumes across different geographic locations\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[quantity purchased] [city] [region]\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: What were total jacket sales in 2024?\n recipe: \"{\\\"task\\\":\\\"Compute the aggregate 2024 jacket sales revenue.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Shows the total sales revenue for jackets in 2024. This provides a high-level metric to understand overall jacket sales performance for the year.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [item type] = [item type].\\\\\\\"jackets\\\\\\\" [date] = \\\\\\\"2024\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: How are monthly sales and quantity tracking by state?\n recipe: \"{\\\"task\\\":\\\"Aggregate monthly sales and quantity by state for a state-level performance view.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Shows monthly sales and quantity purchased metrics organized by state. Provides a state-wise view of sales performance with additional dimensional context.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [state] [date]\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: \"What's the quarterly sales and quantity by region and state for the last 3 years, with yearly rollups?\"\n recipe: \"{\\\"task\\\":\\\"Build a 3-year quarterly view of sales and quantity grouped by region and state, with quarterly and yearly aggregation.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Displays quarterly performance metrics including sales and quantity purchased, broken down by region and state over the last 3 years. Enables analysis of regional and state-level trends with both quarterly and yearly views.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [region] [state] [date].\\\\\\\"quarterly\\\\\\\" [date].\\\\\\\"last 3 years\\\\\\\" [date].\\\\\\\"yearly\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: How are we doing against quarterly sales and quantity targets per region?\n recipe: \"{\\\"task\\\":\\\"Render bullet charts contrasting quarterly actual vs target sales and quantity per region.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Compares actual quarterly sales and quantity metrics against targets by region using bullet charts. Provides a target vs actual performance view to track progress.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [region] [date].\\\\\\\"quarterly\\\\\\\" [Target sales] [Target quantity]\\\"],\\\"formulas\\\":[\\\"{\\\\\\\"name\\\\\\\": \\\\\\\"Target sales\\\\\\\", \\\\\\\"expression\\\\\\\": \\\\\\\"random ( ) * sum ( sales ) * 2\\\\\\\"}\\\",\\\"{\\\\\\\"name\\\\\\\": \\\\\\\"Target quantity\\\\\\\", \\\\\\\"expression\\\\\\\": \\\\\\\"random ( ) * sum ( quantity purchased ) * 2\\\\\\\"}\\\"]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n" example_2: summary: Serialized YAML memory payload returned value: content: "memories:\n- type: RULE\n content:\n rule_definition: \"Earnings: total sales filtered to West region only.\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RULE\n content:\n rule_definition: \"Hot products: top 5 products by total sales (no region filter applied).\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RULE\n content:\n rule_definition: \"Geographic data is organized in a three-level hierarchy from broadest to most specific: Region (highest level) → State (middle level) → County (lowest level). This hierarchical structure enables progressive drill-down analysis, where each level provides increasingly granular geographic segmentation for sales and quantity metrics.\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RULE\n content:\n rule_definition: \"When analyzing quantity purchased, apply a date filter for the last 3 years.\"\n datamodel_sources:\n - guid: 44444444-4444-4444-4444-444444444444\n obj_id: sample-model\n tags: []\n- type: RULE\n content:\n rule_definition: User's total sales target is 1 million USD.\n datamodel_sources:\n - guid: 44444444-4444-4444-4444-444444444444\n obj_id: sample-model\n tags: []\n- type: RULE\n content:\n rule_definition: Sales analyses must filter to east region only.\n datamodel_sources:\n - guid: 44444444-4444-4444-4444-444444444444\n obj_id: sample-model\n tags: []\n- type: RECIPE\n content:\n user_query: Calculate earnings for East region current year\n recipe: \"{\\\"task\\\": \\\"Compute earnings by extracting sales and filtering to East region for the current year\\\", \\\"steps\\\": [{\\\"instruction\\\": \\\"Extract sales, then apply a filter for current year and a filter for East region.\\\", \\\"analytical_mappings\\\": {\\\"tml_tokens\\\": [\\\"[sales] [date] = 'this year' [region] = 'east'\\\"], \\\"formulas\\\": []}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: Total sales for East region current year\n recipe: \"{\\\"task\\\": \\\"Compute total sales filtered to East region for the current year\\\", \\\"steps\\\": [{\\\"instruction\\\": \\\"Calculate total sales where region is East and date is current year.\\\", \\\"analytical_mappings\\\": {\\\"tml_tokens\\\": [\\\"[sales] [date] = 'this year' [region] = 'east'\\\"], \\\"formulas\\\": []}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: What is the total quantity purchased by city and region?\n recipe: \"{\\\"task\\\":\\\"Calculate total quantity purchased grouped by city and region\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Sum the quantity purchased metric and group the results by city and region to show purchasing volumes across different geographic locations\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[quantity purchased] [city] [region]\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: \"What's the quarterly sales and quantity by region and state for the last 3 years, with yearly rollups?\"\n recipe: \"{\\\"task\\\":\\\"Build a 3-year quarterly view of sales and quantity grouped by region and state, with quarterly and yearly aggregation.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Displays quarterly performance metrics including sales and quantity purchased, broken down by region and state over the last 3 years. Enables analysis of regional and state-level trends with both quarterly and yearly views.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [region] [state] [date].\\\\\\\"quarterly\\\\\\\" [date].\\\\\\\"last 3 years\\\\\\\" [date].\\\\\\\"yearly\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: How are we doing against quarterly sales and quantity targets per region?\n recipe: \"{\\\"task\\\":\\\"Render bullet charts contrasting quarterly actual vs target sales and quantity per region.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Compares actual quarterly sales and quantity metrics against targets by region using bullet charts. Provides a target vs actual performance view to track progress.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [region] [date].\\\\\\\"quarterly\\\\\\\" [Target sales] [Target quantity]\\\"],\\\"formulas\\\":[\\\"{\\\\\\\"name\\\\\\\": \\\\\\\"Target sales\\\\\\\", \\\\\\\"expression\\\\\\\": \\\\\\\"random ( ) * sum ( sales ) * 2\\\\\\\"}\\\",\\\"{\\\\\\\"name\\\\\\\": \\\\\\\"Target quantity\\\\\\\", \\\\\\\"expression\\\\\\\": \\\\\\\"random ( ) * sum ( quantity purchased ) * 2\\\\\\\"}\\\"]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: How are monthly sales and quantity tracking by state?\n recipe: \"{\\\"task\\\":\\\"Aggregate monthly sales and quantity by state for a state-level performance view.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Shows monthly sales and quantity purchased metrics organized by state. Provides a state-wise view of sales performance with additional dimensional context.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [state] [date]\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: What were total jacket sales in 2024?\n recipe: \"{\\\"task\\\":\\\"Compute the aggregate 2024 jacket sales revenue.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Shows the total sales revenue for jackets in 2024. This provides a high-level metric to understand overall jacket sales performance for the year.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [item type] = [item type].\\\\\\\"jackets\\\\\\\" [date] = \\\\\\\"2024\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 33333333-3333-3333-3333-333333333333\n obj_id: sales-model\n tags: []\n- type: RECIPE\n content:\n user_query: What were jacket sales by region in 2024?\n recipe: \"{\\\"task\\\":\\\"Break out 2024 jacket sales revenue by region to compare regional performance.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Shows jacket sales revenue broken down by region for 2024. This helps identify which geographic regions are performing best in jacket sales and enables regional performance comparison.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] by [region] [item type] = [item type].\\\\\\\"jackets\\\\\\\" [date] = \\\\\\\"2024\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 44444444-4444-4444-4444-444444444444\n obj_id: sample-model\n tags: []\n- type: RECIPE\n content:\n user_query: \"Show me quarterly sales and quantity trends over the past 3 years, newest first.\"\n recipe: \"{\\\"task\\\":\\\"Plot quarterly sales and quantity trends for the past 3 years in reverse chronological order.\\\",\\\"steps\\\":[{\\\"instruction\\\":\\\"Presents quarterly sales and quantity purchased trends over the last 3 years, sorted by most recent periods first. Enables time-based analysis of sales performance.\\\",\\\"analytical_mappings\\\":{\\\"tml_tokens\\\":[\\\"[sales] [quantity purchased] [date].\\\\\\\"quarterly\\\\\\\" [date].\\\\\\\"last 3 years\\\\\\\"\\\"],\\\"formulas\\\":[]}}]}\"\n datamodel_sources:\n - guid: 44444444-4444-4444-4444-444444444444\n obj_id: sample-model\n tags: []\n" '201': description: Common error response content: application/json: schema: $ref: '#/components/schemas/ExportMemoryResponse' '400': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/rest/2.0/ai/memory/import: post: operationId: importMemory description: "\nImports memory entries (rules, recipes, and always-apply rules) from\na YAML payload, typically a payload produced by `exportMemory` and\nedited locally. The imported entries replace the existing memory for\nthe data-models referenced in the payload.\n`dry_run` is required. Pass `true` first to validate the payload and\nreview the preview counts and any row-level failures without making\nchanges, then re-run with `dry_run = false` to apply the import. An\nimport is not applied if any row fails validation.\nRequires Spotter access (use/manage) and either edit or memory\naccess on corresponding data model sources.
Beta Version: 26.8.0.cl or later\n\nThis API allows users to import data-model memories using a given yaml file. This yaml file can be obtained from the export memory API in source env and can be modified and used as input to the import API in target env.\n\nThis API enables customers to migrate memories from a source env to a target env. This improves memory adoption for Spotter by giving the users a chance to develop their memories in one env and replicate the same in another env.\n\n#### Usage guidelines\n\nTo import memory, the request must include:\n- `content`: The full serialized memory payload to import (YAML). Typically the `content` value returned by the `exportMemory` API, edited locally and re-submitted. The payload itself identifies which data-models the memory applies to, so no separate identifier list is required.\n- `dry_run`: Required. When `true`, validate the payload and return preview counts without writing anything; when `false`, apply the import. Always run with `dry_run = true` first, then re-run with `dry_run = false` once you are satisfied with the preview.\n\nThe import replaces the existing global memories on the data-models referenced in the payload with the entries supplied in the payload.\n\nThe API returns a response object with:\n- `status`: The terminal status of the import (`SUCCESS`, `VALIDATION_FAILED`, or `FAILED`).\n- `summary`: Per `(memory_type, source)` counts. In a dry run the `deleted_record_count`/`inserted_record_count` are previews; in a real import they are actuals. On `VALIDATION_FAILED`, `summary` is `null` when validation fails before any item is processed (e.g. an unresolved or inaccessible data-model source) and an empty list otherwise — treat both as \"no counts available\".\n- `validation_failures`: Per-item validation failures, each with `line_number`, `reason`, `field_name`, and `message` for click-to-locate and inline highlighting.\n- `diagnostics`: Groups of diagnostic messages, each with a `sub_status` (`WARNING`, `FAILURE`, `ROLLED_BACK`, or `UNKNOWN`) and a `messages` list. This is the single channel for both non-fatal warnings (under `WARNING`, e.g. when some older memory entries could not be fully cleaned up) and fatal causes (e.g. the failure reason under `FAILURE`, or a `ROLLED_BACK` group when new entries were undone).\n- `operation_id`: A server-generated identifier for this import operation; include it when contacting support to help correlate server-side logs. Populated once the server registers the import operation; `null` when the request fails earlier (e.g. while parsing the payload or resolving its data-model sources).\n\n#### File format\n\nThe payload is a YAML document with a single top-level `memories` key holding a list of memory items. Each item is self-contained: a `type`, a typed `content` block, a `datamodel_sources` list, and optional `tags`. Typically you don't hand-author this file — you obtain it from `exportMemory`, edit it, and submit it back through `importMemory`.\n\n```yaml\nmemories:\n- type: RULE\n content:\n rule_definition: \"Always filter revenue to closed-won deals.\"\n datamodel_sources:\n - guid: 11111111-1111-1111-1111-111111111111\n obj_id: sales_data_model\n tags:\n - finance\n- type: RULE\n content:\n rule_definition: \"Exclude internal test accounts from all results.\"\n datamodel_sources:\n - obj_id: sales_data_model\n- type: RECIPE\n content:\n user_query: \"top accounts by revenue\"\n recipe: |\n {\"steps\": [...serialized recipe blob...]}\n datamodel_sources:\n - obj_id: sales_data_model\n- type: RECIPE\n content:\n user_query: \"monthly new customer count\"\n recipe: |\n {\"steps\": [...serialized recipe blob...]}\n datamodel_sources:\n - obj_id: sales_data_model\n- type: ALWAYS_APPLY_RULES\n content:\n rules:\n - \"Never show internal test accounts.\"\n - \"Round currency to whole dollars.\"\n datamodel_sources:\n - guid: 22222222-2222-2222-2222-222222222222\n```\n\nA file can contain multiple `RULE` and multiple `RECIPE` items for a data-model, but at most one `ALWAYS_APPLY_RULES` item per data-model.\n\n##### Memory item fields\n\n| Field | Required | Type | Description |\n|-------|----------|------|-------------|\n| `type` | Yes | String enum | One of `RULE`, `RECIPE`, or `ALWAYS_APPLY_RULES`. |\n| `content` | Yes | Mapping | Type-specific content block (see below). |\n| `datamodel_sources` | Yes | Non-empty list | The data-model(s) the memory attaches to. |\n| `tags` | No | List of strings | Free-form labels. |\n\n##### Memory types and content\n\n| `type` | Content fields | Notes |\n|--------|----------------|-------|\n| `RULE` | `rule_definition` — required, non-empty string | A single semantic rule. |\n| `RECIPE` | `recipe` and `user_query` — both required, non-empty strings | `recipe` is an opaque serialized blob; `user_query` is the natural-language query it answers. |\n| `ALWAYS_APPLY_RULES` | `rules` — required, non-empty list of non-empty strings | Data-model-wide always-apply rules. At most one `ALWAYS_APPLY_RULES` item per data-model. |\n\n##### Identifying data-models (`datamodel_sources`)\n\nEach item must list at least one source. Each entry identifies a data-model by at least one of:\n- `guid` — the data-model GUID.\n- `obj_id` — a stable object ID, resolved to a GUID server-side.\n\nIf both are supplied, `obj_id` takes precedence and `guid` is ignored entirely; `guid` takes effect only when `obj_id` is absent. Exported files populate `guid` and, if present, `obj_id` as well.\n\n> ⚠️ **Cross-environment import:** When `obj_id` is present it is\n> authoritative — the accompanying `guid` is **not** used as a fallback.\n> If an `obj_id` does not exist in the target environment, that item\n> fails with `UNRESOLVED_SOURCE`. Remove or correct stale `obj_id`\n> values before importing across environments.\n\n#### Validations reference\n\nThe payload is fully validated before anything is written. This applies to `dry_run = true` and `dry_run = false` alike: if any item fails validation, the entire import is rejected — no partial writes — and all failures are returned together so you can fix them in one pass.\n\n##### Limits\n\nDefault limits (may be adjusted in future if the need arises):\n\n| Limit | Default |\n|-------|---------|\n| Uploaded file size | 10 MiB |\n| Total memory items | 10,000 |\n| `rule_definition` length | 1,000 characters |\n| `user_query` length | 1,000 characters |\n| `recipe` length | 2,000 characters |\n| `rules` combined length (`ALWAYS_APPLY_RULES`) | 2,000 characters |\n| Tags per item | 10 |\n| Characters per tag | 50 |\n\nThe `rules` limit in `ALWAYS_APPLY_RULES` is a combined budget across all entries in the list, not per entry.\n\n##### Structural rules\n\n- The document must be a mapping with a `memories` key whose value is a list.\n- Unknown keys — at the top level, within an item, or under `content` — are rejected.\n- Each item's `type` must be one of the three supported values, and `content` must match that type's shape.\n- Null, empty-string, or wrong-typed values in a required field are treated as missing.\n- Non-string or empty `tags` entries are dropped silently; certain tags reserved for internal use are stripped automatically before the item is stored.\n\n##### Cross-item rules\n\n- A data-model referenced by more than one `ALWAYS_APPLY_RULES` item is rejected — combine them into a single item's `rules` list.\n\n##### Failure reasons\n\nEach entry in `validation_failures` carries one of:\n\n| Reason | Meaning |\n|--------|---------|\n| `SCHEMA` | YAML structure is invalid or unsupported. |\n| `VALIDATION` | A required field is missing/empty, a count exceeds a limit, or a GUID is malformed. |\n| `CHAR_LIMIT` | A content field or tag exceeds its size limit. |\n| `UNRESOLVED_SOURCE` | A `guid` or `obj_id` could not be resolved to an existing data-model. |\n| `ACCESS_DENIED` | The caller lacks sufficient access on the referenced data-model. |\n\n#### Dry run\n\n`dry_run` is required and has no default, so the import is always a deliberate two-step flow:\n\n1. **First, call with `dry_run = true`.** This validates the payload and previews what would happen — the counts in `summary` and any `validation_failures` — without writing anything.\n2. **Then, after reviewing a clean preview, call again with `dry_run = false`** (same `content`). This applies the import. It refuses to write when any item fails validation, so fix the reported `validation_failures` and resubmit.\n\n> ###### Important:\n> Never call `dry_run = false` without first inspecting a `dry_run = true` preview. A real import deletes and replaces existing global memories on the referenced data-models.\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have the necessary Spotter permissions, or the bearer token does not correspond to the data-model's org. Per-data-model access failures do not use this code — they surface as `ACCESS_DENIED` validation failures with HTTP `200` (see Logical failures below). |\n\n#### Logical failures\n\nValidation and write failures are not returned in the error envelope. The call returns `200` with a terminal `status` of `VALIDATION_FAILED` or `FAILED`, and the details live in `validation_failures` / `diagnostics`:\n\n- **VALIDATION_FAILED** — one or more items failed schema/semantic validation; nothing was written. Inspect `validation_failures`, fix the items, and resubmit.\n- **FAILED** — the import did not complete. Inspect `diagnostics`: a `ROLLED_BACK` group means writing the new entries failed and any entries written before the failure were undone (existing memory is intact, no destructive change), while a `FAILURE` group carries another non-validation cause.\n\nSample `VALIDATION_FAILED` responses (HTTP 200):\n\n**Invalid data-model (unresolved source):**\n\n```json\n{\n \"status\": \"VALIDATION_FAILED\",\n \"summary\": null,\n \"validation_failures\": [\n {\n \"line_number\": 2,\n \"reason\": \"UNRESOLVED_SOURCE\",\n \"field_name\": \"datamodel_sources[0].guid\",\n \"message\": \"unknown datamodel guid: 55555555-5555-5555-5555-555555555555\"\n }\n ],\n \"diagnostics\": [\n {\n \"sub_status\": \"FAILURE\",\n \"messages\": [\n \"unknown datamodel guid: 55555555-5555-5555-5555-555555555555\"\n ]\n }\n ],\n \"operation_id\": null\n}\n```\n\n**Inaccessible data-models:**\n\n```json\n{\n \"status\": \"VALIDATION_FAILED\",\n \"summary\": null,\n \"validation_failures\": [\n {\n \"line_number\": 2,\n \"reason\": \"ACCESS_DENIED\",\n \"field_name\": \"datamodel_sources[0]\",\n \"message\": \"Insufficient permissions on datamodel '44444444-4444-4444-4444-444444444444'\"\n },\n {\n \"line_number\": 8,\n \"reason\": \"ACCESS_DENIED\",\n \"field_name\": \"datamodel_sources[0]\",\n \"message\": \"Insufficient permissions on datamodel '33333333-3333-3333-3333-333333333333'\"\n }\n ],\n \"diagnostics\": [\n {\n \"sub_status\": \"FAILURE\",\n \"messages\": [\n \"Memory import validation failed with 2 error(s): Insufficient permissions on datamodel '44444444-4444-4444-4444-444444444444'; Insufficient permissions on datamodel '33333333-3333-3333-3333-333333333333'\"\n ]\n }\n ],\n \"operation_id\": null\n}\n```\n\n**Character-limit validations:**\n\n```json\n{\n \"status\": \"VALIDATION_FAILED\",\n \"summary\": [],\n \"validation_failures\": [\n {\n \"line_number\": 3,\n \"reason\": \"CHAR_LIMIT\",\n \"field_name\": \"content.rule_definition\",\n \"message\": \"content.rule_definition is 1073 characters; max allowed is 1000\"\n },\n {\n \"line_number\": 49,\n \"reason\": \"CHAR_LIMIT\",\n \"field_name\": \"content.user_query\",\n \"message\": \"content.user_query is 1150 characters; max allowed is 1000\"\n },\n {\n \"line_number\": 49,\n \"reason\": \"CHAR_LIMIT\",\n \"field_name\": \"content.recipe\",\n \"message\": \"content.recipe is 3574 characters; max allowed is 2000\"\n }\n ],\n \"diagnostics\": [\n {\n \"sub_status\": \"FAILURE\",\n \"messages\": [\n \"Validation failures present; fix them and re-run to see the DRY_RUN preview.\"\n ]\n }\n ],\n \"operation_id\": \"66666666-6666-6666-6666-666666666666\"\n}\n```\n\n> ###### Note:\n> - To use this API, the user needs Spotter access (use/manage) and either edit or memory access on the data-model and they must use corresponding org related bearerToken where the data-model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 26.8.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n" tags: - 26.8.0.cl requestBody: content: application/json: schema: $ref: '#/components/schemas/ImportMemoryRequest' required: true parameters: [] responses: '200': description: Common successful response content: application/json: schema: $ref: '#/components/schemas/ImportMemoryResponse' examples: example_1: summary: Successful dry-run preview value: status: SUCCESS summary: - memory_type: RULES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 3 deleted_record_count: 3 inserted_record_count: 2 failed_record_count: 0 - memory_type: RECIPES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 7 deleted_record_count: 7 inserted_record_count: 4 failed_record_count: 0 - memory_type: ALWAYS_APPLY_RULES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 0 deleted_record_count: 0 inserted_record_count: 1 failed_record_count: 0 validation_failures: [] diagnostics: [] operation_id: 77777777-7777-7777-7777-777777777777 example_2: summary: Successful import (dry_run=false) value: status: SUCCESS summary: - memory_type: RULES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 3 deleted_record_count: 3 inserted_record_count: 2 failed_record_count: 0 - memory_type: RECIPES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 7 deleted_record_count: 7 inserted_record_count: 4 failed_record_count: 0 - memory_type: ALWAYS_APPLY_RULES source: identifier: 33333333-3333-3333-3333-333333333333 type: DATA_MODEL existing_record_count: 0 deleted_record_count: 0 inserted_record_count: 1 failed_record_count: 0 validation_failures: [] diagnostics: [] operation_id: 88888888-8888-8888-8888-888888888888 '201': description: Common error response content: application/json: schema: $ref: '#/components/schemas/ImportMemoryResponse' '400': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/rest/2.0/input-tables/create: post: operationId: createInputTable description: "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nCreates an input table and links it to a ThoughtSpot model (worksheet). An input table is a user-editable table stored in the model's external Cloud Data Warehouse (CDW) connection. It lets analysts enter or import data directly from the ThoughtSpot UI without requiring access to the underlying warehouse.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required.\n\n#### Usage guidelines\n\nTo create an input table, provide the following in the request body:\n\n* **`table_name`** — Physical name of the table to create in the external warehouse.\n* **`model_identifier`** — GUID or name of the model (worksheet) to link the input table to. The connection, database, and schema used to create the physical table are derived from this model's metadata.\n* **`table_definition`** — Describes the table schema:\n * `referenced_columns` — List of column GUIDs from the linked model to include as read-only reference columns in the input table. These columns anchor the input data to existing model dimensions.\n * `new_columns` — List of new editable columns to create. Each column requires:\n * `name` — Column display name.\n * `data_type` — Warehouse data type (for example, `VARCHAR`, `DOUBLE`, `DATE`).\n * `type` — Semantic role of the column: `ATTRIBUTE` for dimension columns or `MEASURE` for numeric columns.\n\n**Note**: The physical table is created in the same connection, database, and schema as the linked model. Ensure the connection user has `CREATE TABLE` permissions in the target schema.\n\n#### Examples\n\nCreate an input table with one referenced model column and one new editable measure column:\n\n```json\n{\n \"table_name\": \"Sales Region Targets\",\n \"model_identifier\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"table_definition\": {\n \"referenced_columns\": [\"c7d8e9f0-1234-5678-abcd-ef0987654321\"],\n \"new_columns\": [\n {\n \"name\": \"target_revenue\",\n \"data_type\": \"DOUBLE\",\n \"type\": \"MEASURE\"\n }\n ]\n }\n}\n```\n\nCreate an input table with multiple new editable columns and no referenced columns:\n\n```json\n{\n \"table_name\": \"Budget Adjustments\",\n \"model_identifier\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"table_definition\": {\n \"referenced_columns\": [],\n \"new_columns\": [\n {\n \"name\": \"region\",\n \"data_type\": \"VARCHAR\",\n \"type\": \"ATTRIBUTE\"\n },\n {\n \"name\": \"adjustment_amount\",\n \"data_type\": \"DOUBLE\",\n \"type\": \"MEASURE\"\n },\n {\n \"name\": \"effective_date\",\n \"data_type\": \"DATE\",\n \"type\": \"ATTRIBUTE\"\n }\n ]\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n" tags: - 26.8.0.cl requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateInputTableRequest' required: true parameters: [] responses: '200': description: Input table created successfully. content: application/json: schema: $ref: '#/components/schemas/InputTableResponse' examples: example_1: summary: Input table created successfully value: input_table_identifier: f47ac10b-58cc-4372-a567-0e02b2c3d479 '400': description: Bad request — invalid payload, no columns selected, or upload disabled on the connection. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden — caller does not have MODIFY permission on the model. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Model not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Unexpected error. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/rest/2.0/input-tables/{input_table_identifier}/delete: post: operationId: deleteInputTable description: "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nDeletes an input table. This operation unlinks the input table from its owner model, removes it from the connection metadata, and drops the physical table from the Cloud Data Warehouse (CDW). This action is irreversible — all data stored in the input table is permanently deleted.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required.\n\n#### Usage guidelines\n\nSpecify the GUID of the input table to delete as the `input_table_identifier` path parameter. The owner model (worksheet) is derived from the input table's metadata and is used to locate and clean up the associated connection entry.\n\n**Note**: Deleting an input table does not delete the linked model. However, any Answers or Liveboards that reference columns from the deleted input table will lose access to that data and may return errors until the affected visualizations are updated.\n\n#### Example\n\nPass the input table GUID as a path parameter. This endpoint has no request body.\n\n```\nDELETE /api/rest/2.0/input-tables/a1b2c3d4-e5f6-7890-abcd-ef1234567890/delete\n```\n\n\n\n\n#### Endpoint URL\n" tags: - 26.8.0.cl parameters: - in: path name: input_table_identifier required: true schema: type: string description: Unique ID of the input table to delete. responses: '204': description: Successfully deleted the input table and dropped the physical CDW table. '400': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Operation failed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/rest/2.0/input-tables/{input_table_identifier}/update: post: operationId: updateInputTable description: "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nWrites rows of data into an existing input table. The supplied rows replace the current contents of the table: each call serializes the provided values to CSV and loads them into the input table via DataManager, overwriting any previously stored rows.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required. The caller must also have `MODIFY` permission on the input table object.\n\n#### Usage guidelines\n\nSpecify the input table GUID as the `input_table_identifier` path parameter and provide the row data in the request body:\n\n* **`columns`** — Ordered list of column names to write. Column names must exactly match the names defined when the input table was created. Only the listed columns are written; unlisted columns retain their existing values.\n* **`rows`** — List of rows to load. Each row is an array of string values in the same order as `columns`. All cell values must be passed as strings regardless of the column's underlying data type.\n\n**Note**: Each call fully replaces the previously loaded rows. To clear the table, send an empty `rows` array. Partial updates to individual rows are not supported; re-submit all rows on every write.\n\n#### Examples\n\nWrite two rows to an input table. Pass the input table GUID as the\n`input_table_identifier` path parameter:\n\n```\nPOST /api/rest/2.0/input-tables/{input_table_identifier}/update\n```\n\n```json\n{\n \"columns\": [\"region\", \"target_revenue\", \"effective_date\"],\n \"rows\": [\n [\"West\", \"1500000\", \"2025-01-01\"],\n [\"East\", \"2000000\", \"2025-01-01\"]\n ]\n}\n```\n\nThe response returns the number of rows written:\n\n```json\n{ \"rows_loaded\": 2 }\n```\n\nClear all rows from an input table:\n\n```json\n{\n \"columns\": [\"region\", \"target_revenue\"],\n \"rows\": []\n}\n```\n\n\n\n\n#### Endpoint URL\n" tags: - 26.8.0.cl requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInputTableRequest' required: true parameters: - in: path name: input_table_identifier required: true schema: type: string description: Unique ID of the input table to update. responses: '200': description: Rows loaded successfully. content: application/json: schema: $ref: '#/components/schemas/InputTableUpdateResponse' examples: example_1: summary: Rows loaded successfully value: rows_loaded: 3 '400': description: Malformed request or unknown column name. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized access. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden — caller does not have MODIFY permission on the input table. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Input table not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Unexpected error. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' components: schemas: ExportMemoryRequest: type: object properties: sources: description: 'List of typed scope groups selecting which data-models to export memory for. Supply `DATA_MODEL` group to scope the export to specific data-models.' type: array items: $ref: '#/components/schemas/MemorySources' required: - sources ImportDiagnostic: type: object properties: sub_status: type: string enum: - UNKNOWN - FAILURE - WARNING - ROLLED_BACK description: 'Severity / disposition category these messages share (e.g. `WARNING`, `FAILURE`, `ROLLED_BACK`).' nullable: true messages: type: array items: type: string description: 'Human-readable messages for this category (e.g. the details of a `WARNING`, or the failure cause for a `FAILURE`).' nullable: true description: 'A group of importMemory diagnostic messages that share a severity / disposition. This is the single, uniform channel for fatal errors, rollbacks, and non-fatal observations.' CreateInputTableRequest: type: object properties: table_name: description: Physical table name to create in the external warehouse. type: string model_identifier: description: 'Unique ID or name of the model (worksheet) to link the input table to.' type: string table_definition: description: 'Definition of the input table, including new columns and referenced model columns.' allOf: - $ref: '#/components/schemas/InputTableDefinitionInput' required: - table_name - model_identifier - table_definition InputColumnSchemaInput: type: object required: - name - data_type - type properties: name: type: string description: Name of the column. data_type: type: string description: 'Physical data type of the column as recognized by the connected warehouse (for example, VARCHAR, INT64, DOUBLE, BOOL, DATE). The accepted values depend on the underlying Cloud Data Warehouse.' type: type: string enum: - ATTRIBUTE - MEASURE description: 'Semantic role of the column in ThoughtSpot. Use ATTRIBUTE for dimensional data such as text, dates, and identifiers, and MEASURE for numeric or aggregatable values.' allowed_values: type: array items: type: string description: 'Optional list of permitted values for the column. When provided, data written to this column is restricted to these values. Omit or leave empty to allow any value supported by the data type.
Version: 26.9.0.cl or later' nullable: true description: Schema definition for a single input column. InputTableResponse: type: object properties: input_table_identifier: type: string description: Unique ID of the newly created input table. nullable: true ImportMemoryRequest: type: object properties: content: description: 'The full serialized memory payload to import (YAML) — typically a previous `exportMemory` response''s `content`, edited locally and re-submitted.' type: string dry_run: description: 'Required. When `true`, validate the payload and return preview counts and row failures without writing anything. Pass `false` to apply the import. The caller must choose explicitly so a real import is never triggered by omission.' type: boolean required: - content - dry_run ExportMemoryResponse: type: object properties: content: type: string description: 'Serialized memory payload (YAML). This is the shape importMemory consumes.' nullable: true description: 'Response from exportMemory. Contains the serialized payload ready for local editing and re-submission to importMemory.' ImportTargetSource: type: object properties: identifier: type: string description: Identifier (GUID) of the target object these counts apply to. nullable: true type: type: string enum: - DATA_MODEL description: Source object kind (`DATA_MODEL`). nullable: true description: 'Identifies the target object a group of import counts applies to. `type` is the source kind (`DATA_MODEL`) and `identifier` is the object''s GUID.' ImportFailure: type: object properties: line_number: type: integer format: int32 description: 'Best-effort line number of the offending item in the uploaded YAML. May be null when the line cannot be determined.' nullable: true reason: type: string enum: - UNKNOWN_FAILURE_REASON - VALIDATION - UNRESOLVED_SOURCE - ACCESS_DENIED - CHAR_LIMIT - SCHEMA description: 'Machine-readable category for the failure (e.g. `VALIDATION`, `ACCESS_DENIED`, `CHAR_LIMIT`).' nullable: true field_name: type: string description: 'Dotted path to the offending field within the item (e.g. `content.rule_definition`) for inline highlighting. Absent when the failure is item-level rather than field-level.' nullable: true message: type: string description: Human-readable description of the failure. nullable: true description: 'One per-item import failure surfaced by importMemory. `line_number` is the best-effort line number in the uploaded YAML; `field_name` is a dotted path within the item (e.g. `content.rule_definition`) for inline highlighting; absent when the failure is item-level rather than field-level.' InputTableUpdateResponse: type: object properties: rows_loaded: type: integer format: int32 description: Number of rows successfully written to the input table. nullable: true description: Response returned after successfully writing rows to an input table. UpdateInputTableRequest: type: object properties: columns: description: 'Names of the columns being written, in the same order as the values in each row.' type: array items: type: string rows: description: 'Rows to write into the input table. Each row is an array of string values aligned positionally with columns.' type: array items: type: array items: type: string required: - columns - rows ErrorResponse: type: object properties: error: type: object nullable: true ImportSummary: type: object properties: memory_type: type: string enum: - RULES - RECIPES - ALWAYS_APPLY_RULES description: 'The kind of memory (`RULES`, `RECIPES`, or `ALWAYS_APPLY_RULES`) these counts apply to.' nullable: true source: $ref: '#/components/schemas/ImportTargetSource' description: The target object these counts apply to. nullable: true existing_record_count: type: integer format: int32 description: 'Number of memory entries of this type that already existed on the target object before the import.' nullable: true deleted_record_count: type: integer format: int32 description: 'Number of existing entries that will be (DRY_RUN) or were (EXECUTE_IMPORT) deleted as part of the replacement.' nullable: true inserted_record_count: type: integer format: int32 description: 'Number of entries from the payload that will be (DRY_RUN) or were (EXECUTE_IMPORT) inserted.' nullable: true failed_record_count: type: integer format: int32 description: Number of records of this type that failed validation or processing. nullable: true description: 'Per (memory type, target source) summary of what importMemory did — or would do, in DRY_RUN. `deleted_record_count` and `inserted_record_count` are previews in DRY_RUN and actuals in EXECUTE_IMPORT.' ImportMemoryResponse: type: object required: - status properties: status: type: string enum: - SUCCESS - VALIDATION_FAILED - FAILED description: Terminal status of the import. summary: type: array items: $ref: '#/components/schemas/ImportSummary' description: 'Per (memory type, target source) result entries. Null when the import failed before any record processing occurred.' nullable: true validation_failures: type: array items: $ref: '#/components/schemas/ImportFailure' description: 'Per-item validation failure entries. Null when the import failed before item validation could run.' nullable: true diagnostics: type: array items: $ref: '#/components/schemas/ImportDiagnostic' description: 'Diagnostic message groups (errors, rollbacks, and non-fatal warnings), each keyed by a `sub_status`. Null when the import produced no diagnostics.' nullable: true operation_id: type: string description: 'Server-generated identifier for this import operation. Include it in support tickets to help correlate server-side logs.' nullable: true description: 'Response from importMemory. On `SUCCESS`, `summary` is fully populated. `diagnostics` carries any fatal errors, rollbacks, and non-fatal warnings produced during the import.' MemorySources: type: object required: - type - identifiers properties: type: type: string enum: - DATA_MODEL description: Source object type for this group. Must be `DATA_MODEL`. identifiers: type: array items: type: string description: 'Data-models to export memory for. Each entry may be a GUID or a human-readable obj_id; obj_ids are resolved server-side.' description: 'A single typed scope group identifying objects whose memory entries should be exported. One group binds a single `type` to a set of `identifiers`; pass one or more data-model identifiers in a group to scope the memory export to multiple data-models in one call.' InputTableDefinitionInput: type: object required: - new_columns - referenced_columns properties: new_columns: type: array items: $ref: '#/components/schemas/InputColumnSchemaInput' description: New input-only columns to create in the table. referenced_columns: type: array items: type: string description: 'Column IDs from the linked model to include in the table. Pass an empty array to create an input table with no reference columns from the model.' description: Definition of the input table schema. securitySchemes: bearerAuth: type: http scheme: bearer x-roles: - name: 26.2.0.cl id: 26.2.0.cl tags: - 26.2.0.cl description: Roles for version 26.2.0.cl - name: 10.4.0.cl id: 10.4.0.cl tags: - 10.4.0.cl description: Roles for version 10.4.0.cl - name: 26.7.0.cl id: 26.7.0.cl tags: - 26.7.0.cl description: Roles for version 26.7.0.cl - name: 26.8.0.cl id: 26.8.0.cl tags: - 26.8.0.cl description: Roles for version 26.8.0.cl - name: 26.6.0.cl id: 26.6.0.cl tags: - 26.6.0.cl description: Roles for version 26.6.0.cl - name: 10.15.0.cl id: 10.15.0.cl tags: - 10.15.0.cl description: Roles for version 10.15.0.cl - name: 10.13.0.cl id: 10.13.0.cl tags: - 10.13.0.cl description: Roles for version 10.13.0.cl - name: 26.9.0.cl id: 26.9.0.cl tags: - 26.9.0.cl description: Roles for version 26.9.0.cl - name: 10.7.0.cl id: 10.7.0.cl tags: - 10.7.0.cl description: Roles for version 10.7.0.cl - name: 26.5.0.cl id: 26.5.0.cl tags: - 26.5.0.cl description: Roles for version 26.5.0.cl - name: 9.0.0.cl id: 9.0.0.cl tags: - 9.0.0.cl description: Roles for version 9.0.0.cl - name: 9.4.0.cl id: 9.4.0.cl tags: - 9.4.0.cl description: Roles for version 9.4.0.cl - name: 9.12.0.cl id: 9.12.0.cl tags: - 9.12.0.cl description: Roles for version 9.12.0.cl - name: 26.4.0.cl id: 26.4.0.cl tags: - 26.4.0.cl description: Roles for version 26.4.0.cl - name: 10.12.0.cl id: 10.12.0.cl tags: - 10.12.0.cl description: Roles for version 10.12.0.cl - name: 9.2.0.cl id: 9.2.0.cl tags: - 9.2.0.cl description: Roles for version 9.2.0.cl - name: 9.9.0.cl id: 9.9.0.cl tags: - 9.9.0.cl description: Roles for version 9.9.0.cl - name: 9.6.0.cl id: 9.6.0.cl tags: - 9.6.0.cl description: Roles for version 9.6.0.cl - name: 10.10.0.cl id: 10.10.0.cl tags: - 10.10.0.cl description: Roles for version 10.10.0.cl - name: 10.6.0.cl id: 10.6.0.cl tags: - 10.6.0.cl description: Roles for version 10.6.0.cl - name: 10.3.0.cl id: 10.3.0.cl tags: - 10.3.0.cl description: Roles for version 10.3.0.cl - name: 10.1.0.cl id: 10.1.0.cl tags: - 10.1.0.cl description: Roles for version 10.1.0.cl - name: 10.9.0.cl id: 10.9.0.cl tags: - 10.9.0.cl description: Roles for version 10.9.0.cl - name: 10.8.0.cl id: 10.8.0.cl tags: - 10.8.0.cl description: Roles for version 10.8.0.cl - name: 9.5.0.cl id: 9.5.0.cl tags: - 9.5.0.cl description: Roles for version 9.5.0.cl - name: 26.3.0.cl id: 26.3.0.cl tags: - 26.3.0.cl description: Roles for version 26.3.0.cl - name: 10.14.0.cl id: 10.14.0.cl tags: - 10.14.0.cl description: Roles for version 10.14.0.cl - name: 9.7.0.cl id: 9.7.0.cl tags: - 9.7.0.cl description: Roles for version 9.7.0.cl