Submit match telemetry
Record a completed Grand Archive match. Requires the telemetry:write scope, a currently-gated partner capability.
This endpoint requires an API key with the telemetry:write scope. This is a currently-gated, case-by-case partner capability — email engineering@endlessgalaxy.dev to request it.
Always returns 202 { "status": "accepted" } on a well-formed request. Whether a slot's deck.sleevedLinkId actually bound to a Sleeved account and deck is never revealed in the response — this is deliberate oracle safety. Do not infer binding success or failure from the response.
Submissions are idempotent by matchId (a client-generated UUID v4) — resubmitting the same matchId is a safe no-op, not a duplicate record.
See Private Deck Links for what deck.sleevedLinkId values are and how to obtain them.
Your Sleeved API key. Format: slvd_live_<hex>. Contact Sleeved to obtain a key.
In: header
"1.0""grand-archive"ISO 8601 timestamp of when the match was played.
date-timeClient-generated UUID v4 specifically (the format: uuid hint alone permits other UUID versions; the pattern above is what the API actually enforces). Also the idempotency key — resubmitting the same matchId is a safe no-op, not a duplicate record.
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$uuid1 <= value1 or 2 player slots — both players in a match if both use Sleeved. playerSlot values must be unique within the array.
1 <= items <= 2Response Body
curl -X POST "https://api.sleeved.gg/v1/telemetry/matches" \ -H "Content-Type: application/json" \ -d '{ "schemaVersion": "1.0", "game": "grand-archive", "client": { "name": "clarent", "version": "0.0.1" }, "playedAt": "2026-07-14T00:57:40.000Z", "matchId": "be57b792-740e-4edb-81cd-4a3dcb304ab7", "turns": 6, "players": [ { "playerSlot": "p1", "result": "win", "wentFirst": true, "endState": { "myChampionHp": 12 }, "opponent": { "archetype": "Water Aetherwing", "champion": "..." }, "deck": { "sleevedLinkId": "pd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "snapshot": [ { "editionId": "abcd123456", "zone": "main", "qty": 1 } ] }, "stats": { "ActivateCardCalls": 12, "ActivateCard": { "abcd123456": 2 } } } ] }'{
"status": "accepted"
}{
"error": "Invalid request body",
"code": "VALIDATION_ERROR"
}{
"error": "API key required"
}{
"error": "Insufficient scope"
}{
"error": "Rate limit exceeded"
}{
"error": "Internal server error"
}