{
  "openapi": "3.1.0",
  "info": {
    "title": "GFAVIP Tickets API",
    "version": "2026-07-22",
    "summary": "Supported public and integration APIs for GFAVIP Tickets",
    "description": "GFAVIP Tickets provides event discovery, ticket registration, attendee-directory preferences, Community Interest embeds, and authorized event operations. This document is the canonical source for the public integration contract. Internal administration routes not listed here are not a supported external API.",
    "license": {
      "name": "MIT",
      "identifier": "MIT"
    }
  },
  "servers": [
    {
      "url": "https://tickets.gfavip.com",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Agent-readable event-management skill",
    "url": "https://tickets.gfavip.com/skill.md"
  },
  "security": [],
  "x-guides": [
    {
      "title": "Simple SSO",
      "url": "https://tickets.gfavip.com/docs/simple-sso",
      "description": "Browser SSO guidance for GFAVIP mini apps."
    },
    {
      "title": "FOMO and Ticket Embeds",
      "url": "https://tickets.gfavip.com/docs/fomo-tier-embed",
      "description": "Partner-site embed widgets and customization."
    },
    {
      "title": "Roles and Permissions",
      "url": "https://tickets.gfavip.com/docs/roles",
      "description": "Human-readable role overview."
    }
  ],
  "tags": [
    {
      "name": "Events",
      "description": "Anonymous event discovery."
    },
    {
      "name": "Embeds",
      "description": "Anonymous partner-site embed data."
    },
    {
      "name": "Account",
      "description": "Authenticated account preferences."
    },
    {
      "name": "Tickets",
      "description": "Authenticated registration and ticket access."
    },
    {
      "name": "Attendee Directory",
      "description": "Privacy-gated attendee discovery."
    },
    {
      "name": "Event Operations",
      "description": "Authorized event-team operations."
    }
  ],
  "paths": {
    "/api/events": {
      "get": {
        "tags": [
          "Events"
        ],
        "operationId": "listEvents",
        "summary": "List active events",
        "description": "Returns active public events. Internal ownership, assigned-partner, revenue-share, private-note, and Community Interest estimate fields are removed by the server.",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Filter by event type.",
            "schema": {
              "$ref": "#/components/schemas/EventType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Active events",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicEvent"
                  }
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/api/events/{id}": {
      "get": {
        "tags": [
          "Events"
        ],
        "operationId": "getEvent",
        "summary": "Get one event",
        "description": "Returns one public event by numeric ID. Cancelled events may still be returned so clients can display their status.",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          }
        ],
        "responses": {
          "200": {
            "description": "Public event",
            "headers": {
              "ETag": {
                "description": "Revision-aware event entity tag.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicEvent"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/api/events/{id}/side-events": {
      "get": {
        "tags": [
          "Events"
        ],
        "operationId": "listSideEvents",
        "summary": "List side events",
        "description": "Returns public child events for a parent event. The same public-field filter used by the main event endpoints is applied.",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          }
        ],
        "responses": {
          "200": {
            "description": "Side events",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicEvent"
                  }
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        }
      }
    },
    "/api/events/{id}/promotional-materials": {
      "get": {
        "tags": [
          "Events"
        ],
        "operationId": "listPromotionalMaterials",
        "summary": "List event promotional materials",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          }
        ],
        "responses": {
          "200": {
            "description": "Promotional materials",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PromotionalMaterial"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/public/events/{slug}/fomo": {
      "get": {
        "tags": [
          "Embeds"
        ],
        "operationId": "getEventFomo",
        "summary": "Get public capacity and social-proof data",
        "description": "CORS-enabled endpoint for partner-site embeds. Community Interest is returned only when enabled for the event.",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventSlug"
          }
        ],
        "responses": {
          "200": {
            "description": "FOMO data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FomoResponse"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/api/public/events/{slug}/tiers": {
      "get": {
        "tags": [
          "Embeds"
        ],
        "operationId": "getPublicTicketTiers",
        "summary": "Get public ticket tiers",
        "description": "CORS-enabled endpoint. Hidden and member-only tiers are excluded.",
        "parameters": [
          {
            "$ref": "#/components/parameters/EventSlug"
          }
        ],
        "responses": {
          "200": {
            "description": "Public ticket tiers",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicTierResponse"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/api/auth/user": {
      "get": {
        "tags": [
          "Account"
        ],
        "operationId": "getBrowserSessionUser",
        "summary": "Get the browser-session user",
        "description": "Returns the current browser-session user or null. Headless agents should verify access with an authorized endpoint such as GET /api/admin/events instead.",
        "responses": {
          "200": {
            "description": "Session user or null",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/SessionUser"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/account/attendee-directory-preference": {
      "get": {
        "tags": [
          "Account"
        ],
        "operationId": "getAttendeeDirectoryPreference",
        "summary": "Get the account-wide directory preference",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Current preference",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BooleanPreference"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      },
      "patch": {
        "tags": [
          "Account"
        ],
        "operationId": "updateAttendeeDirectoryPreference",
        "summary": "Update the account-wide directory preference",
        "description": "Opting out removes the user from all attendee directories immediately. It does not prevent a confirmed attendee from viewing an enabled directory.",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BooleanPreference"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated preference",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BooleanPreference"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/api/tickets": {
      "get": {
        "tags": [
          "Tickets"
        ],
        "operationId": "listMyTickets",
        "summary": "List the authenticated user's tickets",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Tickets",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Ticket"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/api/tickets/check-eligibility/{eventId}": {
      "get": {
        "tags": [
          "Tickets"
        ],
        "operationId": "checkTicketEligibility",
        "summary": "Check registration eligibility",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eligibility decision",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/api/tickets/apply": {
      "post": {
        "tags": [
          "Tickets"
        ],
        "operationId": "applyForTicket",
        "summary": "Apply for an event ticket",
        "description": "Creates a ticket application. A pending application is not a confirmed attendee and does not grant directory access.",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "eventId",
                  "applicationData"
                ],
                "properties": {
                  "eventId": {
                    "type": "integer"
                  },
                  "applicationData": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "useGems": {
                    "type": "boolean",
                    "default": false
                  },
                  "ticketTier": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Created ticket and application",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/api/events/{id}/attendee-directory": {
      "get": {
        "tags": [
          "Attendee Directory"
        ],
        "operationId": "getAttendeeDirectory",
        "summary": "Get an event's attendee directory",
        "description": "The viewer must hold a paid or checked-in ticket and the event team must have enabled the directory. Only confirmed attendees who opted in appear. Contact and ticket data are never returned.",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/EventId"
          }
        ],
        "responses": {
          "200": {
            "description": "Directory state and sanitized public profiles",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttendeeDirectoryResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/api/admin/events/{eventId}/community-features": {
      "get": {
        "tags": [
          "Event Operations"
        ],
        "operationId": "getCommunityFeatureSettings",
        "summary": "Get directory and Community Interest settings",
        "description": "Admins and staff can access all events according to their role. Partners and event agents are limited to owned or assigned events.",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Community feature settings and counts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommunityFeatureSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "patch": {
        "tags": [
          "Event Operations"
        ],
        "operationId": "updateCommunityFeatureSettings",
        "summary": "Update directory or Community Interest settings",
        "description": "Staff may update Community Interest but not the directory. Event-agent bearer requests must include X-Action-Reason.",
        "security": [
          {
            "cookieAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "X-Action-Reason",
            "in": "header",
            "required": false,
            "description": "Required for event-agent bearer updates.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "minProperties": 1,
                "properties": {
                  "attendeeDirectoryEnabled": {
                    "type": "boolean"
                  },
                  "communityInterestEnabled": {
                    "type": "boolean"
                  },
                  "communityInterestEstimate": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1000000
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Settings updated"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "cookieAuth": {
        "type": "apiKey",
        "in": "cookie",
        "name": "connect.sid",
        "description": "Browser session established through GFAVIP SSO."
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "GFAVIP session token",
        "description": "Headless GFAVIP token. Treat it as a secret and never place it in a URL or log."
      }
    },
    "parameters": {
      "EventId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "Numeric event ID.",
        "schema": {
          "type": "integer"
        }
      },
      "EventSlug": {
        "name": "slug",
        "in": "path",
        "required": true,
        "description": "Event slug used by embed endpoints.",
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Invalid request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication required",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "The authenticated user lacks permission",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ServerError": {
        "description": "Unexpected server error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "schemas": {
      "EventType": {
        "type": "string",
        "enum": [
          "cbs",
          "meetup",
          "webinar",
          "partner",
          "virtual"
        ]
      },
      "PublicEvent": {
        "type": "object",
        "description": "Public event representation. It never contains createdBy, assignedPartners, revenueShares, privateNotes, communityInterestEstimate, or manager audit fields.",
        "required": [
          "id",
          "name",
          "type",
          "startDate",
          "endDate"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/EventType"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "salesStartDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "location": {
            "type": [
              "string",
              "null"
            ]
          },
          "capacity": {
            "type": "object",
            "additionalProperties": true
          },
          "batches": {
            "type": "array",
            "items": {}
          },
          "prices": {
            "type": "object",
            "additionalProperties": true
          },
          "discounts": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "type": "object",
            "additionalProperties": true
          },
          "approvalRules": {
            "type": "array",
            "items": {}
          },
          "timers": {
            "type": "object",
            "additionalProperties": true
          },
          "speakers": {
            "type": "array",
            "items": {}
          },
          "sponsors": {
            "type": "array",
            "items": {}
          },
          "giveaways": {
            "type": "array",
            "items": {}
          },
          "imageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "externalPageUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "isActive": {
            "type": "boolean"
          },
          "isFeatured": {
            "type": "boolean"
          },
          "parentEventId": {
            "type": [
              "integer",
              "null"
            ]
          },
          "requiresParentTicket": {
            "type": "boolean"
          },
          "allowedPriceTiers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "allowedTierUnlocks": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "eventCategory": {
            "type": [
              "string",
              "null"
            ]
          },
          "eventTiming": {
            "type": [
              "string",
              "null"
            ]
          },
          "waitlistTimeLimit": {
            "type": [
              "integer",
              "null"
            ]
          },
          "enableBadges": {
            "type": "boolean"
          },
          "badgeTemplate": {
            "type": [
              "string",
              "null"
            ]
          },
          "enableAdditionalOptions": {
            "type": "boolean"
          },
          "enableGroupPurchase": {
            "type": "boolean"
          },
          "attendeeDirectoryEnabled": {
            "type": "boolean"
          },
          "communityInterestEnabled": {
            "type": "boolean"
          },
          "communityInterestCount": {
            "type": "integer",
            "minimum": 0,
            "description": "Present when Community Interest is enabled."
          },
          "timezone": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "integer"
          },
          "createdAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PromotionalMaterial": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "eventId": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string"
          },
          "displayOrder": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      },
      "FomoResponse": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "capacity",
          "communityInterest",
          "timers",
          "now"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "salesStartDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "capacity": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CapacitySnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "communityInterest": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CommunityInterest"
              },
              {
                "type": "null"
              }
            ]
          },
          "timers": {
            "type": "object",
            "additionalProperties": true
          },
          "now": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "CapacitySnapshot": {
        "type": "object",
        "required": [
          "total",
          "sold",
          "remaining",
          "soldOut"
        ],
        "properties": {
          "total": {
            "type": "integer"
          },
          "sold": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "soldOut": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CommunityInterest": {
        "type": "object",
        "required": [
          "count",
          "label"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "label": {
            "const": "people interested or attending"
          }
        },
        "additionalProperties": false
      },
      "PublicTierResponse": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "currency",
          "tiers"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "tiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicTier"
            }
          }
        },
        "additionalProperties": false
      },
      "PublicTier": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "originalPrice": {
            "type": [
              "number",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "capacity": {
            "type": [
              "integer",
              "null"
            ]
          },
          "soldOut": {
            "type": "boolean"
          },
          "applyUrl": {
            "type": "string",
            "format": "uri"
          }
        },
        "additionalProperties": false
      },
      "SessionUser": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "username": {
            "type": [
              "string",
              "null"
            ]
          },
          "tier": {
            "type": [
              "string",
              "null"
            ]
          },
          "credits": {
            "type": [
              "integer",
              "null"
            ]
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "attendeeDirectoryOptIn": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      },
      "BooleanPreference": {
        "type": "object",
        "required": [
          "enabled"
        ],
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Ticket": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "eventId": {
            "type": "integer"
          },
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending_app",
              "pending_pay",
              "paid",
              "checked_in",
              "cancelled"
            ]
          },
          "applicationData": {
            "type": "object",
            "additionalProperties": true
          },
          "gemsUsed": {
            "type": [
              "integer",
              "null"
            ]
          },
          "deadline": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "PublicDirectoryProfile": {
        "type": "object",
        "required": [
          "username",
          "name",
          "photoUrl",
          "title",
          "company",
          "location",
          "bio",
          "profileUrl"
        ],
        "properties": {
          "username": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "photoUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "company": {
            "type": [
              "string",
              "null"
            ]
          },
          "location": {
            "type": [
              "string",
              "null"
            ]
          },
          "bio": {
            "type": [
              "string",
              "null"
            ]
          },
          "profileUrl": {
            "type": "string",
            "format": "uri"
          }
        },
        "additionalProperties": false
      },
      "AttendeeDirectoryResponse": {
        "type": "object",
        "required": [
          "enabled",
          "viewerConfirmed",
          "canView",
          "attendees"
        ],
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "viewerConfirmed": {
            "type": "boolean"
          },
          "canView": {
            "type": "boolean"
          },
          "attendees": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "$ref": "#/components/schemas/PublicDirectoryProfile"
            }
          }
        },
        "additionalProperties": false
      },
      "CommunityFeatureSettings": {
        "type": "object",
        "required": [
          "attendeeDirectoryEnabled",
          "canManageDirectory",
          "confirmedCount",
          "visibleProfileCount",
          "communityInterestEnabled",
          "communityInterestEstimate",
          "communityInterestDisplayCount"
        ],
        "properties": {
          "attendeeDirectoryEnabled": {
            "type": "boolean"
          },
          "canManageDirectory": {
            "type": "boolean"
          },
          "confirmedCount": {
            "type": "integer",
            "minimum": 0
          },
          "visibleProfileCount": {
            "type": "integer",
            "minimum": 0
          },
          "communityInterestEnabled": {
            "type": "boolean"
          },
          "communityInterestEstimate": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          },
          "communityInterestDisplayCount": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  }
}
