> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ticketspotapp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Search attendees

> Find attendees by a case-insensitive name or email prefix.



## OpenAPI

````yaml api-reference/openapi.json GET /attendees/search
openapi: 3.0.3
info:
  title: TicketSpot Developer API
  version: 2.1.0
  description: >-
    Manage events and attendees for the site associated with your API key.
    Developer API access requires a paid Business, Business+ or Platform plan.
    Free plans, trials and ticket packs do not grant API access. Eligibility is
    checked on every request using the billing plan resolver and its existing
    cache invalidation.


    Create a key in the dashboard under Settings > API Keys. Send Authorization:
    Bearer <api_key>. Keys use ts-{uuid}-{secret}; the secret is shown once and
    stored as a hash. Available scopes: events:read, events:create,
    events:update, attendees:read, attendees:scan.


    Rate limits are shared across application instances: 120 requests/minute per
    key, 600 requests/minute per site, and 300 requests/minute per IP before
    authentication. Responses include RateLimit-Limit, RateLimit-Remaining and
    RateLimit-Reset (seconds until reset). Exceeding a limit returns 429 with
    Retry-After. Redis outages return 503. Maximum API body size is 8 MiB.


    Event and attendee lists use cursor pagination: limit defaults to 25
    (maximum 100), and pagination.next_cursor is null at the end. Attendee
    search matches case-insensitive prefixes of names and email addresses.
    Scanning ordinary tickets queues the existing check-in task; a 202 means
    accepted for processing, and the attendee record may update shortly
    afterward. Invalid or duplicate scans return 409.
servers:
  - url: https://ticketspotapp.com/api/api/v2
    description: Production API
security:
  - bearerAuth: []
paths:
  /attendees/search:
    get:
      summary: Search attendees
      operationId: searchAttendees
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - name: q
          in: query
          required: true
          schema:
            type: string
            minLength: 2
            maxLength: 200
          description: Case-insensitive name or email prefix.
        - name: event_id
          in: query
          schema:
            type: string
          description: Optional event filter, restricted to this key's site.
      responses:
        '200':
          description: Matching attendees.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  attendees:
                    type: array
                    items:
                      $ref: '#/components/schemas/Attendee'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '413':
          $ref: '#/components/responses/Error413'
        '429':
          $ref: '#/components/responses/Error429'
        '500':
          $ref: '#/components/responses/Error500'
        '503':
          $ref: '#/components/responses/Error503'
components:
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        default: 25
        minimum: 1
        maximum: 100
    Cursor:
      name: cursor
      in: query
      schema:
        type: string
        maxLength: 2048
      description: Opaque next_cursor from a previous response.
  schemas:
    Attendee:
      type: object
      properties:
        id:
          type: string
        event_id:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        status:
          type: string
        ticket_id:
          type: string
          nullable: true
        checkin_scan_count:
          type: integer
        created_at:
          type: string
          format: date-time
    Pagination:
      type: object
      properties:
        limit:
          type: integer
        next_cursor:
          type: string
          nullable: true
    Error:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
        message:
          type: string
  responses:
    Error400:
      description: Invalid request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error401:
      description: Missing, invalid, expired or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error403:
      description: Paid Business plan required, or API key is missing the operation scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error404:
      description: Resource not found on this site.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error409:
      description: Operation conflicts with the resource state.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error413:
      description: Request body exceeds 8 MiB.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error429:
      description: Shared API rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
    Error500:
      description: Request could not be completed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error503:
      description: Rate limiting or scan protection temporarily unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: TicketSpot API key
      description: ts-{uuid}-{secret}. Every key requires its independent secret.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.