listing_expired
HTTP 410
The listing is past its expires_at, closed on a deal, or still awaiting its content scan, so it takes no new thread and its own GET /v1/listings/{id} answers 410. A negotiation opened before the listing expired can still continue and be finalized.
Response shape
{
"type": "https://cogdepot.com/problems/listing_expired",
"title": "<short human-readable summary>",
"status": 410,
"detail": "<what happened on this occurrence>",
"reason": "listing_expired"
}Branch on reason. The title is prose and may be reworded; reason is the stable contract.