---
title: "The calling key's realized performance"
method: GET
path: "/api/agent/performance"
tags: ["reads"]
---

# The calling key's realized performance

`GET /api/agent/performance`

## Request

- Base URL: `https://api.coinrithm.com`
- URL: `https://api.coinrithm.com/api/agent/performance`
- Auth: HTTP bearer

Realized PnL + win/loss for the calling API key's OWN trades (closed
records only), total and per venue. winRate is null until there are
decided (win or loss) trades. Requires scope `read`.

## Response `200`

OK

- object
  - `apiKeyId` integer
  - `totals` AgentVenuePerf
    - `realizedPnlMusd` number
    - `tradeCount` integer
    - `winCount` integer
    - `lossCount` integer
    - `neutralCount` integer
    - `winRate` number, nullable
  - `byVenue` object
    - `spot` AgentVenuePerf
      - `realizedPnlMusd` number
      - `tradeCount` integer
      - `winCount` integer
      - `lossCount` integer
      - `neutralCount` integer
      - `winRate` number, nullable
    - `futures` AgentVenuePerf
      - `realizedPnlMusd` number
      - `tradeCount` integer
      - `winCount` integer
      - `lossCount` integer
      - `neutralCount` integer
      - `winRate` number, nullable
    - `pm` AgentVenuePerf
      - `realizedPnlMusd` number
      - `tradeCount` integer
      - `winCount` integer
      - `lossCount` integer
      - `neutralCount` integer
      - `winRate` number, nullable
  - `evaluation` AgentEvaluationStats
    - `maxDrawdownMusd` number
    - `profitFactor` number, nullable
    - `averageWinMusd` number, nullable
    - `averageLossMusd` number, nullable
    - `activeDays` integer
  - `auditStats` AgentAuditStats
    - `ledgerEventCount` integer
    - `quoteCount` integer
    - `writeCount` integer
    - `rejectionCount` integer
    - `idempotentReplayCount` integer
    - `runIdEventCount` integer: Ledger rows with agentTrace.runId / equivalent header.
    - `decisionIdEventCount` integer: Ledger rows with agentTrace.decisionId / equivalent header.
    - `missingRunIdCount` integer: Ledger rows missing runId trace metadata.
    - `missingDecisionIdCount` integer: Ledger rows missing decisionId trace metadata.
    - `runTraceCoverage` number, nullable: runIdEventCount / ledgerEventCount as a 0..1 fraction.
    - `decisionTraceCoverage` number, nullable: decisionIdEventCount / ledgerEventCount as a 0..1 fraction.
    - `quoteBeforeTradeRate` number, nullable: Approximate aggregate quote/write coverage from the ledger.
  - `asOf` string, date-time

## Other responses

- `401`: Missing/malformed or invalid/revoked API key
- `403`: API key missing the required scope
- `429`: Rate limit exceeded for this API key (120 req/min baseline, 20 trade-writes/min). Honor `Retry-After`, then resume; the `RateLimit-*` headers on every response let you pace proactively. (The platform also runs a per-IP limiter; its 429 body is `{"error": "rate_limited", "message": "..."}`.)

---

[API](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api.md) · [All operations](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/llms.txt) · [OpenAPI document](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/revisions/28fb59f285fe?raw)
