# API Contract: View Attendee List (011)

**Date**: 2026-03-08

## New Endpoint

### `GET /events/{token}/attendees`

Retrieves the list of attendees for an event. Restricted to the event organizer.

**Path Parameters**:

| Parameter | Type | Description |
|-----------|------|-------------|
| token | string (UUID) | Event token |

**Query Parameters**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| organizerToken | string (UUID) | Yes | Organizer token for authorization |

**Responses**:

#### 200 OK

Organizer token is valid. Returns the attendee list.

```json
{
  "attendees": [
    { "name": "Alice" },
    { "name": "Bob" },
    { "name": "Charlie" }
  ]
}
```

#### 200 OK (empty list)

No RSVPs yet.

```json
{
  "attendees": []
}
```

#### 403 Forbidden

Organizer token is missing, invalid, or does not match the event.

```json
{
  "type": "about:blank",
  "title": "Forbidden",
  "status": 403,
  "detail": "Invalid organizer token."
}
```

#### 404 Not Found

Event token does not exist.

```json
{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "detail": "Event not found."
}
```

## OpenAPI Schema Addition

```yaml
/events/{token}/attendees:
  get:
    operationId: getAttendees
    summary: Get attendee list for an event (organizer only)
    parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: organizerToken
        in: query
        required: true
        schema:
          type: string
          format: uuid
    responses:
      '200':
        description: Attendee list
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetAttendeesResponse'
      '403':
        description: Invalid organizer token
      '404':
        description: Event not found

GetAttendeesResponse:
  type: object
  required:
    - attendees
  properties:
    attendees:
      type: array
      items:
        $ref: '#/components/schemas/Attendee'
      example:
        - name: "Alice"
        - name: "Bob"

Attendee:
  type: object
  required:
    - name
  properties:
    name:
      type: string
      minLength: 1
      maxLength: 100
      example: "Alice"
```

## Existing Endpoints (unchanged)

- `POST /events` — no changes
- `GET /events/{token}` — no changes (still returns `attendeeCount` publicly)
- `POST /events/{token}/rsvps` — no changes
