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

# Get Session Detail

> Returns a single session with address, order, commission, and full cart progression timeline.
The session must belong to the authenticated client.
The path accepts either the session UUID returned by the analytics index endpoint or
the session token returned by session create.




## OpenAPI

````yaml /swagger.yaml get /analytics/sessions/{id}
openapi: 3.0.1
info:
  title: Hum API
  version: 1.7.0
  description: >
    The Hum API provides a comprehensive solution for discovering and comparing
    Internet service providers (ISPs) at specific addresses. 

    By leveraging AI-powered agents, the API normalizes addresses, identifies
    available providers, and returns detailed information 

    about service plans, pricing, and technology options. This makes it an ideal
    solution for businesses and applications that need 

    to help users find and compare Internet service options in their area.


    The API provides endpoints for creating and managing sessions, as well as
    verifying the connection to the API. Each session represents a service
    address lookup and its provider results.


    ## API Versioning

    This API uses semantic versioning. The current version is v1.6.0. For
    breaking changes, the major version will be incremented.


    ## Rate Limiting

    API requests are protected by a global limit of 100 requests per second per
    client IP. Analytics endpoints have an additional limit of 60 requests per
    minute per client IP. When a limit is exceeded, the API returns HTTP 429
    with a `Retry-After: 60` header. No other rate-limit headers are sent.


    ## Authentication

    All endpoints require Bearer token authentication. Tokens must be included
    in the Authorization header.


    ## Error Handling

    Callers should send `Accept: application/json`. Errors handled by API
    controllers use a common JSON envelope with `message`, `request_status`, and
    `request_id`; validation errors may also include `errors`. The API emits
    400, 401, 403, 404, 406, 410, 418, 422, 429, 500, and 503 statuses. Use the
    HTTP status code, not `request_status`, for control flow.


    The `request_id` is a best-effort support reference persisted with the API
    log. Request logging deliberately cannot break the request, so a logging
    failure can leave no matching row. Include the request timestamp when
    reporting an error so support can bound the lookup by date.


    Exceptions raised before an API controller handles the request, including
    unmatched routes and some middleware failures, may use Rails'
    `PublicExceptions` shape instead of the common envelope. `Accept:
    application/json` guarantees JSON for those responses; a wildcard or missing
    `Accept` header may receive HTML.


    One controller-level exception deliberately has a different body: when
    address validation is temporarily unavailable during session creation, HTTP
    503 returns `{ "address_validation_unavailable": true }` and a `Retry-After`
    header.
  termsOfService: https://www.letshum.com/terms-of-service
  contact:
    name: Hum API Support
    url: https://docs.letshum.com
    email: support@letshum.com
  license:
    name: Proprietary
    url: https://www.letshum.com/terms-of-service
servers:
  - url: https://api-sandbox.letshum.com
    description: Sandbox environment
  - url: https://api.letshum.com
    description: Production environment
security: []
paths:
  /analytics/sessions/{id}:
    summary: Partner Analytics - Session Detail
    description: |
      Single session with full cart timeline, order data, and commission info.
    get:
      tags:
        - Analytics
      summary: Get Session Detail
      description: >
        Returns a single session with address, order, commission, and full cart
        progression timeline.

        The session must belong to the authenticated client.

        The path accepts either the session UUID returned by the analytics index
        endpoint or

        the session token returned by session create.
      operationId: getAnalyticsSession
      parameters:
        - name: id
          in: path
          description: >-
            Session UUID returned by analytics index or session token returned
            by session create
          required: true
          schema:
            type: string
            example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
      responses:
        '200':
          description: Session detail with cart progression
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    $ref: '#/components/schemas/message'
                  request_status:
                    $ref: '#/components/schemas/request_status'
                  data:
                    $ref: '#/components/schemas/analytics_session_detail'
                  meta:
                    type: object
                    properties:
                      responded_at:
                        $ref: '#/components/schemas/responded_at'
                required:
                  - message
                  - request_status
                  - data
                  - meta
              examples:
                with_order:
                  summary: Session with order and cart progression
                  value:
                    message: Analytics session
                    request_status: ok
                    data:
                      id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                      created_at: '2026-03-01T12:00:00Z'
                      context: move_in
                      campaign_id: spring_promo_2026
                      address:
                        street1: 123 Main St
                        street2: Apt 4B
                        city: Detroit
                        state: MI
                        zip: '48201'
                      furthest_step: 6
                      order:
                        order_number: HUM-A1B2C3D4
                        status: complete
                        ordered_at: '2026-03-01T12:30:00Z'
                        installed: true
                        installed_at: '2026-03-05T14:00:00Z'
                        commission_cents: 5000
                      cart_progression:
                        - step: 1
                          step_name: plan_selection
                          timestamp: '2026-03-01T12:05:00Z'
                        - step: 2
                          step_name: internet_addons
                          timestamp: '2026-03-01T12:07:00Z'
                        - step: 6
                          step_name: customer_info
                          timestamp: '2026-03-01T12:15:00Z'
                    meta:
                      responded_at: '2026-03-12T15:00:00Z'
                without_order:
                  summary: Session without an order
                  value:
                    message: Analytics session
                    request_status: ok
                    data:
                      id: b2c3d4e5-f6a7-8901-bcde-f12345678901
                      created_at: '2026-03-01T11:00:00Z'
                      context: move_out
                      campaign_id: null
                      address:
                        street1: 456 Oak Ave
                        street2: null
                        city: Ann Arbor
                        state: MI
                        zip: '48104'
                      furthest_step: 3
                      order: null
                      cart_progression:
                        - step: 1
                          step_name: plan_selection
                          timestamp: '2026-03-01T11:05:00Z'
                        - step: 2
                          step_name: internet_addons
                          timestamp: '2026-03-01T11:07:00Z'
                        - step: 3
                          step_name: tv_selection
                          timestamp: '2026-03-01T11:10:00Z'
                    meta:
                      responded_at: '2026-03-12T15:00:00Z'
        '401':
          $ref: '#/components/responses/401_unauthorized'
        '404':
          $ref: '#/components/responses/404_not_found'
        '429':
          $ref: '#/components/responses/429_rate_limit'
        '500':
          $ref: '#/components/responses/500_internal_error'
      security:
        - bearerAuth: []
components:
  schemas:
    message:
      type: string
      example: What happened in the most recent request.
      description: >-
        A message returned by the API.  Includes a human-readable message about
        the status of the request.
    request_status:
      type: string
      enum:
        - ok
        - warning
        - error
      example: ok
      description: >
        An informational summary returned in API response bodies: `ok` for
        successful responses, `warning` for standard request errors, and `error`
        for endpoint-specific failures. Integrations must use the HTTP status
        code, not `request_status`, to determine whether a request succeeded.
    analytics_session_detail:
      type: object
      description: Full session detail with nested order and cart progression.
      properties:
        id:
          type: string
          format: uuid
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        created_at:
          type: string
          format: date-time
          example: '2026-03-01T12:00:00Z'
        context:
          type: string
          enum:
            - move_in
            - move_out
          example: move_in
          description: >-
            Traffic context for the session, set from the API token that created
            it. `move_in` is a resident setting up service at a home they are
            moving into. `move_out` is a resident leaving a partner's property.
            Note that the address on a move-out session is the resident's
            destination home, not the partner's building. Sessions created
            before this field was introduced read `move_in`.
        campaign_id:
          type: string
          nullable: true
          example: spring_promo_2026
        address:
          $ref: '#/components/schemas/analytics_address'
        furthest_step:
          type: integer
          nullable: true
          minimum: 1
          maximum: 8
          example: 6
          description: Highest checkout step reached (1-8). Null if no cart events.
        order:
          $ref: '#/components/schemas/analytics_order'
        cart_progression:
          type: array
          description: >-
            Ordered list of cart events for this session, sorted by timestamp
            ascending.
          items:
            $ref: '#/components/schemas/analytics_cart_event'
    responded_at:
      allOf:
        - $ref: '#/components/schemas/timestamp'
        - description: The timestamp when the response was generated.
    analytics_address:
      type: object
      description: Service address for the session.
      properties:
        street1:
          type: string
          nullable: true
          example: 123 Main St
        street2:
          type: string
          nullable: true
          example: Apt 4B
        city:
          type: string
          nullable: true
          example: Detroit
        state:
          type: string
          nullable: true
          example: MI
        zip:
          type: string
          nullable: true
          example: '48201'
    analytics_order:
      type: object
      nullable: true
      description: Order data associated with the session. Null if no order was placed.
      properties:
        order_number:
          type: string
          example: HUM-A1B2C3D4
          description: Unique order identifier.
        status:
          type: string
          enum:
            - draft
            - submitted
            - processing
            - confirmed
            - complete
            - cancelled
          example: complete
          description: Order status. Cancelled orders are final.
        ordered_at:
          type: string
          format: date-time
          example: '2026-03-01T12:30:00Z'
          description: Timestamp when the order was submitted.
        installed:
          type: boolean
          example: true
          description: >-
            Whether the service has been installed. Always false for cancelled
            orders.
        installed_at:
          type: string
          format: date-time
          nullable: true
          example: '2026-03-05T14:00:00Z'
          description: >-
            Timestamp when service was installed. Null if not yet installed.
            Null for cancelled orders.
        commission_cents:
          type: integer
          nullable: true
          example: 5000
          description: >-
            Locked commission amount in cents. Null if no commission recorded.
            Null for cancelled orders.
    analytics_cart_event:
      type: object
      description: A single cart progression event.
      properties:
        step:
          type: integer
          minimum: 1
          maximum: 8
          example: 1
          description: |
            Numeric step in the checkout flow:
            1 = plan_selection, 2 = internet_addons, 3 = tv_selection,
            4 = tv_addons, 5 = schedule_activation, 6 = customer_info,
            7 = order_summary, 8 = order_confirmation
        step_name:
          type: string
          enum:
            - plan_selection
            - internet_addons
            - tv_selection
            - tv_addons
            - schedule_activation
            - customer_info
            - order_summary
            - order_confirmation
          example: plan_selection
          description: Human-readable name of the checkout step.
        timestamp:
          type: string
          format: date-time
          example: '2026-03-01T12:05:00Z'
          description: When this cart event occurred.
    timestamp:
      type: string
      format: date-time
      example: '2024-09-20T23:13:31.179Z'
      description: A timestamp in ISO 8601 format.
    error_envelope:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/message'
        request_status:
          type: string
          enum:
            - warning
            - error
          description: >-
            Informational severity only; use the HTTP status code for control
            flow.
        request_id:
          $ref: '#/components/schemas/request_id'
        errors:
          $ref: '#/components/schemas/errors'
      required:
        - message
        - request_status
        - request_id
    request_id:
      type: string
      example: 3f1c3c07-785d-4c59-97dd-25cb38f670d7
      description: >
        Best-effort support reference for the request. Include the approximate
        request timestamp when reporting an error. A request logging failure can
        leave no matching API log row.
    errors:
      type: object
      description: >-
        Validation errors for session creation (e.g. missing/invalid address
        combination, street1, state, or zip).
      properties:
        base:
          type: array
          items:
            type: string
            example: >-
              Provide either (street1 and zip), (street1, city, and state), or
              (street1, city, and zip)
        street1:
          type: array
          items:
            type: string
            example: can't be blank
        city:
          type: array
          items:
            type: string
            example: can't be blank
        state:
          type: array
          items:
            type: string
            example: must be a valid state or US territory/commonwealth
        zip:
          type: array
          items:
            type: string
            example: must be in the form 12345 or 12345-1234
  responses:
    401_unauthorized:
      description: >-
        Unauthorized. Use the HTTP status code, not `request_status`, to detect
        the error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error_envelope'
          example:
            message: Unauthorized access
            request_status: warning
            request_id: 3f1c3c07-785d-4c59-97dd-25cb38f670d7
    404_not_found:
      description: Resource not found or does not belong to the authenticated account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error_envelope'
          example:
            message: Session not found.
            request_status: warning
            request_id: 3f1c3c07-785d-4c59-97dd-25cb38f670d7
    429_rate_limit:
      description: Rate Limit Exceeded
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error_envelope'
          example:
            message: Rate limit exceeded. Please try again later.
            request_status: warning
            request_id: 3f1c3c07-785d-4c59-97dd-25cb38f670d7
    500_internal_error:
      description: Unexpected internal error handled by an API controller.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error_envelope'
          example:
            message: Internal server error
            request_status: error
            request_id: 3f1c3c07-785d-4c59-97dd-25cb38f670d7
  headers:
    Retry-After:
      description: Number of seconds to wait before retrying the request.
      schema:
        type: integer
      example: 60
      required: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Bearer token authentication using API tokens.

        Include the token in the Authorization header as: `Authorization: Bearer
        <token>`


        Obtain tokens from your Hum representative or contact
        support@letshum.com. There is no self-serve API key dashboard.

````

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