SeatBuilderSeatBuilder Docs

Extend held seats

Secret key only (a public key gets `403 public_key_not_allowed`). Refresh the hold TTL (payment window) for one or more seats the caller already holds. Batch + partial-success: seats that cannot be extended are returned in failed[] without failing the request, with `reason` `already_booked` (booked under this token), `hold_expired` (this token's hold lapsed) or `not_held_by_token`. `objectLabels` omitted = every row the token has on the event. If the token has nothing on the event → `409 no_active_hold`.

POST/api/v1/events/{eventKey}/seats/extend

Path Parameters

eventKeystring
holdTokenstring

Client-generated token identifying the hold session (≥ 8 chars; recommended: random UUID).

Length8 <= length
objectLabels?array<string>

Seat labels to extend. Omit to extend every seat currently held by this token.

Items1 <= items <= 200
ttlSeconds?integer

New hold lifetime in seconds (payment window). Defaults to 600 (10 min) when omitted; capped at 3600 (1 hour).

Range0 < value <= 3600

Response Body

curl -X POST "https://seatbuilder.org/api/v1/events/string/seats/extend" \  -H "Content-Type: application/json" \  -d '{    "holdToken": "stringst"  }'

{
  "holdExpiresAt": "2026-10-02T18:55:00.000Z",
  "extended": [
    {
      "objectLabel": "A-12"
    }
  ],
  "failed": [
    {
      "objectLabel": "A-13",
      "reason": "not_held_by_token"
    }
  ]
}
{
  "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": 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"
    ]
  }
}
Extend held seats — SeatBuilder Docs