---
title: "List venues"
method: GET
path: "/venues"
tags: ["Venues"]
---

# List venues

`GET /venues`

## Request

- Base URL: `https://joinways.app/api/v1`
- URL: `https://joinways.app/api/v1/venues`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://joinways.app/oauth/authorize`, token URL `https://joinways.app/api/oauth/token`, scopes: `mcp.read`)

Top-level venues the token owner can see, by `display_order` then name, each with its spaces (rooms) under `spaces`. Spaces are never listed as venues. Not paginated. **Role permission:** none (any member; limited to the member's venues).

## Response `200`

Venues with their spaces.

- object
  - `venues` object[], required
    - `id` string, uuid
    - `name` string
    - `parent_id` string, uuid, nullable: Null for a venue; the venue's id for a space.
    - `type` string, nullable
    - `capacity` integer, nullable
    - `surface` integer, nullable: Square metres.
    - `description` string, nullable
    - `address` string, nullable
    - `city` string, nullable
    - `state` string, nullable: State / province / region.
    - `country` string, nullable
    - `timezone` string, nullable
    - `color` string, nullable: Hex color used in the calendar.
    - `display_order` integer, nullable
    - `created_at` string, date-time, nullable
    - `booked_whole_only` boolean: The venue is only rented whole: every event takes the whole venue, `space_ids` sent for its events are ignored (no space is stored), and space slots are off. Always false on a space.
    - `spaces` Space[]: Spaces of the venue, by display_order then name.
      - `id` string, uuid
      - `name` string
      - `type` string, nullable
      - `capacity` integer, nullable
      - `surface` integer, nullable: Square metres.
      - `description` string, nullable
      - `color` string, nullable
      - `display_order` integer: Order in lists (then by name).
      - `layout_capacities` object: Seats per layout; `capacity` stays the headline figure. Keys: theatre, classroom, banquet, cabaret, cocktail, u_shape, boardroom.
      - `combined_space_ids` string[]: This space is the combination of these spaces of the same venue (movable walls). Booking it takes them; booking one of them conflicts with it. Empty for a plain space.
      - `setup_minutes` integer: Set-up time before each use, counted as occupied in conflicts.
      - `teardown_minutes` integer: Tear-down time after each use, counted as occupied in conflicts.
      - `rental_fee` number, nullable: Hire fee excl. tax, venue currency (quote reference).
      - `min_spend` number, nullable: Minimum spend excl. tax when the space is booked.

## Other responses

- `401`: Missing, invalid, expired or revoked bearer token (`unauthorized`).
- `429`: Too many requests (`rate_limited`). `details.reason`: `per-ip`, `per-account-minute`, `per-account-day`, or `email_rate_limited` (email budget). Always carries `Retry-After`: wait that many seconds.

---

[API](https://skmtc.dev/joinways/apis/joinways-public-api.md) · [All operations](https://skmtc.dev/joinways/apis/joinways-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/joinways/apis/joinways-public-api/revisions/39e84309953e?raw)
