Okareo · Schema

ChatMessageCreateRequest

CompanyArtificial IntelligenceSynthetic DataVoice AgentsTesting

Properties

Name Type Description
content string
context object
View JSON Schema on GitHub

JSON Schema

okareo-chat-message-create-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/okareo/json-schema/okareo-chat-message-create-request-schema.json",
  "title": "ChatMessageCreateRequest",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/okareo-chat-api-openapi.yml#/components/schemas/ChatMessageCreateRequest",
  "properties": {
    "content": {
      "type": "string",
      "maxLength": 10000,
      "minLength": 1,
      "title": "Content"
    },
    "context": {
      "$ref": "#/$defs/ChatSessionContext"
    }
  },
  "type": "object",
  "required": [
    "content"
  ],
  "$defs": {
    "AnalyticsFilter": {
      "properties": {
        "member": {
          "type": "string",
          "title": "Member"
        },
        "operator": {
          "$ref": "#/$defs/ComparisonOperator",
          "default": "equal"
        },
        "values": {
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "uuid"
              }
            ]
          },
          "type": "array",
          "title": "Values"
        }
      },
      "type": "object",
      "required": [
        "member"
      ],
      "title": "AnalyticsFilter"
    },
    "AnalyticsFilterGroup-Input": {
      "properties": {
        "op": {
          "type": "string",
          "enum": [
            "and",
            "or"
          ],
          "title": "Op"
        },
        "filters": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/AnalyticsFilter"
              },
              {
                "$ref": "#/$defs/AnalyticsFilterGroup-Input"
              }
            ]
          },
          "type": "array",
          "minItems": 1,
          "title": "Filters"
        }
      },
      "type": "object",
      "required": [
        "op",
        "filters"
      ],
      "title": "AnalyticsFilterGroup"
    },
    "ChartStateForChat": {
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Id"
        },
        "title": {
          "type": "string",
          "title": "Title",
          "default": ""
        },
        "chart_type": {
          "type": "string",
          "title": "Chart Type",
          "default": "line"
        },
        "query": {
          "anyOf": [
            {
              "$ref": "#/$defs/PanelQuery-Input"
            },
            {
              "type": "null"
            }
          ]
        },
        "table_config": {
          "anyOf": [
            {
              "$ref": "#/$defs/PanelTableConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "style": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Style"
        },
        "layout": {
          "anyOf": [
            {
              "$ref": "#/$defs/PanelLayout"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object",
      "title": "ChartStateForChat",
      "description": "Chat-layer chart shape: PanelConfig's field set, deliberately\nLENIENT — this is a read snapshot of the client's in-memory draft, which may be\nmid-edit invalid (blank title, leftover table_config, legacy chart_type). Business\nvalidation happens at the write boundary, never on the read context. `id` is a\nplain string so provisional ids (\"draft-1\") survive; `style` passes FE-only\nstyling through untouched. Non-UUID ids are stripped only where state is\npersisted, never here."
    },
    "ChatScope": {
      "type": "string",
      "enum": [
        "dashboard",
        "chart"
      ],
      "title": "ChatScope",
      "description": "Whether a chat turn operates on the whole dashboard or a single chart."
    },
    "ChatSessionContext": {
      "properties": {
        "dashboard_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Dashboard Id"
        },
        "panel_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Panel Id"
        },
        "panel_state": {
          "anyOf": [
            {
              "$ref": "#/$defs/PanelConfig-Input"
            },
            {
              "type": "null"
            }
          ]
        },
        "scope": {
          "anyOf": [
            {
              "$ref": "#/$defs/ChatScope"
            },
            {
              "type": "null"
            }
          ]
        },
        "chart_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Chart Id"
        },
        "dashboard_state": {
          "anyOf": [
            {
              "$ref": "#/$defs/DashboardStateForChat"
            },
            {
              "type": "null"
            }
          ]
        },
        "turn_intent": {
          "anyOf": [
            {
              "$ref": "#/$defs/ChatTurnIntent"
            },
            {
              "type": "null"
            }
          ]
        },
        "time_range": {
          "anyOf": [
            {
              "$ref": "#/$defs/TimeRange"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object",
      "title": "ChatSessionContext"
    },
    "ChatTurnIntent": {
      "type": "string",
      "enum": [
        "insights"
      ],
      "title": "ChatTurnIntent",
      "description": "Special turn kinds. INSIGHTS is a chart-scoped read-and-report turn: the\nagent follows the dashboard-insights skill and delivers via record_insights;\nthe streamer refuses to emit chart_ops for it."
    },
    "ComparisonOperator": {
      "type": "string",
      "enum": [
        "equal",
        "not_equal",
        "contains",
        "not_contains",
        "greater_than",
        "greater_than_or_equal",
        "less_than",
        "less_than_or_equal",
        "is_set",
        "not_set"
      ],
      "title": "ComparisonOperator"
    },
    "DashboardStateForChat": {
      "properties": {
        "title": {
          "type": "string",
          "title": "Title"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Description"
        },
        "charts": {
          "items": {
            "$ref": "#/$defs/ChartStateForChat"
          },
          "type": "array",
          "title": "Charts"
        },
        "notices": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Notices",
          "description": "What the client told the person after the previous turn's chart ops, such as an op it refused and why. The agent must not claim those changes landed."
        }
      },
      "type": "object",
      "required": [
        "title"
      ],
      "title": "DashboardStateForChat",
      "description": "Whole-dashboard read context sent with a chat turn (both scopes). `charts` is the\nclient's current in-memory draft snapshot; agent ops apply against that snapshot."
    },
    "PanelConfig-Input": {
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ],
          "title": "Id"
        },
        "title": {
          "type": "string",
          "maxLength": 255,
          "minLength": 1,
          "title": "Title"
        },
        "chart_type": {
          "type": "string",
          "enum": [
            "line",
            "bar",
            "composed",
            "area",
            "radar",
            "stat",
            "table"
          ],
          "title": "Chart Type"
        },
        "query": {
          "$ref": "#/$defs/PanelQuery-Input"
        },
        "table_config": {
          "anyOf": [
            {
              "$ref": "#/$defs/PanelTableConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "layout": {
          "$ref": "#/$defs/PanelLayout"
        }
      },
      "type": "object",
      "required": [
        "title",
        "chart_type",
        "query",
        "layout"
      ],
      "title": "PanelConfig"
    },
    "PanelLayout": {
      "properties": {
        "x": {
          "type": "integer",
          "minimum": 0.0,
          "title": "X"
        },
        "y": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Y"
        },
        "w": {
          "type": "integer",
          "minimum": 1.0,
          "title": "W"
        },
        "h": {
          "type": "integer",
          "minimum": 1.0,
          "title": "H"
        }
      },
      "type": "object",
      "required": [
        "x",
        "y",
        "w",
        "h"
      ],
      "title": "PanelLayout"
    },
    "PanelQuery-Input": {
      "properties": {
        "cube": {
          "type": "string",
          "title": "Cube",
          "default": "check_trend"
        },
        "measures": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Measures"
        },
        "dimensions": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Dimensions"
        },
        "filters": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/AnalyticsFilter"
              },
              {
                "$ref": "#/$defs/AnalyticsFilterGroup-Input"
              }
            ]
          },
          "type": "array",
          "title": "Filters"
        },
        "segments": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Segments"
        },
        "time_dimensions": {
          "items": {
            "$ref": "#/$defs/TimeDimension"
          },
          "type": "array",
          "title": "Time Dimensions"
        },
        "order": {
          "additionalProperties": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ]
          },
          "type": "object",
          "title": "Order"
        }
      },
      "type": "object",
      "required": [
        "measures"
      ],
      "title": "PanelQuery",
      "description": "Query template stored per panel.\n\nDoes NOT include project_id.  ``time_range`` is injected by the frontend\nfrom the dashboard context and global time picker. Panels may include\noptional ``time_dimensions`` and ``order`` for Cube-style query shape."
    },
    "PanelTableConfig": {
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "flat",
            "pivot"
          ],
          "title": "Mode",
          "default": "flat"
        },
        "row_dimensions": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "title": "Row Dimensions"
        },
        "column_dimension": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Column Dimension"
        },
        "value_measure": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Value Measure"
        }
      },
      "type": "object",
      "title": "PanelTableConfig"
    },
    "TimeDimension": {
      "properties": {
        "dimension": {
          "type": "string",
          "title": "Dimension"
        },
        "date_range": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array",
              "maxItems": 2,
              "minItems": 2
            },
            {
              "type": "null"
            }
          ],
          "title": "Date Range"
        },
        "granularity": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Granularity"
        }
      },
      "type": "object",
      "required": [
        "dimension"
      ],
      "title": "TimeDimension"
    },
    "TimeRange": {
      "type": "string",
      "enum": [
        "LAST_HOUR",
        "LAST_24_HOURS",
        "LAST_7_DAYS",
        "LAST_14_DAYS",
        "LAST_30_DAYS",
        "LAST_90_DAYS"
      ],
      "title": "TimeRange"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/okareo-chat-message-create-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.