PlanDocket

Booth Types

Business+

Manage booth types (row, corner, island booth and so on) with default and allowed sizes. Use their id or key when you create booths. Reading needs plans:read, changes need plans:write.

Required scopes: plans
Access level: GET plans:read POST / PUT / PATCH / DELETE plans:write About access levels
Feature flag: booths

Endpoints

GET /api/v1/booth-types

List all booth types (booth_count = booths using the type)

GET /api/v1/booth-types/{id}

Retrieve a single booth type

POST /api/v1/booth-types

Create a booth type. Only booth_type_name is required; the key is generated from the name when omitted, sizes default to 3 x 3 m (allowed 1 to 20 m)

PUT/PATCH /api/v1/booth-types/{id}

Update a booth type (only the fields you send). Changing the key also updates the services limited to the old key

DELETE /api/v1/booth-types/{id}

Delete a booth type. Refused with 409 while booths use it; deactivate it instead (is_active: false)

Query Parameters

Parameter Description
is_active Only active (1) or only inactive (0) booth types
event_key Only booth types offered for this event (types without event restriction are included)
page Page number (default: 1)
per_page Results per page (default: 25, max. 100)

Request Schema

Parameter Type Required Description
booth_type_name string Yes Name shown to admins and exhibitors (2-255 characters)
booth_type_key string No Unique key (lowercase letters, digits, "_" and "-"); generated from the name when omitted
description string No Short description (e.g. "one open side")
default_width float No Default width in metres (default 3)
default_depth float No Default depth in metres (default 3)
min_width float No Allowed range in metres (min_width/max_width, min_depth/max_depth; default 1 to 20)
max_width float No Allowed range in metres (min_width/max_width, min_depth/max_depth; default 1 to 20)
min_depth float No Allowed range in metres (min_width/max_width, min_depth/max_depth; default 1 to 20)
max_depth float No Allowed range in metres (min_width/max_width, min_depth/max_depth; default 1 to 20)
color string No Colour in the floor plan (hex, e.g. #3B82F6)
category_keys array No Only for these exhibitor categories (empty = all)
event_keys array No Only for these events (empty = all)
is_active boolean No Whether the type can be used for new booths

Response Schema

Field Type
id integer
booth_type_key string
booth_type_name string
description string|null
default_width float
default_depth float
min_width float
max_width float
min_depth float
max_depth float
color string
category_keys array
event_keys array
is_active boolean
sort_order integer
booth_count integer
created_at string
updated_at string

Code Examples

curl -X GET "https://your-tenant.plandocket.com/api/v1/booth-types" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://your-tenant.plandocket.com';

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $baseUrl . '/api/v1/booth-types',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
const apiKey = 'YOUR_API_KEY';
const baseUrl = 'https://your-tenant.plandocket.com';

const response = await fetch(`${baseUrl}/api/v1/booth-types`, {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
  },
});

const data = await response.json();
console.log(data);
import requests

api_key = 'YOUR_API_KEY'
base_url = 'https://your-tenant.plandocket.com'

headers = {
    'Authorization': f'Bearer {api_key}',
}

response = requests.get(f'{base_url}/api/v1/booth-types', headers=headers)
data = response.json()
print(data)

Sample Response

200 OK
{
    "data": [
        {
            "id": 1,
            "booth_type_key": "string",
            "booth_type_name": "string",
            "description": "string",
            "default_width": 100,
            "default_depth": 100,
            "min_width": 100,
            "max_width": 100,
            "min_depth": 100,
            "max_depth": 100,
            "color": "string",
            "category_keys": [],
            "event_keys": [],
            "is_active": true,
            "sort_order": 1,
            "booth_count": 1,
            "created_at": "2026-01-15T10:00:00+01:00",
            "updated_at": "2026-01-15T10:00:00+01:00"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1,
        "total_pages": 1
    }
}