Void match prediction
Cancel a published match prediction and refund every trader's entry cost, without paying any rewards.
- Method
- POST
- Path
https://api.returning.ai / v1/ match-predictions/ {matchPredictionId}/ void - Permission
- matchPredictions
- Retries
- Idempotency-Key required; same key and body replays
When to use this
- The fixture was cancelled, abandoned or declared invalid.
- A published match was set up wrongly and shouldn't pay out.
- An earlier void failed and you need to run it again.
Authentication#
- Header
Authorization: Bearer <API_KEY>- Permission
- matchPredictionsShown in the dashboard as “Match Prediction”
Use a Community API key with matchPredictions, shown in the dashboard as Match Prediction, and keep it on your server. The key decides the community: you only see and change match predictions in that community, and an ID from another community returns 404, the same as an unknown ID. Personal API keys are rejected with 403.
Behaviour#
api.returning.ai doesn't serve this route yet: requests return an empty 404. Ask Returning.AI before you build on it.
A void runs in the background: a 202 means it has started. Traders can't submit predictions once it starts, and the match shows void_in_progress. Poll Get settlement results until it returns 200 MATCH_PREDICTION_VOID_COMPLETED.
You can void a published match at any time, before or after kickoff, unless it is already settled or voided or another settlement or void is running. A match whose void failed can be voided again.
Every trader who paid an entry cost gets those coins back, and nobody gets rewards. The match becomes voided once every prediction has been handled.
Request#
Path parameters#
Rulemp_ and 24 hex characters
Eg"mp_66f000000000000000000801"
Headers#
matchPredictions.RuleBearer <API_KEY>
Rule1-255 characters
Eg"3f9c2a7e-1b4d-4e8a-9c61-2d5f7a8b9e10"
415.Ruleapplication/json
meta.requestId. Without it, a req_... ID is generated.Body#
Rulefixture_cancelled, fixture_abandoned, fixture_invalid or operator_error
Eg"fixture_cancelled"
curl --request POST \
--url https://api.returning.ai/v1/match-predictions/mp_66f000000000000000000801/void \
--header 'Authorization: Bearer <API_KEY>' \
--header 'Idempotency-Key: 3f9c2a7e-1b4d-4e8a-9c61-2d5f7a8b9e10' \
--header 'Content-Type: application/json' \
--data '{
"reason": "fixture_cancelled"
}'
Response#
A 202 returns the void's operationId and the resultsUrl to poll.
Rulesuccess
RuleMATCH_PREDICTION_VOID_ACCEPTED
X-Request-Id if you sent one, otherwise a generated req_... ID. Quote it when you contact support.Rulempv_ and 32 hex characters
void.void_in_progress when it starts. A replay shows the status the void had then.{
"meta": {
"status": "success",
"statusCode": 202,
"code": "MATCH_PREDICTION_VOID_ACCEPTED",
"requestId": "req_66f00000000000000000000000000811"
},
"message": "Match prediction void accepted.",
"data": {
"operationId": "mpv_66f00000000000000000000000000804",
"type": "void",
"status": "void_in_progress",
"submittedAt": "2026-10-10T17:00:00.000Z",
"resultsUrl": "/v1/match-predictions/mp_66f000000000000000000801/results"
}
}
Errors#
Every error carries its code in meta.code and the request's ID in meta.requestId. Validation errors list each problem in details, with a field, code and message. The API key checks (401, 403, 404 COMMUNITY_NOT_FOUND and 500 AUTHENTICATION_FAILED) return detail and solution instead. A 404 with an empty body means the route isn't available on api.returning.ai yet. A 400 or 409 changes nothing.
Fix the request10
MATCH_PREDICTION_VALIDATION_FAILEDFix the requestreason is missing or not one of the four values, or the body has another field. details names it. Nothing changed.READ_ONLY_FIELDFix the requeststatus or settlement. details names it. Remove it.INVALID_JSONFix the requestIDEMPOTENCY_KEY_REQUIREDFix the requestIdempotency-Key header with a unique value.IDEMPOTENCY_KEY_INVALIDFix the requestIdempotency-Key is longer than 255 characters. Use a shorter key, such as a UUID.UNSUPPORTED_MEDIA_TYPEFix the requestContent-Type: application/json.AUTHENTICATION_REQUIREDFix the requestAuthorization: Bearer <API_KEY> with a current Community API key.API_KEY_PERMISSION_DENIEDFix the requestmatchPredictions, or it is a personal key. Use a Community API key and add Match Prediction in Settings > Integration > API Keys.IDEMPOTENCY_KEY_CONFLICTFix the requestIdempotency-Key was already used with a different body. Use a new key for a new body.Fix the data06
MATCH_PREDICTION_NOT_FOUNDFix the datamp_... ID from Create match prediction or List match predictions.COMMUNITY_NOT_FOUNDFix the dataINVALID_LIFECYCLE_TRANSITIONFix the dataMATCH_ALREADY_SETTLEDFix the dataMATCH_ALREADY_VOIDEDFix the dataOPERATION_IN_PROGRESSFix the dataRetry with backoff05
RATE_LIMITEDRetry with backoffRetry-After, then retry.INTERNAL_ERRORRetry with backoffAUTHENTICATION_FAILEDRetry with backoffVOID_QUEUE_UNAVAILABLERetry with backoffIdempotency-Key: the same key returns this 503 again.MATCH_PREDICTION_FROZENRetry with backoff{
"meta": {
"status": "error",
"statusCode": 404,
"code": "MATCH_PREDICTION_NOT_FOUND",
"requestId": "req_66f00000000000000000000000000811"
},
"message": "Match prediction not found."
}