Overview
The Replays API exposes list and get operations for replay metadata under /v1/api/replays, authenticated with an rc_live_ API key. 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.
Send the key as a bearer token with the replays:read scope. Deleting a replay is not available to API keys: it uses ReplayCore request signing (see the Authentication article) or the dashboard's Replays page.
GET /v1/api/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), page_token (opaque cursor from a prior response), q (substring over server name, integration and server id), server (server UUID), game_mode, flagged, starred, started_after and started_before (RFC 3339), duration_min_ms and duration_max_ms, player (username substring) and player_uuid (exact UUID; not together with player). A page_size outside 1-100 returns 400 INVALID_PAGE_SIZE, and supplying both player and player_uuid returns 400 INVALID_PARTICIPANT.
GET https://api.replaycore.com/v1/api/replays?page_size=20
Authorization: Bearer rc_live_your_key_hereResponse 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 r2_ia), retention_until, visibility (public, private, unlisted, or the legacy staff, which behaves as private), archive_status, format_version, starred and participants. Optional fields such as server_name, display_name, session_id, session_duration_ms and has_thumbnail are omitted when empty. session_id appears only on replays recorded as segments of one session.
{
"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": "private",
"format_version": 1
}
],
"next_page_token": "",
"page_size": 20
}GET /v1/api/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} (request signing only)
Deletes a replay by id and returns 204 No Content. This route is not available to rc_live_ API keys: call it with request signing or use the dashboard. 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_PARTICIPANT (400), INVALID_REPLAY_ID (400), UNAUTHENTICATED and INVALID_API_KEY (401), MISSING_TENANT (401, request signing), INSUFFICIENT_SCOPE (403), REPLAY_NOT_FOUND (404), RATE_LIMITED (429), and INTERNAL_ERROR (500).
{
"status": 404,
"code": "REPLAY_NOT_FOUND",
"detail": "replay not found"
}