{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/epicdirectories/json-schema/epicdirectories-update-order-dto-schema.json",
  "title": "UpdateOrderDto",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/epicdirectories-orders-admin-api-openapi.yml#/components/schemas/UpdateOrderDto",
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "received",
        "in_progress",
        "delivered",
        "cancelled"
      ],
      "description": "`refunded` is deliberately not accepted. A refund is Stripe's fact and arrives over the signed webhook, which sets it; a status typed here could claim money went back when it did not. An order already refunded answers 409 to any status change."
    },
    "placementUrl": {
      "type": "string",
      "description": "Where it was published. **Required in order to reach `delivered`** — it is the only field that lets anyone but the operator confirm the buyer got what they paid for. Send an empty string to clear it, which is refused while the order is delivered."
    },
    "operatorNotes": {
      "type": "string",
      "description": "Operator-only. Never rendered publicly. Empty string clears it."
    }
  }
}