---
title: "Get a trader's signed track record"
method: GET
path: "/traders/{traderId}/track-record"
tags: ["Records"]
---

# Get a trader's signed track record

`GET /traders/{traderId}/track-record`

## Request

- Base URL: `https://arena-predictions.com/api/v1`
- URL: `https://arena-predictions.com/api/v1/traders/{traderId}/track-record`
- Auth: HTTP bearer

A trader's Ed25519-signed track record over the last 90 days, exactly as Arena signed it for the keyed audience: record is the envelope, never reshaped, so a saved copy verifies on its own. promote-record is called with audience=keyed, so the envelope has the same scores and the same signing key as the public record and names no Kalshi series ticker and no venue. It is served while the venue-data switch is off. The CLI's arena record, hosted MCP verify (get_track_record with verify: true) and the Python SDK's track_record() still read the public envelope, which names series. To check this envelope: take record without its signature field and write the rest in RFC 8785 (JCS) form as UTF-8 bytes; their SHA-256 in hex is record.signature.payload_sha256, and record.signature.sig (base64url) is an Ed25519 signature over those same bytes, not over the hash, by the key record.key_id from keysUrl. A private account answers 200 with private: true and record null, and a public account whose earlier trades are still hidden answers numbersShown: false and record null.

## Path parameters

- `traderId` string, required

## Response `200`

The signed record, or record null while numbersShown is false.

- TrackRecordResponse
  - `traderId` string, uuid, nullable, required: Null for someone else's private account.
  - `displayName` string, nullable, required
  - `private` boolean, required: True: the account is private, and record is null.
  - `numbersShown` boolean, required: Others see the account's numbers, as on Trader. False while private, and while public if any earlier trade is still hidden; record is null whenever this is false.
  - `record` object, nullable, required: The signed envelope exactly as Arena signed it (type arena.track_record, version, issuer, key_id, issued_at, record, signature). Nothing inside it is renamed or reshaped, so a saved copy verifies on its own. record.record carries status (eligible, not_eligible or blocked), window, gates, track_record (scores, P&L in points, which equal paper dollars, and the Kalshi series counted), definitions and a disclosure. Null while numbersShown is false.
    - `type` 'arena.track_record'
    - `version` integer
    - `issuer` string
    - `key_id` string
    - `issued_at` string, date-time
    - `record` object
    - `signature` object
      - `alg` 'Ed25519'
      - `kid` string
      - `sig` string: base64url.
      - `payload_sha256` string
      - `canonicalization` string
  - `keysUrl` string, uri, required: Arena's published signing keys. Verify against these, never a key a record names.
  - `verify` string, required: How to check the signature, step by step.
  - `note` string: Present while record is null: why there is none.
  - `mode` 'paper', required

## Other responses

- `401`: Missing, malformed, unknown, revoked or expired key. Carries a WWW-Authenticate: Bearer challenge.
- `403`: insufficient_scope: the key does not carry records:read.
- `404`: trader_not_found: no trader has that id or display name.
- `429`: rate_limited (over the plan's minute limit) or quota_exceeded (over the month). Only while the limits are enforced; until then requests are counted and the headers set, and nothing is refused. error.retryAfterSeconds equals Retry-After.
- `503`: The key could not be verified, or the records could not be read, right now. Retry after the Retry-After seconds.

---

[API](https://skmtc.dev/arena-predictions/apis/arena-api.md) · [All operations](https://skmtc.dev/arena-predictions/apis/arena-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arena-predictions/apis/arena-api/revisions/9d89d166dae6?raw)
