Skip to content

Replays API

List, inspect, and delete replay metadata over the v1 API.

7 min read

Overview

The Replays API exposes list, get, and delete operations for replay metadata under /v1/replays. Every endpoint is scoped to the authenticated tenant: a replay that belongs to another tenant is treated as if it does not exist.

Replay metadata describes a recording (its server, integration, duration, size, retention window, and visibility). The replay file itself is a signed .replaycore archive served separately through the in-browser viewer.

All endpoints are authenticated with ReplayCore request signing (see the Authentication article). For day-to-day replay management, the dashboard's Replays page covers the same operations without writing any code.

GET /v1/replays

Returns a paginated list of replay metadata for your tenant, sorted by start time (newest first). Pagination uses an opaque cursor: pass the next_page_token from one response as the page_token of the next request. The token is empty when there are no further pages.

Query parameters: page_size (1-100, default 20) and page_token (opaque cursor from a prior response). A page_size outside 1-100 returns 400 INVALID_PAGE_SIZE.

List the first page of replays
GET https://api.replaycore.com/v1/replays?page_size=20
Authorization: ReplayCore tenant=<tenant-id>, ts=<unix-ms>, nonce=<nonce>, sig=<hex>, kid=<key-id>

Response shape

Each result is a ReplayMetadata object. Key fields: id (UUID), server_id, integration (e.g. bedwars1058), quality (standard or hd), started_at and ended_at (RFC 3339), duration_ms, size_bytes, storage_tier (hot or cold), retention_until, visibility (staff or public), and format_version.

List response (truncated)
{
  "results": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "server_id": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
      "integration": "bedwars1058",
      "quality": "standard",
      "started_at": "2026-01-15T10:00:00Z",
      "ended_at": "2026-01-15T10:32:17Z",
      "duration_ms": 1937000,
      "size_bytes": 4194304,
      "storage_tier": "hot",
      "retention_until": "2026-04-15T10:00:00Z",
      "visibility": "staff",
      "format_version": 1
    }
  ],
  "next_page_token": "",
  "page_size": 20
}

GET /v1/replays/{id}

Returns a single ReplayMetadata record. The id must be a valid UUID v4 or the request returns 400 INVALID_REPLAY_ID. A replay that does not exist, or belongs to another tenant, returns 404 REPLAY_NOT_FOUND.

DELETE /v1/replays/{id}

Deletes a replay by id and returns 204 No Content. Deletion is idempotent: deleting a replay that is already gone returns 404 REPLAY_NOT_FOUND rather than erroring. Deleting a replay frees the storage it occupied against your plan quota.

Deletion is permanent. The signed archive and its metadata are removed and cannot be recovered.

Errors

All errors use RFC 9457 application/problem+json with a status, a machine-readable code, and a human-readable detail. Common codes: INVALID_PAGE_SIZE (400), INVALID_REPLAY_ID (400), MISSING_TENANT (401), REPLAY_NOT_FOUND (404), and INTERNAL_ERROR (500).

Error response
{
  "status": 404,
  "code": "REPLAY_NOT_FOUND",
  "detail": "replay not found"
}