> ## Documentation Index
> Fetch the complete documentation index at: https://support.i.moneyforward.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List sessions

> Returns support sessions for the authenticated tenant. Optional filters by status and assignee type.



## OpenAPI

````yaml https://assist.i.moneyforward.com/api/v1/openapi.json get /api/v1/sessions
openapi: 3.1.0
info:
  title: Minabot Public API
  description: >-
    Read-only REST API for querying sessions and knowledge articles. Requires an
    API key issued from the Admina admin panel.


    ### Rate limits

    Not currently enforced at the HTTP layer. Respect upstream DynamoDB capacity
    when making bulk requests (keep concurrency under ~20 RPS per key).
  version: 1.0.0
  contact:
    name: Minabot
    url: https://github.com/moneyforward-i/minabot
servers:
  - url: https://assist.i.moneyforward.com
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/sessions:
    get:
      tags:
        - Sessions
      summary: List sessions
      description: >-
        Returns support sessions for the authenticated tenant. Optional filters
        by status and assignee type.
      operationId: getApiV1Sessions
      parameters:
        - in: query
          name: status
          schema:
            type: string
            enum:
              - open
              - in_progress
              - pending_approval
              - resolved
          description: Filter by status (pushed to DynamoDB — accurate)
        - in: query
          name: assigneeType
          schema:
            type: string
            enum:
              - unassigned
              - ai_agent
              - human_agent
              - requester
          description: >-
            Filter by assignee. NOTE: this filter is applied in-memory AFTER
            `limit` is enforced at the database layer, so when `assigneeType` is
            set the `count` in the response reflects matches within the first
            `limit` rows only — not the tenant-wide total. For exhaustive
            enumeration, call without `assigneeType` and filter client-side.
        - in: query
          name: limit
          schema:
            default: 50
            type: number
            minimum: 1
            maximum: 100
          description: Max results — 1..100, default 50
      responses:
        '200':
          description: Session list
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    const: true
                  sessions:
                    type: array
                    items:
                      type: object
                      properties:
                        sessionKey:
                          type: string
                          description: 'Composite key: channelId:threadTs'
                        ticketNumber:
                          description: >-
                            Tenant-scoped auto-increment ticket number. Stable,
                            operator-facing.
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        channelId:
                          type: string
                        threadTs:
                          type: string
                        status:
                          type: string
                          enum:
                            - open
                            - in_progress
                            - pending_approval
                            - resolved
                        assigneeType:
                          type: string
                          enum:
                            - unassigned
                            - ai_agent
                            - human_agent
                            - requester
                        title:
                          type: string
                        summary:
                          type: string
                        createdAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        updatedAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        closedAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        closeReason:
                          type: string
                        messageCount:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        requesterId:
                          type: string
                        assignedUserId:
                          type: string
                      required:
                        - sessionKey
                        - channelId
                        - threadTs
                        - status
                        - assigneeType
                        - createdAt
                        - updatedAt
                      description: Support session / ticket (tenantId stripped)
                  count:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                required:
                  - ok
                  - sessions
                  - count
        '400':
          description: Invalid query parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    const: false
                  error:
                    type: string
                    description: Human-readable error message
                required:
                  - ok
                  - error
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    const: false
                  error:
                    type: string
                    description: Human-readable error message
                required:
                  - ok
                  - error
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        API key created via the Admina admin panel (`Settings → API Keys →
        Create`). Format: `mb_live_<40-hex>`.

````