← Back to blog
BLOG

A Held Result Stays Held: Sending the Same Match Again Returns already_resolved

EngineeringNovember 3, 2026 · PLLAY Team

Once a result is settled, held or voided, sending the same match again does not open a second read. Here is what the API returns, and how to handle it.

A result from PLLAY is decided once. Whether an event is settled, held or voided, sending the same match again does not start a second read. The API answers 409 with the error code already_resolved and returns the result that already exists.

The reason is the hold. A hold means the read was not clear enough to settle on its own, so a PLLAY reviewer decides it. If a resubmitted clip could get a fresh read, that second read might settle automatically and skip the reviewer. Now a resubmit cannot move a held result anywhere.

A submission counts as the same match when it reuses the event, or when the same partner sends the same video URL again. A partner can also send content_sha256, the SHA-256 of the clip file as 64 lowercase hex characters, and a clip this partner has already resolved is caught before anything is queued. The check is per partner: the same clip from a different partner is not blocked.

POST /v1/events and POST /v1/vision/verify return 409 already_resolved with the existing result in the body, along with prior_event_id and prior_state. No new job is queued. On POST /v1/events/{id}/settle, asking to settle an already-settled event with the same outcome still returns 200 with the stored result and writes nothing. Asking to settle a held or voided event, or to settle a settled event with a different outcome, returns already_resolved.

Only a PLLAY reviewer moves a held event to settled. A reviewer id sent in a partner request is not a reviewer. If you believe a settled result is wrong, the remedy is a dispute within 72 hours of the result, not a resubmit. Every blocked attempt is logged with both event ids, so the record shows what was tried and when.

For your integration, treat already_resolved as an answer, not an error to retry. Read the existing result from the response body. If prior_state is held, keep waiting for event.settled or event.voided. Your integration still handles three states: settled, held and voided.

Setup is arranged with the PLLAY team for each partner, starting with a sandbox key. Platforms, publishers and media companies that want these results in their own product can start at access@pllay.io.