Skip to content
Docs
Operation

Add Seat to Area

POST/venues/{id}/layouts/{layoutId}/areas/{areaId}/seats
Add 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
▼positionobject
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"
  }
}

Try it in test mode

Path parameters
Venue ID
Layout ID
Area ID
Body
Section identifier
Row identifier
Seat number
Display label (auto-generated if not provided)
Category ID for pricing
Seat status
Hold type if status is held
Seat attributes
IDs of companion seats (for wheelchair spaces)
ID of wheelchair space this is companion to
Internal notes
Public notes shown to customers