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

# Get Latest Performance

> The most recent snapshot of every scope in one subject, newest first.

One row per scope -- per (bot, controller), or per executor -- in the same normalized
shape `/history` returns, so a dashboard's live tiles and its charts read the same
fields off the same client.

`limit` caps how many scopes come back, it is not a page boundary: there is no cursor
here because this is not a series. Newest-first ordering means the scopes that are
still reporting come first, which matters far more for executors than for controllers
-- every executor that ever ran leaves a terminal row behind, so the executor
population grows without bound while the controller one does not.

This reads the stored series, not live memory. An executor younger than one snapshot
interval has no row yet and does not appear, and a live one's figures are up to one
interval stale -- by design, so that this row and the last row of `/history` are the
same row. Live in-memory figures are what `/executors/` serves.

A closed executor's latest row is its terminal row, carrying `is_terminal: true` and
its `close_type`, so "the final value" needs no separate call. That holds for every
way an executor can close, including the startup reap of one a crash left behind
(`close_type: SYSTEM_CLEANUP`): this row and `GET /executors/{executor_id}` are written
in the same transaction, so the two surfaces cannot disagree about whether an executor
is done.



## OpenAPI

````yaml /api-reference/openapi.json get /performance/latest
openapi: 3.1.0
info:
  title: Hummingbot API
  description: API for managing Hummingbot trading instances
  version: 1.0.1
servers:
  - url: http://localhost:8000
    description: Local development server
security: []
paths:
  /performance/latest:
    get:
      tags:
        - Performance
      summary: Get Latest Performance
      description: >-
        The most recent snapshot of every scope in one subject, newest first.


        One row per scope -- per (bot, controller), or per executor -- in the
        same normalized

        shape `/history` returns, so a dashboard's live tiles and its charts
        read the same

        fields off the same client.


        `limit` caps how many scopes come back, it is not a page boundary: there
        is no cursor

        here because this is not a series. Newest-first ordering means the
        scopes that are

        still reporting come first, which matters far more for executors than
        for controllers

        -- every executor that ever ran leaves a terminal row behind, so the
        executor

        population grows without bound while the controller one does not.


        This reads the stored series, not live memory. An executor younger than
        one snapshot

        interval has no row yet and does not appear, and a live one's figures
        are up to one

        interval stale -- by design, so that this row and the last row of
        `/history` are the

        same row. Live in-memory figures are what `/executors/` serves.


        A closed executor's latest row is its terminal row, carrying
        `is_terminal: true` and

        its `close_type`, so "the final value" needs no separate call. That
        holds for every

        way an executor can close, including the startup reap of one a crash
        left behind

        (`close_type: SYSTEM_CLEANUP`): this row and `GET
        /executors/{executor_id}` are written

        in the same transaction, so the two surfaces cannot disagree about
        whether an executor

        is done.
      operationId: get_latest_performance_performance_latest_get
      parameters:
        - name: subject
          in: query
          required: true
          schema:
            type: string
            pattern: ^(controller|executor)$
            description: 'Which population to read: "controller" or "executor"'
            title: Subject
          description: 'Which population to read: "controller" or "executor"'
        - name: bot_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by bot name (controller subject only)
            title: Bot Name
          description: Filter by bot name (controller subject only)
        - name: controller_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by controller ID (either subject)
            title: Controller Id
          description: Filter by controller ID (either subject)
        - name: executor_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by executor ID (executor subject only)
            title: Executor Id
          description: Filter by executor ID (executor subject only)
        - name: executor_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by executor type (executor subject only)
            title: Executor Type
          description: Filter by executor type (executor subject only)
        - name: account_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by account name (executor subject only)
            title: Account Name
          description: Filter by account name (executor subject only)
        - name: connector_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by connector (executor subject only)
            title: Connector Name
          description: Filter by connector (executor subject only)
        - name: trading_pair
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by trading pair (executor subject only)
            title: Trading Pair
          description: Filter by trading pair (executor subject only)
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 1000
            description: Cap on how many scopes come back, newest first
            default: 100
            title: Limit
          description: Cap on how many scopes come back, newest first
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerformanceLatestResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBasic: []
components:
  schemas:
    PerformanceLatestResponse:
      properties:
        status:
          type: string
          title: Status
          default: success
        data:
          items:
            $ref: '#/components/schemas/PerformanceRow'
          type: array
          title: Data
      type: object
      required:
        - data
      title: PerformanceLatestResponse
      description: >-
        Envelope of GET /performance/latest.


        No pagination block: this is one row per scope, not a series, so there
        is no cursor

        to walk and no interval to sample. `limit` is a cap on how many scopes
        come back,

        newest-first, not a page boundary.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    PerformanceRow:
      properties:
        timestamp:
          type: string
          title: Timestamp
          description: ISO 8601 timestamp of the snapshot
        subject:
          type: string
          title: Subject
          description: 'Which population this row came from: "controller" or "executor"'
        scope_id:
          type: string
          title: Scope Id
          description: controller_id for controllers, executor_id for executors
        status:
          type: string
          title: Status
          description: Status at the moment of the snapshot
        is_terminal:
          type: boolean
          title: Is Terminal
          description: >-
            True only on the final row of a completed executor's series. Always
            false for controllers, which have no terminal row.
          default: false
        realized_pnl_quote:
          type: number
          title: Realized Pnl Quote
          description: >-
            Realized PnL in quote currency. For an executor this is its net PnL
            once the position is really settled, and 0 while it is not. A
            POSITION_HOLD close is not settled: the position carries on in
            position_holds, so a held executor's PnL stays unrealized here even
            though is_terminal is true.
        unrealized_pnl_quote:
          type: number
          title: Unrealized Pnl Quote
          description: >-
            Unrealized PnL in quote currency. For an executor this is its net
            PnL while the position is open, and after a POSITION_HOLD close.
        global_pnl_quote:
          type: number
          title: Global Pnl Quote
          description: Total PnL (realized + unrealized) in quote currency
        global_pnl_pct:
          type: number
          title: Global Pnl Pct
          description: Total PnL as a fraction of the capital deployed
        volume_quote:
          type: number
          title: Volume Quote
          description: >-
            Volume traded in quote currency. Volume GENERATED, not capital
            deployed: an LP position's deposit is excluded.
        cum_fees_quote:
          anyOf:
            - type: number
            - type: 'null'
          title: Cum Fees Quote
          description: >-
            Cumulative fees in quote currency. NULL for controllers: their
            PerformanceReport genuinely has no fees field, and unknown is not
            zero.
        bot_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Bot Name
          description: Docker bot name; controllers only
        controller_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Controller Id
          description: Controller ID, on both subjects
        executor_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Executor Id
          description: Executor ID; executors only
        executor_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Executor Type
          description: Executor type; executors only
        account_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Account Name
          description: Account name; executors only
        connector_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Connector Name
          description: Connector name; executors only
        trading_pair:
          anyOf:
            - type: string
            - type: 'null'
          title: Trading Pair
          description: Trading pair; executors only
        close_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Close Type
          description: Close type; set on an executor's terminal row
        performance:
          additionalProperties: true
          type: object
          title: Performance
          description: >-
            Controllers: the raw stored PerformanceReport. Empty for executors,
            whose metrics are all typed columns above.
        custom_info:
          additionalProperties: true
          type: object
          title: Custom Info
          description: >-
            Controllers: the raw stored custom_info. Empty for executors --
            these payloads carry fill_events and grid levels, which have no
            business in a per-minute row.
      type: object
      required:
        - timestamp
        - subject
        - scope_id
        - status
        - realized_pnl_quote
        - unrealized_pnl_quote
        - global_pnl_quote
        - global_pnl_pct
        - volume_quote
      title: PerformanceRow
      description: A single point of a performance series, for either subject.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBasic:
      type: http
      scheme: basic

````

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