Operation
Sync Seats
PUT
/venues/{id}/layouts/{layoutId}/areas/{areaId}/seats/syncSynchronise seats in an area with an external data source.
This is a powerful "upsert" operation-seats that exist are updated, new seats
are created, and seats not in your data can optionally be removed.
Ideal for keeping your seat maps in sync with venue management systems or
CAD drawings.
When to use this
- Syncing with a venue's master seating database
- Importing updates from architectural plans
- Keeping multiple systems in sync automatically
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
idstringExisting seat ID (if updating) or temporary editor ID
sectionstringSection identifier
row*stringRow identifier
number*stringSeat number
labelstringDisplay label
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[]
companionTostring
internalNotesstring
publicNotesstring
clearExistingbooleanWhether to clear existing seats before syncing (default: true)
Returns
Seats synced 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
Important
Be careful with the delete option-it removes seats not in your sync data.
Tip
Run a dry-run first to preview changes before applying them.
Related
import { BackstageClient } from '@ticketlayer/backstage';const client = new BackstageClient({ organisationSlug: 'your-org',});client.setAccessToken('YOUR_ACCESS_TOKEN');// Sync Seats In Areaconst result = await client.seatsinarea.syncSeatsInArea('{{ID}}', { /* request body */ });console.log('Operation completed:', result);Response 200
{
"seatsSynced": 150,
"seats": [
{
"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"
}
]
}