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

# Search authorized Spark customers

> Does not query or import scheduler records.



## OpenAPI

````yaml https://api.sparkserv.com/public/api/swagger.json post /customers/search
openapi: 3.1.0
info:
  title: Spark Public API
  description: >-
    Dealership discovery and vehicle-specific appointment scheduling. Obtain a
    token with POST https://auth.sparkserv.com/oauth/token, Content-Type:
    application/json, and a body containing grant_type: client_credentials,
    client_id, client_secret, audience: https://api.sparkserv.com/public, and
    the requested scope string. Send Authorization: Bearer <access_token> on API
    requests. Keep client secrets on your server, not in browser applications.
    Required scopes must be granted both in the token and on the active Spark
    API client. Dealership access follows its acting-user team memberships.
    Availability is not a reservation. Booking has no durable idempotency
    guarantee. Do not blindly retry mutations after timeouts or unknown
    outcomes; Spark appointment reads are local snapshots, not proof of the
    current upstream state. Unknown outcomes require reconciliation with the
    dealership or scheduler.
  version: '1'
  contact: {}
servers:
  - url: https://api.sparkserv.com/public/v1
    description: Current API environment
security: []
tags: []
paths:
  /customers/search:
    post:
      tags:
        - Customers
      summary: Search authorized Spark customers
      description: Does not query or import scheduler records.
      operationId: findPublicCustomersV1
      parameters:
        - name: Dealership-Id
          in: header
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCustomerSearchV1Dto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCustomerSearchV1ResponseDto'
        '400':
          description: >-
            Invalid request. Inspect code and details and correct the input
            before retrying.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponseDto'
              examples:
                invalidInput:
                  summary: Correct the request fields
                  value:
                    statusCode: 400
                    code: INVALID_INPUT
                    message: Request validation failed
        '401':
          description: >-
            Missing, invalid or expired client-credentials token, or an inactive
            client. Obtain a valid token for an active client.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponseDto'
              examples:
                unauthorized:
                  summary: Authenticate with an active client
                  value:
                    statusCode: 401
                    code: UNAUTHORIZED
                    message: The request could not be completed
        '403':
          description: The token or active API client lacks a required action scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponseDto'
              examples:
                forbidden:
                  summary: Grant the required scope and obtain a new token
                  value:
                    statusCode: 403
                    code: FORBIDDEN
                    message: The request could not be completed
        '404':
          description: >-
            The resource does not exist or is outside the client's dealership
            access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponseDto'
              examples:
                notFound:
                  summary: Check the resource and dealership access
                  value:
                    statusCode: 404
                    code: NOT_FOUND
                    message: Resource not found
        '500':
          description: An unexpected server error prevented the request from completing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponseDto'
              examples:
                requestFailed:
                  summary: Report the unexpected failure
                  value:
                    statusCode: 500
                    code: REQUEST_FAILED
                    message: The request could not be completed
      security:
        - oauth2:
            - customers:read
components:
  schemas:
    PublicCustomerSearchV1Dto:
      type: object
      properties:
        limit:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
        cursor:
          type: string
          format: uuid
          description: nextCursor from the preceding page of this search
        search:
          type: string
          description: >-
            A complete phone number, email address or VIN; searches Spark
            records only
      required:
        - search
      additionalProperties: false
    PublicCustomerSearchV1ResponseDto:
      type: object
      properties:
        nextCursor:
          oneOf:
            - type: string
              format: uuid
              description: Cursor for the next page, or null on the final page
            - type: 'null'
        items:
          maxItems: 100
          type: array
          items:
            $ref: '#/components/schemas/PublicCustomerV1ResponseDto'
      required:
        - nextCursor
        - items
    PublicApiErrorResponseDto:
      type: object
      properties:
        statusCode:
          type: integer
        code:
          type: string
          description: Stable machine-readable error code
        message:
          type: string
        details:
          description: >-
            Validation messages or contextual fields/choices; never raw
            scheduler error data
          oneOf:
            - type: object
              additionalProperties: true
            - type: array
              items:
                type: string
      required:
        - statusCode
        - code
        - message
    PublicCustomerV1ResponseDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        firstName:
          oneOf:
            - type: string
            - type: 'null'
        lastName:
          type: string
        email:
          oneOf:
            - type: string
              format: email
            - type: 'null'
        phones:
          type: array
          items:
            $ref: '#/components/schemas/PublicCustomerPhoneV1ResponseDto'
        vehicles:
          type: array
          items:
            $ref: '#/components/schemas/PublicCustomerVehicleV1ResponseDto'
      required:
        - id
        - firstName
        - lastName
        - email
        - phones
        - vehicles
    PublicCustomerPhoneV1ResponseDto:
      type: object
      properties:
        number:
          type: string
        type:
          type: string
          enum:
            - Cellular
            - Home
            - Work
            - Unknown
      required:
        - number
        - type
    PublicCustomerVehicleV1ResponseDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        year:
          type: number
        make:
          type: string
        model:
          type: string
        vin:
          oneOf:
            - type: string
            - type: 'null'
        trim:
          oneOf:
            - type: string
            - type: 'null'
        color:
          oneOf:
            - type: string
            - type: 'null'
        mileage:
          oneOf:
            - type: number
            - type: 'null'
      required:
        - id
        - year
        - make
        - model
        - vin
        - trim
        - color
        - mileage
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.sparkserv.com/oauth/token
          scopes:
            appointments:update: appointments:update
            appointments:cancel: appointments:cancel
            dealerships:read: dealerships:read
            scheduling:read: scheduling:read
            customers:read: customers:read
            appointments:read: appointments:read
            appointments:create: appointments:create

````

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