> ## 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.

# Create New Session

> Creates a new session for processing a service address. This is typically the first endpoint called when starting 
a new address lookup flow.

## Request Flow
1. Submit service address components
2. Receive a session token
3. Use session token in the URL path for subsequent requests

## Processing
During session creation, Hum:
- Validates and normalizes the address
- Geocodes the location
- Identifies available service providers
- Gathers plan and pricing information

## Response Handling
- 201: Session created successfully with available provider results in `data`
- 422: Invalid address components, check error details
- 429: Rate limit exceeded; retry after the delay in `Retry-After`
- 503: Address validation is temporarily unavailable; retry after the delay in `Retry-After`

## Important Notes
- The session token is part of the URL path for all requests after creation
- The session token is required for all subsequent requests
- Sessions remain open until they are closed with DELETE
- Rate limits apply to all requests

## Example Usage
Provide address using one of: **(street1 and zip)**, **(street1, city, and state)**, or **(street1, city, and zip)**. State is optional when zip is present.
```json
POST /sessions
{
  "street1": "29090 Tiffany Drive E",
  "zip": "48034"
}
```
Or with city and state, or street+city+zip (no state):
```json
POST /sessions
{
  "street1": "29090 Tiffany Drive E",
  "city": "Southfield",
  "state": "MI",
  "zip": "48034"
}
```




## OpenAPI

````yaml /swagger.yaml post /sessions
openapi: 3.0.1
info:
  title: Hum API
  version: 1.6.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.
  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:
  /sessions:
    summary: Session Management
    description: >
      The session endpoint provides comprehensive session management
      capabilities for the Hum API. 

      A session represents a single service address lookup and maintains the
      state of various Hum AI agents working on that address.


      ## Session Lifecycle

      1. Create a session by POSTing service address details

      2. Use the session token to retrieve the session or its Internet services

      3. Close the session with DELETE when finished


      ## Important Notes

      - Sessions remain open until they are closed with DELETE

      - All requests require a valid bearer token

      - The session token is part of the URL path for all requests after
      creation
    post:
      tags:
        - Sessions
      summary: Create New Session
      description: >
        Creates a new session for processing a service address. This is
        typically the first endpoint called when starting 

        a new address lookup flow.


        ## Request Flow

        1. Submit service address components

        2. Receive a session token

        3. Use session token in the URL path for subsequent requests


        ## Processing

        During session creation, Hum:

        - Validates and normalizes the address

        - Geocodes the location

        - Identifies available service providers

        - Gathers plan and pricing information


        ## Response Handling

        - 201: Session created successfully with available provider results in
        `data`

        - 422: Invalid address components, check error details

        - 429: Rate limit exceeded; retry after the delay in `Retry-After`

        - 503: Address validation is temporarily unavailable; retry after the
        delay in `Retry-After`


        ## Important Notes

        - The session token is part of the URL path for all requests after
        creation

        - The session token is required for all subsequent requests

        - Sessions remain open until they are closed with DELETE

        - Rate limits apply to all requests


        ## Example Usage

        Provide address using one of: **(street1 and zip)**, **(street1, city,
        and state)**, or **(street1, city, and zip)**. State is optional when
        zip is present.

        ```json

        POST /sessions

        {
          "street1": "29090 Tiffany Drive E",
          "zip": "48034"
        }

        ```

        Or with city and state, or street+city+zip (no state):

        ```json

        POST /sessions

        {
          "street1": "29090 Tiffany Drive E",
          "city": "Southfield",
          "state": "MI",
          "zip": "48034"
        }

        ```
      operationId: createSession
      requestBody:
        required: true
        description: >
          Service address for the session. Provide one of: **street1 and zip**;
          **street1, city, and state**; or **street1, city, and zip**. State is
          optional when zip is present. street2, latitude, longitude, and
          campaign_id are optional.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/session_params'
            examples:
              street_and_zip:
                summary: Street and ZIP only
                description: >-
                  Minimum address using street and ZIP code (no city or state
                  required)
                value:
                  street1: 29090 Tiffany Drive E
                  zip: '48034'
              street_city_zip:
                summary: Street, city, and ZIP (no state)
                description: >-
                  Address with street, city, and zip; state optional when zip is
                  present
                value:
                  street1: 275 N Berkshire Rd
                  city: Bloomfield Hills
                  zip: '48302'
              basic_address:
                summary: Full address (street, city, state, zip)
                description: Standard address with city and state
                value:
                  street1: 29090 Tiffany Drive E
                  city: Southfield
                  state: MI
                  zip: '48034'
              address_with_unit:
                summary: Address with unit/apartment
                description: Address that includes a unit or apartment number
                value:
                  street1: 123 Main Street
                  street2: Apt 4B
                  city: Denver
                  state: CO
                  zip: '80202'
              with_campaign_tracking:
                summary: Address with campaign tracking
                description: Address lookup with campaign tracking for analytics
                value:
                  street1: 851 Ashwood Dr
                  city: Cookeville
                  state: TN
                  zip: '38501'
                  campaign_id: bucket_of_winning
              with_coordinates:
                summary: Address with latitude and longitude
                description: Address lookup with precise coordinates for enhanced geocoding
                value:
                  street1: 29090 Tiffany Drive E
                  city: Southfield
                  state: MI
                  zip: '48034'
                  latitude: 42.50189
                  longitude: -83.29528
      responses:
        '201':
          description: Successful session creation.
          headers:
            session_token:
              $ref: '#/components/headers/session_token'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    $ref: '#/components/schemas/message'
                  request_status:
                    $ref: '#/components/schemas/request_status'
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/provider_offering'
                  meta:
                    $ref: '#/components/schemas/meta'
                required:
                  - message
                  - request_status
                  - data
                  - meta
              examples:
                successful_creation:
                  summary: Successful session creation
                  description: Session created with multiple providers found
                  value:
                    message: Session created successfully.
                    request_status: ok
                    data:
                      - provider_id: '130317'
                        provider_name: Xfinity
                        provider_icon: null
                        provider_logo: https://cdn.example.com/providers/xfinity-logo.png
                        telephone: '+18332981431'
                        url: >-
                          https://affiliate.example.com/xfinity?session=SESSION_TOKEN
                        min_plan_price:
                          currency: USD
                          amount_cents: 4000
                        button_label: xfinity.com
                        provider_promo: {}
                        url_promo: {}
                        offerings:
                          - technology: Cable
                            max_download_speed: 1200
                            max_upload_speed: 35
                        product_catalog:
                          - category: internet
                            category_name: Internet Service
                            category_description: High-speed internet access plans
                            products:
                              - id: a5d1cba2-10f8-4469-8296-9b1b02f83516
                                sku: 130317-INT-CBL-02
                                name: 300 Mbps
                                category: internet
                                category_name: Internet Service
                                technology: cable
                                position: 2
                                select_type: radio
                                description: >-
                                  Great for everyday working, streaming, and
                                  learning. Price guaranteed for 60 months. No
                                  contract required.
                                download_speed: '300'
                                upload_speed: '100'
                                data_limit: Unlimited
                                channel_count: 0
                                streaming_apps: []
                                is_required_to_checkout: true
                                is_contract_required: false
                                is_modem_router_included: true
                                is_bundle_qualifier: false
                                bundle_discounts: {}
                                is_local_checkout: true
                                required_with_plans: []
                                included_with_plans: []
                                only_available_with_plans: []
                                initial_term_discount_months: 60
                                second_term_discount_months: null
                                hum_rank: 69
                                max_quantity: 1
                                product_promo: {}
                                info: 5-year price lock guarantee
                                pricing:
                                  extra_data_fee:
                                    amount_cents: 0
                                    currency: USD
                                  professional_installation_fee:
                                    amount_cents: 5000
                                    currency: USD
                                  self_installation_fee:
                                    amount_cents: 0
                                    currency: USD
                                  activation_fee:
                                    amount_cents: 0
                                    currency: USD
                                  initial_term_discount:
                                    amount_cents: 1500
                                    currency: USD
                                  second_term_discount:
                                    amount_cents: 0
                                    currency: USD
                                  third_term_discount:
                                    amount_cents: 0
                                    currency: USD
                                  autopay_discount:
                                    amount_cents: 0
                                    currency: USD
                                  paperless_billing_discount:
                                    amount_cents: 0
                                    currency: USD
                                  combined_autopay_paperless_discount:
                                    amount_cents: 1000
                                    currency: USD
                                  net_monthly_price:
                                    amount_cents: 5500
                                    currency: USD
                                  gross_monthly_fee:
                                    amount_cents: 8000
                                    currency: USD
                          - category: internet_add_on
                            category_name: Internet Add-On
                            category_description: Additional internet services
                            products:
                              - id: d5ff2d5a-2145-4c5e-95c5-05ed78fc473a
                                sku: 130317-INT-AO-01
                                name: Xfinity WiFi Gateway (modem + router)
                                category: internet_add_on
                                category_name: Internet Add-On
                                technology: not_applicable
                                position: 1
                                select_type: radio
                                description: >-
                                  The most reliable WiFi with our best
                                  equipment. Free Advanced Security. Parental
                                  controls.
                                download_speed: null
                                upload_speed: null
                                data_limit: 0 GB
                                channel_count: 0
                                streaming_apps: []
                                is_required_to_checkout: false
                                is_contract_required: false
                                is_modem_router_included: false
                                is_bundle_qualifier: false
                                bundle_discounts: {}
                                is_local_checkout: true
                                required_with_plans: []
                                included_with_plans:
                                  - 130317-INT-CBL-01
                                  - 130317-INT-CBL-02
                                  - 130317-INT-CBL-03
                                only_available_with_plans:
                                  - 130317-INT-CBL-01
                                  - 130317-INT-CBL-02
                                  - 130317-INT-CBL-03
                                initial_term_discount_months: 0
                                second_term_discount_months: null
                                hum_rank: null
                                max_quantity: 1
                                product_promo: {}
                                info: ''
                                pricing:
                                  extra_data_fee:
                                    amount_cents: 0
                                    currency: USD
                                  professional_installation_fee:
                                    amount_cents: 0
                                    currency: USD
                                  self_installation_fee:
                                    amount_cents: 0
                                    currency: USD
                                  activation_fee:
                                    amount_cents: 0
                                    currency: USD
                                  initial_term_discount:
                                    amount_cents: 0
                                    currency: USD
                                  second_term_discount:
                                    amount_cents: 0
                                    currency: USD
                                  third_term_discount:
                                    amount_cents: 0
                                    currency: USD
                                  autopay_discount:
                                    amount_cents: 0
                                    currency: USD
                                  paperless_billing_discount:
                                    amount_cents: 0
                                    currency: USD
                                  combined_autopay_paperless_discount:
                                    amount_cents: 0
                                    currency: USD
                                  net_monthly_price:
                                    amount_cents: 0
                                    currency: USD
                                  gross_monthly_fee:
                                    amount_cents: 0
                                    currency: USD
                    meta:
                      session_token: SESSION_TOKEN_PLACEHOLDER
                      session_status: open
                      session_params:
                        street1: 29090 Tiffany Dr E
                        street2: Apt 4B
                        city: Southfield
                        state: MI
                        zip: '48034'
                        latitude: '42.50189'
                        longitude: '-83.29528'
                        campaign_id: null
                      service_address: 29090 Tiffany Dr E Apt 4B, Southfield, MI 48034-4540
                      mdu: true
                      agent_status:
                        geocoding: matched
                        internet: matched
                        checkout: pending
                      created_at: '2026-07-13T12:26:15.618-04:00'
                      updated_at: '2026-07-13T12:26:15.618-04:00'
                      responded_at: '2026-07-13T16:26:16.278Z'
                      hum_data_set: '26011015'
        '400':
          $ref: '#/components/responses/400_bad_request'
        '401':
          $ref: '#/components/responses/401_unauthorized'
        '415':
          $ref: '#/components/responses/415_unsupported_media_type'
        '422':
          $ref: '#/components/responses/422_unprocessable'
        '429':
          $ref: '#/components/responses/429_rate_limit'
        '500':
          $ref: '#/components/responses/500_internal_error'
        '503':
          $ref: '#/components/responses/503_address_validation_unavailable'
      security:
        - bearerAuth: []
components:
  schemas:
    session_params:
      type: object
      description: >
        Service address. Provide one of: **street1** and **zip**; **street1**,
        **city**, and **state**; or **street1**, **city**, and **zip**. State is
        optional when zip is present.
      properties:
        street1:
          $ref: '#/components/schemas/street1'
        street2:
          $ref: '#/components/schemas/street2'
        city:
          $ref: '#/components/schemas/city'
        state:
          $ref: '#/components/schemas/state'
        zip:
          $ref: '#/components/schemas/zip'
        latitude:
          $ref: '#/components/schemas/latitude'
        longitude:
          $ref: '#/components/schemas/longitude'
        campaign_id:
          $ref: '#/components/schemas/campaign_id'
      required:
        - street1
    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.
    provider_offering:
      type: object
      properties:
        provider_id:
          type: string
          example: '130317'
          description: FCC provider identifier
        provider_name:
          $ref: '#/components/schemas/internet_provider_name'
        telephone:
          $ref: '#/components/schemas/telephone'
        provider_icon:
          type: string
          format: uri
          nullable: true
          description: URL for the provider icon image
        provider_logo:
          $ref: '#/components/schemas/provider_logo'
        url:
          type: string
          format: uri
          example: https://provider.example.com/register?utm_source=Hum
          description: URL for accessing the provider website through Hum's tracking system
        button_label:
          type: string
          example: Get Started
          description: The text to display on the provider's call-to-action button
        min_plan_price:
          $ref: '#/components/schemas/money'
        provider_promo:
          type: object
          nullable: true
          description: Provider-level promotional information
          properties:
            promo_text:
              type: string
              nullable: true
              example: $50 off your first month!
              description: Promotional text from the provider
            promo_logo:
              type: string
              nullable: true
              example: sale-badge
              description: Promotional logo identifier
            promo_logo_url:
              type: string
              format: uri
              nullable: true
              example: https://cdn.letshum.com/promo_icons/banknotes.svg
              description: URL for the promotional icon image
        url_promo:
          type: object
          nullable: true
          description: URL/buyflow-specific promotional information
          properties:
            promo_text:
              type: string
              nullable: true
              example: Limited time fiber offer!
              description: Promotional text specific to this URL/technology
            promo_logo:
              type: string
              nullable: true
              example: fiber-special
              description: Promotional logo identifier
            promo_logo_url:
              type: string
              format: uri
              nullable: true
              example: https://cdn.letshum.com/promo_icons/fiber-deal.svg
              description: URL for the promotional icon image
        offerings:
          type: array
          items:
            type: object
            properties:
              technology:
                $ref: '#/components/schemas/internet_technology'
              max_download_speed:
                type: integer
                minimum: 0
                example: 1000
                description: The advertised maximum download speed in Mbps.
              max_upload_speed:
                type: integer
                minimum: 0
                example: 1000
                description: The advertised maximum upload speed in Mbps.
            required:
              - technology
              - max_download_speed
              - max_upload_speed
        product_catalog:
          type: array
          items:
            type: object
            properties:
              category:
                type: string
                enum:
                  - internet
                  - internet_add_on
                  - mobile
                  - television
                  - television_add_on
                  - telephone
                description: Category identifier
                example: internet
              category_name:
                type: string
                description: Human-readable category name
                example: Internet Service
              category_description:
                type: string
                description: Description of the category
                example: High-speed internet access plans
              products:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      format: uuid
                      description: Unique product identifier
                      example: 8083bfe8-a53f-49eb-b0e8-a77d3e9e7577
                    sku:
                      type: string
                      description: Product SKU
                      example: 130235-INT-CBL-01
                    name:
                      type: string
                      description: Product name
                      example: Internet Advantage
                    category:
                      type: string
                      description: Product category
                      example: internet
                    category_name:
                      type: string
                      description: Human-readable category name
                      example: Internet Service
                    technology:
                      type: string
                      enum:
                        - cable
                        - fiber
                        - dsl
                        - satellite
                        - wireless
                        - not_applicable
                      description: Technology used for this product
                      example: cable
                    position:
                      type: integer
                      minimum: 1
                      description: Display position within category
                      example: 1
                    select_type:
                      type: string
                      enum:
                        - radio
                        - checkbox
                      description: How this product should be displayed in UI
                      example: radio
                    description:
                      type: string
                      description: Product description
                      example: >-
                        Boosted Internet for users looking to stream and share
                        content quickly.
                    download_speed:
                      type: string
                      nullable: true
                      description: >-
                        Download speed in Mbps. Single value (e.g., '400') or
                        hyphen-delimited range (e.g., '50-100')
                      example: 50-100
                    upload_speed:
                      type: string
                      nullable: true
                      description: >-
                        Upload speed in Mbps. Single value (e.g., '169') or
                        hyphen-delimited range (e.g., '10-25')
                      example: 10-25
                    data_limit:
                      type: string
                      description: >-
                        Data limit display - either GB amount (e.g., "50 GB") or
                        "Unlimited"
                      example: Unlimited
                    channel_count:
                      type: integer
                      minimum: 0
                      description: Number of TV channels (for TV products)
                      example: 0
                    streaming_apps:
                      type: array
                      items:
                        type: string
                      description: Included streaming apps
                      example:
                        - Disney+ Basic
                        - ESPN+
                    is_required_to_checkout:
                      type: boolean
                      description: Whether this product is required for checkout
                      example: true
                    is_contract_required:
                      type: boolean
                      description: Whether a contract is required for this product
                      example: false
                    is_modem_router_included:
                      type: boolean
                      description: Whether modem/router is included with this product
                      example: false
                    is_bundle_qualifier:
                      type: boolean
                      nullable: true
                      description: Whether this product qualifies for bundle discounts
                      example: null
                    bundle_discounts:
                      type: object
                      description: Bundle discount information
                      example: {}
                    is_local_checkout:
                      type: boolean
                      description: Whether checkout is available locally
                      example: true
                    required_with_plans:
                      type: array
                      items:
                        type: string
                      description: Plans that this product is required with
                      example: []
                    included_with_plans:
                      type: array
                      items:
                        type: string
                      description: Plans that include this product
                      example: []
                    only_available_with_plans:
                      type: array
                      items:
                        type: string
                      description: Plans that this product is only available with
                      example: []
                    initial_term_discount_months:
                      type: integer
                      minimum: 0
                      description: Number of months for initial term discount
                      example: 12
                    second_term_discount_months:
                      type: integer
                      minimum: 0
                      nullable: true
                      description: Number of months for second term discount
                      example: null
                    hum_rank:
                      type: integer
                      minimum: 0
                      maximum: 100
                      nullable: true
                      description: >-
                        Hum rank score for this product (0-100, higher is
                        better)
                      example: 85
                    max_quantity:
                      type: integer
                      minimum: 1
                      description: Maximum quantity allowed for this product
                      example: 1
                    product_promo:
                      type: object
                      description: Product-level promotional information
                      properties:
                        promo_text:
                          type: string
                          nullable: true
                          description: Promotional text for this product
                          example: $50 off your first month!
                        promo_logo_url:
                          type: string
                          format: uri
                          nullable: true
                          description: URL for the promotional icon image
                          example: https://cdn.letshum.com/promo_icons/sale-badge.svg
                      example: {}
                    info:
                      type: string
                      description: Additional product information
                      example: 5-year price lock guarantee
                    pricing:
                      type: object
                      properties:
                        extra_data_fee:
                          $ref: '#/components/schemas/money'
                        professional_installation_fee:
                          $ref: '#/components/schemas/money'
                        self_installation_fee:
                          $ref: '#/components/schemas/money'
                        activation_fee:
                          $ref: '#/components/schemas/money'
                        initial_term_discount:
                          $ref: '#/components/schemas/money'
                        second_term_discount:
                          $ref: '#/components/schemas/money'
                        third_term_discount:
                          $ref: '#/components/schemas/money'
                        autopay_discount:
                          $ref: '#/components/schemas/money'
                        paperless_billing_discount:
                          $ref: '#/components/schemas/money'
                        combined_autopay_paperless_discount:
                          $ref: '#/components/schemas/money'
                        net_monthly_price:
                          $ref: '#/components/schemas/money'
                        gross_monthly_fee:
                          $ref: '#/components/schemas/money'
                      required:
                        - extra_data_fee
                        - professional_installation_fee
                        - self_installation_fee
                        - activation_fee
                        - initial_term_discount
                        - second_term_discount
                        - third_term_discount
                        - autopay_discount
                        - paperless_billing_discount
                        - combined_autopay_paperless_discount
                        - net_monthly_price
                        - gross_monthly_fee
                      description: Detailed pricing breakdown for this product
                  required:
                    - id
                    - sku
                    - name
                    - category
                    - category_name
                    - technology
                    - position
                    - description
                    - select_type
                    - download_speed
                    - upload_speed
                    - data_limit
                    - channel_count
                    - streaming_apps
                    - is_required_to_checkout
                    - is_contract_required
                    - is_modem_router_included
                    - is_bundle_qualifier
                    - bundle_discounts
                    - is_local_checkout
                    - required_with_plans
                    - included_with_plans
                    - only_available_with_plans
                    - initial_term_discount_months
                    - second_term_discount_months
                    - hum_rank
                    - max_quantity
                    - product_promo
                    - info
                    - pricing
            required:
              - category
              - category_name
              - category_description
              - products
          description: >-
            Array of product categories, each containing detailed product
            offerings from this provider
      required:
        - provider_id
        - provider_name
        - provider_icon
        - provider_logo
        - telephone
        - url
        - button_label
        - min_plan_price
        - provider_promo
        - url_promo
        - offerings
        - product_catalog
    meta:
      type: object
      properties:
        session_token:
          $ref: '#/components/schemas/session_token'
        session_status:
          $ref: '#/components/schemas/session_status'
        agent_status:
          $ref: '#/components/schemas/agent_status'
        session_params:
          $ref: '#/components/schemas/normalized_session_params'
        service_address:
          $ref: '#/components/schemas/service_address'
        mdu:
          type: boolean
          example: false
          description: Whether the normalized service address is a multi-dwelling unit.
        created_at:
          $ref: '#/components/schemas/created_at'
        updated_at:
          $ref: '#/components/schemas/updated_at'
        responded_at:
          $ref: '#/components/schemas/responded_at'
        hum_data_set:
          $ref: '#/components/schemas/hum_data_set'
      required:
        - session_token
        - session_status
        - session_params
        - service_address
        - mdu
        - agent_status
        - created_at
        - updated_at
        - responded_at
        - hum_data_set
      description: >-
        Session metadata, including normalized input values, formatted service
        address, session status, and the Hum data set used for the response.
    street1:
      type: string
      minLength: 1
      maxLength: 100
      example: 29090 Tiffany Drive E
      description: The street address of the service location.
    street2:
      type: string
      minLength: 1
      maxLength: 50
      example: A2
      description: The unit, apartment, or suite number of the service location.
    city:
      type: string
      minLength: 1
      maxLength: 50
      example: Southfield
      description: >-
        The city of the service location. Required when using the (street1,
        city, state) combination; optional when providing street1 and zip.
    state:
      type: string
      pattern: ^[A-Z]{2}$
      enum:
        - AL
        - AK
        - AZ
        - AR
        - CA
        - CO
        - CT
        - DE
        - FL
        - GA
        - HI
        - ID
        - IL
        - IN
        - IA
        - KS
        - KY
        - LA
        - ME
        - MD
        - MA
        - MI
        - MN
        - MS
        - MO
        - MT
        - NE
        - NV
        - NH
        - NJ
        - NM
        - NY
        - NC
        - ND
        - OH
        - OK
        - OR
        - PA
        - PR
        - RI
        - SC
        - SD
        - TN
        - TX
        - UT
        - VT
        - VA
        - WA
        - WV
        - WI
        - WY
      example: MI
      description: >-
        The two-letter state abbreviation. Required when using the (street1,
        city, state) combination; optional when providing street1 and zip.
    zip:
      type: string
      pattern: ^\d{5}(-\d{4})?$
      example: 48034
      description: >-
        The ZIP code in 12345 or 12345-6789 format. Required when using the
        (street1, zip) combination; optional when providing street1, city, and
        state.
    latitude:
      type: number
      format: float
      example: 42.501721339274
      description: The latitude of the service address.
    longitude:
      type: number
      format: float
      example: -83.286263465881
      description: The longitude of the service address.
    campaign_id:
      type: string
      minLength: 1
      maxLength: 100
      example: 1iYyMxsnTy87tFOvukTi7V
      description: >-
        A unique identifier for the campaign. This is used to track the source
        of the session in your internal system.
    internet_provider_name:
      type: string
      example: Rocket Fiber
      description: The name of the Internet service provider.
    telephone:
      type: string
      nullable: true
      example: '+18332981433'
      description: The telephone number associated with the record.
    provider_logo:
      type: string
      format: uri
      nullable: true
      example: https://harmony.letshum.com/images/providers/rocketfiber.png
      description: The logo of the service provider.
    money:
      type: object
      properties:
        amount_cents:
          type: integer
          example: 4999
          description: The price amount in whole cents. For example, $49.99 would be 4999.
        currency:
          type: string
          example: USD
          description: >-
            The currency used for the price. USD, for example, would be US
            Dollars. CDN would be Canadian Dollars.
      required:
        - amount_cents
        - currency
    internet_technology:
      type: string
      enum:
        - Fiber
        - Cable
        - DSL
        - Satellite
        - Wireless
        - Other
      example: Fiber
      description: The technology used to deliver the service.
    session_token:
      type: string
      example: XqCmeTVgYXrbWrZFZEymkD
      description: >-
        The session token provided by the Hum API. Used to connect the response
        to the session in the client system.
    session_status:
      type: string
      enum:
        - open
        - closed
      example: open
      description: The status of the session.
    agent_status:
      type: object
      properties:
        geocoding:
          type: string
          enum:
            - pending
            - matched
            - multiple
            - failed
          example: matched
          description: >-
            The status of the geocoding agent.  Pending: The agent has not yet
            processed the address. Matched: The agent has found a single match
            for the address. Multiple: The agent has found multiple matches for
            the address. Failed: The agent was unable to match the address.
        internet:
          type: string
          enum:
            - pending
            - matched
            - failed
          example: matched
          description: >-
            The status of the Internet service availability agent. Pending: The
            agent has not yet processed the address. Matched: The agent has
            found Internet service providers for the address. Failed: The agent
            was unable to find Internet service providers for the address.
        checkout:
          type: string
          enum:
            - pending
          example: pending
          description: >-
            The status of the checkout agent. Pending: The agent has not yet
            begun processing a checkout for service. 
    normalized_session_params:
      type: object
      description: >-
        Address and campaign values after normalization. Coordinate values are
        serialized as strings in response metadata.
      properties:
        street1:
          type: string
          example: 29090 Tiffany Dr E
        street2:
          type: string
          nullable: true
          example: null
        city:
          type: string
          example: Southfield
        state:
          type: string
          example: MI
        zip:
          type: string
          example: '48034'
        latitude:
          type: string
          nullable: true
          example: '42.50189'
        longitude:
          type: string
          nullable: true
          example: '-83.29528'
        campaign_id:
          type: string
          nullable: true
          example: null
      required:
        - street1
        - street2
        - city
        - state
        - zip
        - latitude
        - longitude
        - campaign_id
    service_address:
      type: string
      example: 1420 Washington Blvd, Detroit, MI 48201
      description: The complete service address as a single string.
    created_at:
      allOf:
        - $ref: '#/components/schemas/timestamp'
        - description: The timestamp when the session was created.
    updated_at:
      allOf:
        - $ref: '#/components/schemas/timestamp'
        - description: The timestamp when the session was last updated.
    responded_at:
      allOf:
        - $ref: '#/components/schemas/timestamp'
        - description: The timestamp when the response was generated.
    hum_data_set:
      type: string
      pattern: ^\d+$
      example: '25041808'
      description: >-
        The version of the Hum data set used to generate the response. This
        version may change as the data set is updated.
    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
    timestamp:
      type: string
      format: date-time
      example: '2024-09-20T23:13:31.179Z'
      description: A timestamp in ISO 8601 format.
  headers:
    session_token:
      description: >-
        The session token provided by the Hum API. Used to connect the response
        to the session in the client system.
      required: true
      schema:
        type: string
      example: XqCmeTVgYXrbWrZFZEymkD
    Retry-After:
      description: Number of seconds to wait before retrying the request.
      schema:
        type: integer
      example: 60
      required: true
  responses:
    400_bad_request:
      description: >-
        Bad request. This includes an invalid session token. Use the HTTP status
        code, not `request_status`, to detect the error.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Invalid session token.
              request_status:
                type: string
                enum:
                  - warning
                example: warning
            required:
              - message
              - request_status
          examples:
            invalid_parameters:
              summary: Invalid session parameters
              value:
                message: Invalid parameters sent to session.
                request_status: warning
            invalid_session_token:
              summary: Invalid session token
              value:
                message: Invalid session token.
                request_status: warning
    401_unauthorized:
      description: >-
        Unauthorized. Use the HTTP status code, not `request_status`, to detect
        the error.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthorized access
              request_status:
                type: string
                enum:
                  - warning
                example: warning
            required:
              - message
              - request_status
    415_unsupported_media_type:
      description: The request was rejected because its content type is unsupported.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: Request rejected
              message:
                type: string
                example: The request was rejected due to security concerns
              status:
                type: integer
                enum:
                  - 415
                example: 415
            required:
              - error
              - message
              - status
    422_unprocessable:
      description: >-
        Session validation failed. Use the HTTP status code, not
        `request_status`, to detect the error.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                $ref: '#/components/schemas/message'
              request_status:
                type: string
                enum:
                  - warning
                example: warning
              errors:
                $ref: '#/components/schemas/errors'
            required:
              - message
              - request_status
              - errors
          example:
            message: Session could not be created.
            request_status: warning
            errors:
              base:
                - >-
                  Provide either (street1 and zip), (street1, city, and state),
                  or (street1, city, and zip)
    429_rate_limit:
      description: Rate Limit Exceeded
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: Too many requests
              message:
                type: string
                example: Rate limit exceeded. Please try again later.
              status:
                type: integer
                enum:
                  - 429
                example: 429
            required:
              - error
              - message
              - status
    500_internal_error:
      description: >-
        Internal Server Error. The response body is not guaranteed to use the
        standard API envelope.
      content:
        application/json:
          schema:
            oneOf:
              - type: object
                properties:
                  status:
                    type: integer
                    example: 500
                  error:
                    type: string
                    example: Internal Server Error
                required:
                  - status
                  - error
              - type: object
                properties:
                  message:
                    type: string
                    example: Internal server error
                required:
                  - message
    503_address_validation_unavailable:
      description: >-
        Address validation is temporarily unavailable. Retry after the delay
        specified by `Retry-After`.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            type: object
            properties:
              address_validation_unavailable:
                type: boolean
                enum:
                  - true
                example: true
            required:
              - address_validation_unavailable
  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.

````