Okareo Chat API

Chat sessions, messages, and tool registry.

Operations 5

GET /v0/chat/tool-registry List Chat Tool Registry #
POST /v0/chat/sessions Create Session #
GET /v0/chat/sessions/{session_id} Get Session #
GET /v0/chat/sessions/{session_id}/messages List Messages #
POST /v0/chat/sessions/{session_id}/messages Post Message #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/okareo:okareo-chat-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.

OpenAPI Specification

okareo-chat-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Okareo Chat API
  version: 0.1.0
  description: Chat sessions, messages, and tool registry.
servers:
- url: https://api.okareo.com
tags:
- name: Chat
  description: Chat sessions, messages, and tool registry.
paths:
  /v0/chat/tool-registry:
    get:
      tags:
      - Chat
      summary: List Chat Tool Registry
      operationId: list_chat_tool_registry_v0_chat_tool_registry_get
      parameters:
      - name: project_id
        in: query
        required: true
        schema:
          type: string
          format: uuid
          title: Project Id
      - name: api-key
        in: header
        required: true
        schema:
          type: string
          title: Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response List Chat Tool Registry V0 Chat Tool Registry Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v0/chat/sessions:
    post:
      tags:
      - Chat
      summary: Create Session
      operationId: create_session_v0_chat_sessions_post
      parameters:
      - name: project_id
        in: query
        required: true
        schema:
          type: string
          format: uuid
          title: Project Id
      - name: api-key
        in: header
        required: true
        schema:
          type: string
          title: Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatSessionCreateRequest'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatSessionResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v0/chat/sessions/{session_id}:
    get:
      tags:
      - Chat
      summary: Get Session
      operationId: get_session_v0_chat_sessions__session_id__get
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Session Id
      - name: project_id
        in: query
        required: true
        schema:
          type: string
          format: uuid
          title: Project Id
      - name: api-key
        in: header
        required: true
        schema:
          type: string
          title: Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatSessionResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v0/chat/sessions/{session_id}/messages:
    get:
      tags:
      - Chat
      summary: List Messages
      operationId: list_messages_v0_chat_sessions__session_id__messages_get
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Session Id
      - name: project_id
        in: query
        required: true
        schema:
          type: string
          format: uuid
          title: Project Id
      - name: api-key
        in: header
        required: true
        schema:
          type: string
          title: Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatSessionMessagesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
      - Chat
      summary: Post Message
      operationId: post_message_v0_chat_sessions__session_id__messages_post
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Session Id
      - name: project_id
        in: query
        required: true
        schema:
          type: string
          format: uuid
          title: Project Id
      - name: api-key
        in: header
        required: true
        schema:
          type: string
          title: Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatMessageCreateRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ChatSessionCreateRequest:
      properties:
        agent:
          $ref: '#/components/schemas/ChatAgent'
        session_type:
          $ref: '#/components/schemas/ChatSessionType'
        context:
          $ref: '#/components/schemas/ChatSessionContext'
        title:
          anyOf:
          - type: string
            maxLength: 255
          - type: 'null'
          title: Title
      type: object
      required:
      - agent
      - session_type
      title: ChatSessionCreateRequest
    ChatSessionResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        organization_id:
          type: string
          format: uuid
          title: Organization Id
        project_id:
          type: string
          format: uuid
          title: Project Id
        dashboard_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Dashboard Id
        agent:
          $ref: '#/components/schemas/ChatAgent'
        session_type:
          $ref: '#/components/schemas/ChatSessionType'
        status:
          $ref: '#/components/schemas/ChatSessionStatus'
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
        current_state:
          anyOf:
          - $ref: '#/components/schemas/PanelConfig-Output'
          - type: 'null'
        last_user_message_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Last User Message At
        last_agent_message_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Last Agent Message At
        time_created:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Time Created
        time_modified:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Time Modified
      type: object
      required:
      - id
      - organization_id
      - project_id
      - agent
      - session_type
      - status
      title: ChatSessionResponse
    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: '#/components/schemas/PanelQuery-Input'
          - type: 'null'
        table_config:
          anyOf:
          - $ref: '#/components/schemas/PanelTableConfig'
          - type: 'null'
        style:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Style
        layout:
          anyOf:
          - $ref: '#/components/schemas/PanelLayout'
          - type: 'null'
      type: object
      title: ChartStateForChat
      description: 'Chat-layer chart shape: PanelConfig''s field set, deliberately

        LENIENT — this is a read snapshot of the client''s in-memory draft, which may be

        mid-edit invalid (blank title, leftover table_config, legacy chart_type). Business

        validation happens at the write boundary, never on the read context. `id` is a

        plain string so provisional ids ("draft-1") survive; `style` passes FE-only

        styling through untouched. Non-UUID ids are stripped only where state is

        persisted, never here.'
    ChatSessionStatus:
      type: string
      enum:
      - active
      - completed
      - cancelled
      - errored
      title: ChatSessionStatus
    ChatMessageResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        session_id:
          type: string
          format: uuid
          title: Session Id
        sequence_number:
          type: integer
          title: Sequence Number
        role:
          $ref: '#/components/schemas/ChatMessageRole'
        content:
          additionalProperties: true
          type: object
          title: Content
        tool_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Tool Name
        tool_call_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Tool Call Id
        status:
          $ref: '#/components/schemas/ChatMessageStatus'
        time_created:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Time Created
      type: object
      required:
      - id
      - session_id
      - sequence_number
      - role
      - content
      - status
      title: ChatMessageResponse
    ChatSessionMessagesResponse:
      properties:
        session_id:
          type: string
          format: uuid
          title: Session Id
        messages:
          items:
            $ref: '#/components/schemas/ChatMessageResponse'
          type: array
          title: Messages
        tool_calls:
          items:
            $ref: '#/components/schemas/ChatToolCallResponse-Output'
          type: array
          title: Tool Calls
      type: object
      required:
      - session_id
      - messages
      - tool_calls
      title: ChatSessionMessagesResponse
    ChatTurnIntent:
      type: string
      enum:
      - insights
      title: ChatTurnIntent
      description: 'Special turn kinds. INSIGHTS is a chart-scoped read-and-report turn: the

        agent follows the dashboard-insights skill and delivers via record_insights;

        the streamer refuses to emit chart_ops for it.'
    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: '#/components/schemas/PanelConfig-Input'
          - type: 'null'
        scope:
          anyOf:
          - $ref: '#/components/schemas/ChatScope'
          - type: 'null'
        chart_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Chart Id
        dashboard_state:
          anyOf:
          - $ref: '#/components/schemas/DashboardStateForChat'
          - type: 'null'
        turn_intent:
          anyOf:
          - $ref: '#/components/schemas/ChatTurnIntent'
          - type: 'null'
        time_range:
          anyOf:
          - $ref: '#/components/schemas/TimeRange'
          - type: 'null'
      type: object
      title: ChatSessionContext
    AnalyticsFilterGroup-Output:
      properties:
        op:
          type: string
          enum:
          - and
          - or
          title: Op
        filters:
          items:
            anyOf:
            - $ref: '#/components/schemas/AnalyticsFilter'
            - $ref: '#/components/schemas/AnalyticsFilterGroup-Output'
          type: array
          minItems: 1
          title: Filters
      type: object
      required:
      - op
      - filters
      title: AnalyticsFilterGroup
    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: '#/components/schemas/PanelQuery-Input'
        table_config:
          anyOf:
          - $ref: '#/components/schemas/PanelTableConfig'
          - type: 'null'
        layout:
          $ref: '#/components/schemas/PanelLayout'
      type: object
      required:
      - title
      - chart_type
      - query
      - layout
      title: PanelConfig
    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: '#/components/schemas/AnalyticsFilter'
            - $ref: '#/components/schemas/AnalyticsFilterGroup-Input'
          type: array
          title: Filters
        segments:
          items:
            type: string
          type: array
          title: Segments
        time_dimensions:
          items:
            $ref: '#/components/schemas/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.


        Does NOT include project_id.  ``time_range`` is injected by the frontend

        from the dashboard context and global time picker. Panels may include

        optional ``time_dimensions`` and ``order`` for Cube-style query shape.'
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    ChatToolCallResponse-Output:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        session_id:
          type: string
          format: uuid
          title: Session Id
        message_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Message Id
        sequence_number:
          type: integer
          title: Sequence Number
        tool_name:
          type: string
          title: Tool Name
        tool_args:
          additionalProperties: true
          type: object
          title: Tool Args
        tool_result:
          anyOf:
          - {}
          - type: 'null'
          title: Tool Result
        request:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Request
        response:
          anyOf:
          - {}
          - type: 'null'
          title: Response
        resulting_state:
          anyOf:
          - $ref: '#/components/schemas/PanelConfig-Output'
          - type: 'null'
        status:
          $ref: '#/components/schemas/ChatToolCallStatus'
        error_message:
          anyOf:
          - type: string
          - type: 'null'
          title: Error Message
        time_created:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Time Created
        time_completed:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Time Completed
      type: object
      required:
      - id
      - session_id
      - sequence_number
      - tool_name
      - tool_args
      - status
      title: ChatToolCallResponse
    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
    ChatSessionType:
      type: string
      enum:
      - dashboard_panel_creation
      title: ChatSessionType
    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
    ChatMessageRole:
      type: string
      enum:
      - user
      - assistant
      - tool
      title: ChatMessageRole
    ChatMessageCreateRequest:
      properties:
        content:
          type: string
          maxLength: 10000
          minLength: 1
          title: Content
        context:
          $ref: '#/components/schemas/ChatSessionContext'
      type: object
      required:
      - content
      title: ChatMessageCreateRequest
    ChatAgent:
      type: string
      enum:
      - dashboard
      title: ChatAgent
    ChatMessageStatus:
      type: string
      enum:
      - started
      - completed
      - errored
      title: ChatMessageStatus
    AnalyticsFilterGroup-Input:
      properties:
        op:
          type: string
          enum:
          - and
          - or
          title: Op
        filters:
          items:
            anyOf:
            - $ref: '#/components/schemas/AnalyticsFilter'
            - $ref: '#/components/schemas/AnalyticsFilterGroup-Input'
          type: array
          minItems: 1
          title: Filters
      type: object
      required:
      - op
      - filters
      title: AnalyticsFilterGroup
    AnalyticsFilter:
      properties:
        member:
          type: string
          title: Member
        operator:
          $ref: '#/components/schemas/ComparisonOperator'
          default: equal
        values:
          items:
            anyOf:
            - type: string
            - type: string
              format: uuid
          type: array
          title: Values
      type: object
      required:
      - member
      title: AnalyticsFilter
    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
    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
    PanelQuery-Output:
      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: '#/components/schemas/AnalyticsFilter'
            - $ref: '#/components/schemas/AnalyticsFilterGroup-Output'
          type: array
          title: Filters
        segments:
          items:
            type: string
          type: array
          title: Segments
        time_dimensions:
          items:
            $ref: '#/components/schemas/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.


        Does NOT include project_id.  ``time_range`` is injected by the frontend

        from the dashboard context and global time picker. Panels may include

        optional ``time_dimensions`` and ``order`` for Cube-style query shape.'
    ChatScope:
      type: string
      enum:
      - dashboard
      - chart
      title: ChatScope
      description: Whether a chat turn operates on the whole dashboard or a single chart.
    TimeRange:
      type: string
      enum:
      - LAST_HOUR
      - LAST_24_HOURS
      - LAST_7_DAYS
      - LAST_14_DAYS
      - LAST_30_DAYS
      - LAST_90_DAYS
      title: TimeRange
    PanelConfig-Output:
      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: '#/components/schemas/PanelQuery-Output'
        table_config:
          anyOf:
          - $ref: '#/components/schemas/PanelTableConfig'
          - type: 'null'
        layout:
          $ref: '#/components/schemas/PanelLayout'
      type: object
      required:
      - title
      - chart_type
      - query
      - layout
      title: PanelConfig
    DashboardStateForChat:
      properties:
        title:
          type: string
          title: Title
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
        charts:
          items:
            $ref: '#/components/schemas/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

        client''s current in-memory draft snapshot; agent ops apply against that snapshot.'
    ChatToolCallStatus:
      type: string
      enum:
      - started
      - completed
      - errored
      title: ChatToolCallStatus
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError