> ## Documentation Index
> Fetch the complete documentation index at: https://docs.talqui.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Read session

> Reads one session with its contact, operator, last message and
`sessionMeta` — the conversation header in the app-web, and plugins that
re-read a session (chatbot, ISP plugins). Replaces core-api
`GET /tenants/:tenantID/sessions/:sessionID`.

Operators are bounded by their session list scope: inboxes, plus
assigned-only when the tenant enables it. A plugin installed on the tenant
(`Plugin` token) or the tenant's plugin connection reads unrestricted, as
on core-api. A session that does not exist or is outside
that scope answers 200 with `session: null`, not an error.



## OpenAPI

````yaml /api/services-api.yaml get /v1/tenants/{tenantID}/sessions/{sessionID}
openapi: 3.0.3
info:
  description: >-
    Talqui is an omnichannel customer service platform that unifies
    conversations from WhatsApp, Instagram, Telegram, and many other channels
    into a single attendant panel, alongside a broader ecosystem of plugins and
    integrations. This API gives developers programmatic access to Talqui's
    services layer, exposing the operations needed to read and manage tenants,
    conversations, plugins, and related resources that power that platform.


    Authentication is available on behalf of an Operator (the default for this
    API), a Plugin Connection, or a Plugin — see the [Talqui authentication
    guide](https://docs.talqui.chat/guides/introduction/authentication/) for how
    each token is obtained and when to use it.


    Need help or have questions not covered here? Reach out to
    support@talqui.com.
  license:
    name: ISC
    url: https://opensource.org/license/isc-license-txt
  title: Talqui - Services API
  version: 0.78.1
servers:
  - description: Production
    url: https://services-api.talqui.chat
security: []
tags:
  - name: Tenants
  - name: Settings
  - name: Analytics/Reports
  - name: Analytics
  - name: Campaigns
  - name: Campaigns/Models
  - name: Contacts
  - name: Contacts/Imports
  - name: Handoff links
  - name: Inboxes
  - name: Messages
  - name: Notifications
  - name: Sessions
  - name: Operators/Shortcuts
  - name: Operators
  - name: Plugins
  - name: Setup
  - name: Uploads
paths:
  /v1/tenants/{tenantID}/sessions/{sessionID}:
    get:
      tags:
        - Sessions
      summary: Read session
      description: >-
        Reads one session with its contact, operator, last message and

        `sessionMeta` — the conversation header in the app-web, and plugins that

        re-read a session (chatbot, ISP plugins). Replaces core-api

        `GET /tenants/:tenantID/sessions/:sessionID`.


        Operators are bounded by their session list scope: inboxes, plus

        assigned-only when the tenant enables it. A plugin installed on the
        tenant

        (`Plugin` token) or the tenant's plugin connection reads unrestricted,
        as

        on core-api. A session that does not exist or is outside

        that scope answers 200 with `session: null`, not an error.
      operationId: ReadSessionController
      parameters:
        - in: path
          name: tenantID
          required: true
          schema:
            description: The tenant of the conversation.
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            type: string
        - in: path
          name: sessionID
          required: true
          schema:
            description: The session to read.
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    additionalProperties: false
                    properties:
                      session:
                        additionalProperties: {}
                        description: >-
                          `null` when the session does not exist or is outside
                          the scope.
                        nullable: true
                        properties:
                          contact:
                            additionalProperties: {}
                            description: The full contact document, photo resolved.
                            nullable: true
                            properties:
                              contactPhoto:
                                nullable: true
                                type: string
                            type: object
                          contactID:
                            description: The contact of the conversation.
                            type: string
                          inboxID:
                            description: The inbox it was routed to, if any.
                            nullable: true
                            type: string
                          lastMessage:
                            additionalProperties: {}
                            description: >-
                              The last message (direction, key, value with
                              attachment resolved, status).
                            nullable: true
                            properties:
                              messageDirection:
                                type: string
                              messageKey:
                                type: string
                              messageValue: {}
                            required:
                              - messageDirection
                              - messageKey
                              - messageValue
                            type: object
                          operator:
                            additionalProperties: {}
                            description: >-
                              The operator document without credentials, photo
                              resolved.
                            nullable: true
                            properties:
                              operatorPhoto:
                                nullable: true
                                type: string
                            type: object
                          operatorID:
                            description: The operator handling it, if any.
                            nullable: true
                            type: string
                          sessionID:
                            description: The session identifier.
                            type: string
                          sessionMeta:
                            additionalProperties: {}
                            description: >-
                              Free-form session metadata — e.g. what a workflow
                              wrote for the chatbot to read as `{{ meta.* }}`.
                            type: object
                          tenantID:
                            description: The tenant of the conversation.
                            type: string
                        required:
                          - sessionID
                          - contactID
                          - tenantID
                          - operatorID
                          - contact
                          - operator
                          - lastMessage
                        type: object
                    required:
                      - session
                    type: object
                required:
                  - data
                type: object
          description: Response for status 200.
        '400':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      oneOf:
                        - $ref: '#/components/schemas/MissingTenantIDError'
                        - $ref: '#/components/schemas/MissingOperatorIDError'
                        - $ref: '#/components/schemas/RequestValidationError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            MissingTenantIDError (error_code 1001): tenantID absent from the
            URL. | MissingOperatorIDError (error_code 1063): an operator
            identity carries no operatorID. | RequestValidationError (error_code
            1002): params fail schema validation.
        '401':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/UnauthorizedError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: 'UnauthorizedError (error_code 1003): missing/invalid token.'
        '403':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/ForbiddenError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            ForbiddenError (error_code 1004): the caller does not work in this
            tenant, or the plugin is not installed on it.
        '404':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/TenantNotFoundError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            TenantNotFoundError (error_code 1062): tenantID does not resolve to
            a tenant.
        '500':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/UnknownError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            UnknownError (error_code 5999): Unexpected internal error not
            otherwise documented for this endpoint.
components:
  schemas:
    MissingTenantIDError:
      additionalProperties: false
      properties:
        error:
          enum:
            - MissingTenantIDError
          type: string
        error_code:
          enum:
            - 1001
          type: number
        message:
          example: tenantID is required.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    MissingOperatorIDError:
      additionalProperties: false
      properties:
        error:
          enum:
            - MissingOperatorIDError
          type: string
        error_code:
          enum:
            - 1063
          type: number
        message:
          example: operatorID is required.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    RequestValidationError:
      additionalProperties: false
      properties:
        error:
          enum:
            - RequestValidationError
          type: string
        error_code:
          enum:
            - 1002
          type: number
        fields:
          items:
            additionalProperties: false
            properties:
              allowed:
                type: string
              field:
                type: string
              received:
                type: string
            required:
              - field
              - received
              - allowed
            type: object
          type: array
        message:
          example: Invalid request data.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
        - fields
      type: object
    UnauthorizedError:
      additionalProperties: false
      properties:
        error:
          enum:
            - UnauthorizedError
          type: string
        error_code:
          enum:
            - 1003
          type: number
        message:
          example: You are not authorized to perform this request.
          type: string
        statusCode:
          enum:
            - 401
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    ForbiddenError:
      additionalProperties: false
      properties:
        error:
          enum:
            - ForbiddenError
          type: string
        error_code:
          enum:
            - 1004
          type: number
        message:
          example: You do not have access to this resource.
          type: string
        statusCode:
          enum:
            - 403
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    TenantNotFoundError:
      additionalProperties: false
      properties:
        error:
          enum:
            - TenantNotFoundError
          type: string
        error_code:
          enum:
            - 1062
          type: number
        message:
          example: Tenant not found.
          type: string
        statusCode:
          enum:
            - 404
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    UnknownError:
      additionalProperties: false
      properties:
        error:
          enum:
            - UnknownError
          type: string
        error_code:
          enum:
            - 5999
          type: number
        message:
          example: For some unknown reason your request has not succeeded.
          type: string
        statusCode:
          enum:
            - 500
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.