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

# Search dealers

> Returns public dealer summaries ordered by active listing count. Listing counts use VIN-level listing deduplication and ownership assignment, so they can differ from raw dealer feed counts. Use dealer_id, state, country, type, make, and q to narrow results.



## OpenAPI

````yaml /openapi.json get /v1/dealers
openapi: 3.1.0
info:
  title: Visor Public API
  version: 1.0.0-beta
  summary: Vehicle listings, facets, VIN, and dealer data for API customers.
  description: >-
    Public beta API for customer integrations. Normal /v1 endpoints require
    Authorization: Bearer <api_key>. API keys are scoped to API accounts; usage
    is metered per request and billed from the account ledger. The OpenAPI
    document is available without authentication at /v1/openapi.json.
servers:
  - url: https://api.visor.vin
    description: Production public API
security:
  - bearerAuth: []
tags:
  - name: Inventory
  - name: Dealers
  - name: Usage
paths:
  /v1/dealers:
    get:
      tags:
        - Dealers
      summary: Search dealers
      description: >-
        Returns public dealer summaries ordered by active listing count. Listing
        counts use VIN-level listing deduplication and ownership assignment, so
        they can differ from raw dealer feed counts. Use dealer_id, state,
        country, type, make, and q to narrow results.
      operationId: publicDealers.dealers
      parameters:
        - name: limit
          in: query
          schema:
            type: string
            description: Page size as an integer string. Defaults to 50; maximum 100.
          required: false
          description: Page size as an integer string. Defaults to 50; maximum 100.
          example: '2'
        - name: offset
          in: query
          schema:
            type: string
            description: Zero-based page offset as an integer string. Defaults to 0.
          required: false
          description: Zero-based page offset as an integer string. Defaults to 0.
        - name: dealer_id
          in: query
          schema:
            type: string
            description: >-
              Comma-separated dealer UUIDs to fetch directly. Accepts up to 100
              dealer IDs.
          required: false
          description: >-
            Comma-separated dealer UUIDs to fetch directly. Accepts up to 100
            dealer IDs.
        - name: state
          in: query
          schema:
            type: string
            description: Comma-separated two-letter dealer states, for example CA,TX.
          required: false
          description: Comma-separated two-letter dealer states, for example CA,TX.
          example: CA
        - name: country
          in: query
          schema:
            type: string
            description: Dealer country code, for example US.
          required: false
          description: Dealer country code, for example US.
        - name: type
          in: query
          schema:
            type: string
            enum:
              - franchise
              - independent
            description: Dealer type.
          required: false
          description: Dealer type.
          example: franchise
        - name: make
          in: query
          schema:
            type: string
            description: >-
              Comma-separated represented franchise makes or slugs, for example
              toyota,honda.
          required: false
          description: >-
            Comma-separated represented franchise makes or slugs, for example
            toyota,honda.
          example: Toyota
        - name: q
          in: query
          schema:
            type: string
            description: Case-insensitive dealer name or website domain search string.
          required: false
          description: Case-insensitive dealer name or website domain search string.
      responses:
        '200':
          description: Successful public API response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        dealer_id:
                          type: string
                          description: Dealer UUID.
                        name:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer display name.
                        city:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer city.
                        state:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer state.
                        postal_code:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer ZIP or postal code.
                        country:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer country code.
                        latitude:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: Dealer latitude when available.
                        longitude:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: Dealer longitude when available.
                        type:
                          anyOf:
                            - type: string
                              enum:
                                - franchise
                                - independent
                            - type: 'null'
                          description: Dealer type.
                        website:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Dealer website as an absolute URL when available.
                        makes:
                          type: array
                          items:
                            type: string
                          description: >-
                            Represented franchise makes. Empty when unavailable
                            or not applicable.
                        listing_count:
                          type: number
                          description: >-
                            Current active listing count for the dealer after
                            VIN-level listing deduplication and ownership
                            assignment.
                      required:
                        - dealer_id
                        - name
                        - city
                        - state
                        - postal_code
                        - country
                        - latitude
                        - longitude
                        - type
                        - website
                        - makes
                        - listing_count
                      additionalProperties: false
                      description: Dealer summary.
                    description: Records returned for this page.
                  pagination:
                    type: object
                    properties:
                      limit:
                        type: number
                        description: >-
                          Maximum number of records requested for this page.
                          Collection endpoints default to 50; values above 100
                          are rejected.
                      offset:
                        type: number
                        description: Zero-based offset used to fetch this page.
                      total:
                        type: number
                        description: >-
                          Exact count for the same filters at request time. Use
                          as a paging aid rather than a durable snapshot.
                      next_offset:
                        anyOf:
                          - type: number
                          - type: 'null'
                        description: >-
                          Offset for the next page, or null when there are no
                          more records.
                    required:
                      - limit
                      - offset
                      - total
                      - next_offset
                    additionalProperties: false
                    description: >-
                      Offset pagination metadata returned by collection
                      endpoints.
                  meta:
                    type: object
                    description: >-
                      Reserved metadata object. It is empty for the beta
                      contract unless an endpoint documents otherwise.
                required:
                  - data
                  - pagination
                  - meta
                additionalProperties: false
              examples:
                success:
                  summary: Toyota franchise dealers in California
                  value:
                    data:
                      - dealer_id: b62c6042-b3a0-4a58-bc5b-55966bd1c68c
                        name: Claremont Toyota
                        city: Claremont
                        state: CA
                        postal_code: '91711'
                        country: US
                        latitude: 34.080929
                        longitude: -117.72527
                        type: franchise
                        website: https://claremonttoyota.com
                        makes:
                          - Toyota
                        listing_count: 1656
                    pagination:
                      limit: 2
                      offset: 0
                      total: 130
                      next_offset: 2
                    meta: {}
          headers:
            X-Usage-Class:
              description: >-
                Metering class used for the request, for example listing_search,
                listing_search_enriched, facet_counts_historical,
                vehicle_detail_enriched, or dealer_lookup.
              schema:
                type: string
            X-Usage-Cost-Micros:
              description: >-
                Usage cost for this request in integer USD micros. 1000000
                micros equals 1 USD.
              schema:
                type: string
            X-Pricing-Version:
              description: Pricing catalog version UUID used to calculate the request cost.
              schema:
                type: string
            X-RateLimit-Tier:
              description: Effective account Usage Tier code used for rate limiting.
              schema:
                type: string
            X-RateLimit-Limit-10s:
              description: Maximum requests allowed in the 10-second burst window.
              schema:
                type: string
            X-RateLimit-Remaining-10s:
              description: >-
                Remaining requests in the current 10-second burst window after
                this request.
              schema:
                type: string
            X-RateLimit-Limit-60s:
              description: Maximum requests allowed in the 60-second sustained window.
              schema:
                type: string
            X-RateLimit-Remaining-60s:
              description: >-
                Remaining requests in the current 60-second sustained window
                after this request.
              schema:
                type: string
        '400':
          description: >-
            Invalid path or query parameter. Unknown query parameters are
            rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiValidationError'
        '401':
          description: Missing, malformed, or invalid Authorization bearer token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiAuthenticationError'
        '402':
          description: The API account is blocked by billing state or prepaid balance.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiBillingError'
        '403':
          description: The API key is valid but does not include the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiPermissionError'
        '429':
          description: >-
            The API account exceeded the public API rate limit. Retry-After is
            included when available.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiRateLimitError'
        '503':
          description: >-
            The platform could not price, meter, rate-limit, or fetch data for
            the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiPlatformError'
      security:
        - bearerAuth: []
components:
  schemas:
    PublicApiValidationError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiValidationError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
      required:
        - _tag
        - error
      additionalProperties: false
    PublicApiAuthenticationError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiAuthenticationError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
      required:
        - _tag
        - error
      additionalProperties: false
    PublicApiBillingError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiBillingError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
      required:
        - _tag
        - error
      additionalProperties: false
    PublicApiPermissionError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiPermissionError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
      required:
        - _tag
        - error
      additionalProperties: false
    PublicApiRateLimitError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiRateLimitError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
        retryAfter:
          type: number
      required:
        - _tag
        - error
      additionalProperties: false
    PublicApiPlatformError:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - PublicApiPlatformError
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            current_version:
              anyOf:
                - type: string
                - type: 'null'
            minimum_supported_version:
              anyOf:
                - type: string
                - type: 'null'
            reason_code:
              anyOf:
                - type: string
                - type: 'null'
            update_url:
              type: string
            update_command:
              type: string
          required:
            - type
            - code
            - message
          additionalProperties: false
      required:
        - _tag
        - error
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Send API keys as Authorization: Bearer <api_key>. Query-string API keys
        are rejected.

````