Operation
Add Seat to Area
POST
/venues/{id}/layouts/{layoutId}/areas/{areaId}/seatsAdd a single seat to an area in a venue layout.
Each seat needs a row and seat number. You can also assign it to a pricing
category and set coordinates for visual seat maps.
For bulk seat creation, consider using the generate or bulk endpoints instead.
When to use this
- Adding individual seats that don't fit the standard grid
- Creating accessible seating positions
- Adding extra seats for specific events
Path parameters
idstringRequired- Venue ID
layoutIdstringRequired- Layout ID
areaIdstringRequired- Area ID
Headers
Idempotency-KeystringOptional- Makes the write safe to retry. The first request with a key does the work and its response is stored for 24 hours; a repeat with the same key and the same request (method, path, query, X-Ticketlayer-Channel, TL-Version and body) gets that stored status and body back, marked `Idempotent-Replay: true`, without running again. The key is scoped to your organisation and your credential. The same key with a different request is 422 IDEMPOTENCY_KEY_REUSED; a repeat while the first is still running waits for it, then answers 409 IDEMPOTENT_REQUEST_IN_PROGRESS if it has not finished. Only a 2xx is stored: after an error the key is free again. Omit the header and the request behaves as it always has.
Body
sectionstringSection identifier
row*stringRow identifier
number*stringSeat number
labelstringDisplay label (auto-generated if not provided)
categoryIdstringCategory ID for pricing
status"available" | "blocked" | "accessible" | "held" | "removed"Seat status
holdTypestringHold type if status is held
attributes"aisle_left" | "aisle_right" | "accessible" | "wheelchair_space" | "companion_seat" | "easy_access" | "obstructed_view" | "restricted_view" | "excellent_view" | "stage_view" | "extra_legroom" | "premium_comfort" | "front_row" | "back_row" | "center"[]Seat attributes
companionSeatsstring[]IDs of companion seats (for wheelchair spaces)
companionTostringID of wheelchair space this is companion to
x*numberX coordinate on map
y*numberY coordinate on map
rotationnumber0-359 degrees
internalNotesstringInternal notes
publicNotesstringPublic notes shown to customers
Returns
Seat added successfully
Errors
- 400
- Bad Request - Invalid input
- 401
- Unauthorized - Authentication required
- 403
- Forbidden - Insufficient permissions
- 404
- Not Found - Resource not found
- 500
- Internal Server Error
Every error names its code and links to it. All error codes
Notes
Note
For regular seating rows, use generateSeatsForArea instead-it's much faster.
Tip
Seat labels should match what's printed on physical seats at the venue.
Related
import { BackstageClient } from '@ticketlayer/backstage';const client = new BackstageClient({ organisationSlug: 'your-org',});client.setAccessToken('YOUR_ACCESS_TOKEN');// Add Seat To Areaconst result = await client.seattoarea.addSeatToArea('{{ID}}', { /* request body */ });console.log('Operation completed:', result);Response 201
{
"seat": {
"id": "vlas_abc123",
"section": "Orchestra Center",
"row": "A",
"number": "15",
"label": "Orchestra Center, Row A, Seat 15",
"categoryId": "vlc_premium",
"status": "available",
"holdType": "string",
"attributes": [
"string"
],
"companionSeats": [
"string"
],
"companionTo": "string",
"position": {
"x": 0,
"y": 0,
"rotation": 0
},
"internalNotes": "string",
"publicNotes": "string"
}
}