SeatBuilderSeatBuilder Docs

Publish a chart

Promotes the current draft to a published version. Events do not pin a version: every event of this chart reads the new layout immediately. To protect sold tickets, the publish is refused with `409 publish_affects_reservations` when the new draft would remove a booked or held label, turn it from seat to GA (or back), change its category, or shrink a GA area below its booked + held quantity on any event of this chart (both environments). `failed[]` lists every such label per event; `GET /charts/{chartKey}/publish-check` returns the same list without publishing. Pass `?force=true` to publish anyway: existing holds and bookings are kept as they are.

POST/api/v1/charts/{chartKey}/publish

Path Parameters

chartKeystring

Response Body

curl -X POST "https://seatbuilder.org/api/v1/charts/string/publish"

{
  "chartKey": "chart_8a2b1c",
  "name": "Brooklyn Music Hall — main floor",
  "draftVersion": 4,
  "publishedVersion": 3,
  "publishedAt": "2026-09-18T11:10:00.000Z",
  "updatedAt": "2026-09-18T11:10:00.000Z"
}
{
  "statusCode": 0,
  "error": "string",
  "message": "string",
  "code": "validation_failed",
  "failed": [
    {
      "objectLabel": "string",
      "reason": "string",
      "eventKey": "string",
      "environment": "string",
      "booked": 0,
      "held": 0
    }
  ],
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "error": "string",
  "message": "string",
  "code": "validation_failed",
  "failed": [
    {
      "objectLabel": "string",
      "reason": "string",
      "eventKey": "string",
      "environment": "string",
      "booked": 0,
      "held": 0
    }
  ],
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "error": "string",
  "message": "string",
  "code": "validation_failed",
  "failed": [
    {
      "objectLabel": "string",
      "reason": "string",
      "eventKey": "string",
      "environment": "string",
      "booked": 0,
      "held": 0
    }
  ],
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}
{
  "statusCode": 0,
  "error": "string",
  "message": "string",
  "code": "validation_failed",
  "failed": [
    {
      "objectLabel": "string",
      "reason": "string",
      "eventKey": "string",
      "environment": "string",
      "booked": 0,
      "held": 0
    }
  ],
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  }
}

{
  "statusCode": 409,
  "error": "Conflict",
  "message": "Publishing would change 2 booked or held label(s); review failed[] and republish with ?force=true to proceed",
  "code": "publish_affects_reservations",
  "failed": [
    {
      "eventKey": "tg-prod-session-44778",
      "environment": "production",
      "objectLabel": "A-1",
      "reason": "removed",
      "booked": 1,
      "held": 0
    },
    {
      "eventKey": "tg-prod-session-44778",
      "environment": "production",
      "objectLabel": "lawn",
      "reason": "capacity_below_reserved",
      "booked": 120,
      "held": 4
    }
  ]
}
Publish a chart — SeatBuilder Docs