Skip to content

Propose a match edit

POST
/api/v1/matches/{matchId}/edits

Proposes a change to a finalized match whose edit requests are enabled: new results or loadouts of its participants, another playset (or none), other expansions of its game (or none). An edit by a trusted editor of the recorder is approved at once.

matchId
required
string format: uuid

Public match identifier

Idempotency-Key
required
string

Client-generated UUIDv7, required on every mutating request (POST, PUT, PATCH, DELETE), that makes the request safe to retry. A repeated request with the same key and the same payload returns the stored response (marked with the Idempotent-Replayed: true header) instead of executing again; the same key with a different payload is refused with 422. Keys older than the retention window (30 days) are rejected. A key that is not a UUID is refused with 400.

A proposed change to a finalized match: at least one of the parts. A part that is absent leaves that aspect of the match as it is.

object
>= 1 properties
participantChanges
Array<object>

A proposed change to one participant’s result. A property that is absent is left unchanged; a property that is present replaces the current value, and null clears it. A participant appears at most once per edit (400 DUPLICATE_CHANGE).

object
matchParticipantId
required
string format: uuid
score
Any of:

Score of a participant: points (SCORE), seconds (TIME) or turns (TURNS), with at most two decimals; a value with more decimals is refused with 400.

number
>= -99999999.99 <= 99999999.99
rank
Any of:

Position in the match, 1 for the winner; tied participants share a rank

integer format: int32
>= 1
outcome
Any of:
string
Allowed values: WIN LOSS
loadoutChanges
Array<object>

New loadout attributes of one participant; they replace the current ones. A participant appears at most once per edit (400 DUPLICATE_CHANGE).

object
matchParticipantId
required
string format: uuid
attributes
required
object
key
additional properties
any
playsetChange

Replaces the playset of the match with a playset of the match’s game. Without playsetId, or with null, the edit removes the playset.

object
playsetId
string | null format: uuid
expansionChange

Replaces the expansions of the match with these expansions of the match’s game; an empty list removes them all.

object
expansionIds
required
Array<string>
unique items

Match edit created, or the stored response of an earlier request with the same Idempotency-Key

A proposed change to a finalized match. Only the parts that are present are changed when the edit is approved.

object
id
required
string format: uuid
matchId
required
string format: uuid
proposedBy
required
object
id
required
string format: uuid
displayName
required
string
status
required
string
Allowed values: PENDING APPROVED REJECTED
decidedBy
object
id
required
string format: uuid
displayName
required
string
decidedAt

Date-time (ISO 8601)

string format: date-time
participantChanges
Array<object>

A proposed change to one participant’s result. Only the fields flagged as set are written when the edit is applied; a field that is set but absent is cleared.

object
matchParticipantId
required
string format: uuid
score

Score of a participant: points (SCORE), seconds (TIME) or turns (TURNS), with at most two decimals; a value with more decimals is refused with 400.

number
>= -99999999.99 <= 99999999.99
rank

Position in the match, 1 for the winner; tied participants share a rank

integer format: int32
>= 1
outcome
string
Allowed values: WIN LOSS
scoreSet
required
boolean
rankSet
required
boolean
outcomeSet
required
boolean
loadoutChanges
Array<object>

New loadout attributes of one participant; they replace the current ones. A participant appears at most once per edit (400 DUPLICATE_CHANGE).

object
matchParticipantId
required
string format: uuid
attributes
required
object
key
additional properties
any
playsetChange

The playset the edit gives the match; absent playset means the edit removes it.

object
playset
object
id
required
string format: uuid
displayName
required
string
expansionChange

The expansions the edit gives the match; they replace the current ones, none removes them all.

object
expansions
required
Array<object>
object
id
required
string format: uuid
displayName
required
string
createdAt
required

Date-time (ISO 8601)

string format: date-time
updatedAt

Date-time (ISO 8601)

string format: date-time
Location
string format: uri-reference

URL of the created resource

ETag
string

Current version of the resource; send it as If-Match to change or delete it

Idempotent-Replayed
string
Allowed values: true

Present (true) when the response was replayed from an earlier request with the same Idempotency-Key, instead of being executed again

Request validation failed

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
errors
Array<object>
object
field
required

Field or property that failed validation

string
code
required

Machine-readable validation error code, e.g. REQUIRED, VALUE_TOO_LONG, INVALID_FORMAT, OUT_OF_RANGE. Canonical list is maintained per resource in the documentation.

string
message
required

Human readable validation message

string
rejectedValue

The actual value that failed validation. Omitted if the value is sensitive.

Examples
{
"type": "https://errors.stratastax.dev/validation",
"title": "Bad Request",
"status": 400,
"detail": "Received invalid request data",
"errors": [
{
"field": "displayName",
"code": "REQUIRED",
"message": "missing required field"
}
]
}

Authentication required or token invalid

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
Examples
{
"type": "https://errors.stratastax.dev/authentication",
"title": "Unauthorized",
"status": 401,
"detail": "Authentication required"
}

Insufficient permissions

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
Examples
{
"type": "https://errors.stratastax.dev/authorization",
"title": "Access denied",
"status": 403,
"detail": "Insufficient permissions"
}

Resource not found

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
Examples
{
"type": "https://errors.stratastax.dev/not-found",
"title": "Resource not found",
"status": 404,
"detail": "The requested resource could not be found"
}

The requested mutation is not allowed in the resource’s current state, or it conflicts with existing data (a unique value that is already taken)

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
Examples
{
"type": "https://errors.stratastax.dev/conflict",
"title": "Already exists",
"status": 409,
"detail": "A game with source bgg:199792 already exists."
}

The Idempotency-Key was already used for a request with a different payload

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
errors
Array<object>
object
field
required

Field or property that failed validation

string
code
required

Machine-readable validation error code, e.g. REQUIRED, VALUE_TOO_LONG, INVALID_FORMAT, OUT_OF_RANGE. Canonical list is maintained per resource in the documentation.

string
message
required

Human readable validation message

string
rejectedValue

The actual value that failed validation. Omitted if the value is sensitive.

Examples
{
"type": "https://errors.stratastax.dev/validation",
"title": "Unprocessable Content",
"status": 422,
"detail": "Idempotency key reused for a different request",
"errors": [
{
"field": "Idempotency-Key",
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "0192f100-0000-7000-8000-0000000000a5 was already used for a different request"
}
]
}

Unexpected server error

object
type
required

Canonical error type identifier (URI). The values are the problem types of stratastax-http’s problem-core; stratastax-codegen fails the build of a service when the two disagree.

string
Allowed values: https://errors.stratastax.dev/authentication https://errors.stratastax.dev/authorization https://errors.stratastax.dev/validation https://errors.stratastax.dev/not-found https://errors.stratastax.dev/conflict https://errors.stratastax.dev/precondition-failed https://errors.stratastax.dev/internal
title
required

Short, human-readable summary

string
status
required

HTTP status code

integer format: int32
detail
required

Human-readable explanation

string
instance

URI of the request that caused the error

string format: uri
Examples
{
"type": "https://errors.stratastax.dev/internal",
"title": "Oops! Something went wrong.",
"status": 500,
"detail": "Try again later."
}