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

# Get the install status

> Whether the site's snippet works: when its first event arrived, when its last one did, and what ingest refused on the way. The figures are the Installation settings card's. A site with no first event, refused hosts or filtered events usually runs the snippet on a host the site does not count, or behind a proxy without its secret.



## OpenAPI

````yaml https://api.highseat.com/v1/openapi.json get /sites/{site}/install
openapi: 3.1.1
info:
  title: Highseat Stats API
  version: 1.0.0
  description: >-
    The same figures the dashboard shows, and the changes an admin makes there.
    A read key answers every GET route; a write key also answers the routes that
    change data.


    Authentication, write keys, idempotency, limits and the shape of every
    response: https://highseat.com/docs/api.
  license:
    name: Proprietary
servers:
  - url: https://api.highseat.com/v1
security:
  - bearerAuth: []
paths:
  /sites/{site}/install:
    get:
      tags:
        - Sites
      summary: Get the install status
      description: >-
        Whether the site's snippet works: when its first event arrived, when its
        last one did, and what ingest refused on the way. The figures are the
        Installation settings card's. A site with no first event, refused hosts
        or filtered events usually runs the snippet on a host the site does not
        count, or behind a proxy without its secret.
      operationId: getInstallStatus
      parameters:
        - name: site
          in: path
          required: true
          schema:
            type: string
            description: 'The site: its domain as registered (example.com), or its site id.'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      installed:
                        type: boolean
                        description: Whether the site has ever received an event.
                      firstEventAt:
                        anyOf:
                          - type: string
                            format: date-time
                            x-native-type: date
                          - type: 'null'
                        description: >-
                          ISO 8601 in UTC: when the first event arrived. Null
                          before it.
                      lastSeen:
                        anyOf:
                          - type: string
                            format: date-time
                            x-native-type: date
                          - type: 'null'
                        description: >-
                          ISO 8601 in UTC: when the last browsing event arrived.
                          Null before the first.
                      proxyEventAt:
                        anyOf:
                          - type: string
                            format: date-time
                            x-native-type: date
                          - type: 'null'
                        description: >-
                          ISO 8601 in UTC: when the first event arrived through
                          the site's proxy path. Null before it.
                      filtered:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                        description: >-
                          Events ingest left out of the stats in the last 24
                          hours: bots, spam, excluded IPs.
                      proxyHits:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                        description: >-
                          Events a proxy sent without the site's secret in the
                          last hour, which were refused. Above 0, the proxy's
                          secret is missing or wrong.
                      rejected:
                        anyOf:
                          - type: object
                            properties:
                              hostname:
                                type: string
                              hits:
                                type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                                description: >-
                                  Events refused from the host in the last 24
                                  hours.
                              isParent:
                                type: boolean
                                description: >-
                                  Whether the site's domain sits under the host,
                                  as www.example.com under example.com.
                              allowable:
                                type: boolean
                                description: >-
                                  Whether the site's extra hostnames would
                                  accept the host.
                            required:
                              - hostname
                              - hits
                              - isParent
                              - allowable
                          - type: 'null'
                        description: >-
                          The host that sent the most refused events in the last
                          24 hours: one the site does not count. Null when there
                          is none.
                      local:
                        anyOf:
                          - type: object
                            properties:
                              hostname:
                                type: string
                              hits:
                                type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                                description: >-
                                  Events refused from the host in the last 24
                                  hours.
                            required:
                              - hostname
                              - hits
                          - type: 'null'
                        description: >-
                          A local development host (localhost, 127.0.0.1) the
                          site refused events from. Null when there is none.
                    required:
                      - installed
                      - firstEventAt
                      - lastSeen
                      - proxyEventAt
                      - filtered
                      - proxyHits
                      - rejected
                      - local
                required:
                  - data
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '422':
          $ref: '#/components/responses/Error422'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
components:
  headers:
    RateLimit-Limit:
      description: Calls the key may make in the window.
      schema:
        type: integer
    RateLimit-Remaining:
      description: Calls left in the current window.
      schema:
        type: integer
    RateLimit-Reset:
      description: Seconds until the window reopens.
      schema:
        type: integer
    RateLimit-Policy:
      description: >-
        The quota and window, as the IETF draft writes it:
        "hourly";q=600;w=3600.
      schema:
        type: string
    RateLimit:
      description: >-
        The remaining budget, as the IETF draft writes it:
        "hourly";r=599;t=3540.
      schema:
        type: string
    Retry-After:
      description: Seconds to wait before the next call.
      schema:
        type: integer
  responses:
    Error400:
      description: 'The request is malformed: BAD_REQUEST, INVALID_FILTER or INVALID_CURSOR.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error401:
      description: 'No API key, or one that is not valid: UNAUTHORIZED.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error403:
      description: 'The workspace''s reports are closed until it pays: FORBIDDEN.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error404:
      description: 'The site, the funnel or the route does not exist: NOT_FOUND.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error422:
      description: 'The report ran into the time cap; try a shorter range: QUERY_TIMEOUT.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error429:
      description: >-
        The key has used its hourly budget (RATE_LIMITED), or its workspace
        already runs as many calls at once as it may
        (TOO_MANY_CONCURRENT_REQUESTS).
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error503:
      description: 'The server is busy; retry in a moment: SERVICE_UNAVAILABLE.'
      headers:
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: >-
                Stable and machine-readable: BAD_REQUEST, INVALID_FILTER,
                INVALID_CURSOR, UNAUTHORIZED, FORBIDDEN, KEY_READ_ONLY,
                NOT_FOUND, METHOD_NOT_ALLOWED, CONFLICT, IDEMPOTENCY_KEY_IN_USE,
                PAYLOAD_TOO_LARGE, IDEMPOTENCY_KEY_REUSED, QUERY_TIMEOUT,
                RATE_LIMITED, TOO_MANY_CONCURRENT_REQUESTS, SERVICE_UNAVAILABLE
                or INTERNAL_SERVER_ERROR. A write may answer a conflict code of
                its own (GOAL_EXISTS). Codes are added, never renamed.
            message:
              type: string
              description: What went wrong, written for a person.
            id:
              type: string
              description: >-
                On a conflict, the existing row's id, so a client can update it
                instead.
            issues:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: array
                    items:
                      anyOf:
                        - type: string
                        - type: number
                    description: >-
                      The parameter at fault, e.g. ['filter', 1] for the second
                      filter.
                  message:
                    type: string
                required:
                  - path
                  - message
              description: One entry per invalid parameter.
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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