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

# ICP penetration

> Share of your ICP accounts (under the given ICP / account-list filters) that showed at least one buying signal this period, vs the previous equivalent period as a percentage-point delta.



## OpenAPI

````yaml https://app.stairoids.com/api/docs/public post /public/v1/funnel/icp-penetration
openapi: 3.0.1
info:
  title: Stairoids API
  description: The Next Generation API
  version: '1.0'
servers:
  - url: https://app.stairoids.com/api
    description: Stairoids public API
security:
  - ApiKeyAuth: []
tags:
  - name: Public API - Funnel
    description: Funnel stages, distribution, and pipeline trend metrics.
  - name: Public API - Attribution
    description: Traffic sources, campaigns, and the accounts they drove.
  - name: Public API - Lead Scores
    description: Signal details and per-person scores.
  - name: Public API - Activity
    description: Per-person and general (cross-company) signal feeds.
  - name: Public API - LinkedIn Ads
    description: LinkedIn ad campaigns, posts, likes, and company engagement.
  - name: Public API - Employees
    description: Employees (people) at a company, and employee labels.
  - name: Public API - Reference
    description: Your users, ICPs, personas, labels, account lists, and signal categories.
  - name: Public API - Companies
    description: Search, look up, and read activity for scored companies.
  - name: Public API - Opportunities
    description: Your best outreach opportunities right now.
paths:
  /public/v1/funnel/icp-penetration:
    post:
      tags:
        - Public API - Funnel
      summary: ICP penetration
      description: >-
        Share of your ICP accounts (under the given ICP / account-list filters)
        that showed at least one buying signal this period, vs the previous
        equivalent period as a percentage-point delta.
      operationId: getPublicIcpPenetration
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicFunnelFilterRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicIcpPenetrationDTO'
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                oneOf:
                  - $ref: '#/components/schemas/CustomError'
                  - $ref: '#/components/schemas/CommunityError'
        '401':
          description: Unauthorized
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CommunityError'
        '402':
          description: Payment Required
          content:
            '*/*':
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InsufficientCreditsError'
                  - $ref: '#/components/schemas/PlanLimitError'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                oneOf:
                  - $ref: '#/components/schemas/CommunityError'
                  - $ref: '#/components/schemas/AgencyLimitError'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CommunityError'
        '409':
          description: Conflict
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CommunityError'
        '429':
          description: Too Many Requests
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CommunityError'
        '500':
          description: Internal Server Error
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CustomError'
components:
  schemas:
    PublicFunnelFilterRequest:
      type: object
      properties:
        startDate:
          type: integer
          description: >-
            Window start, epoch millis. Omit both startDate and endDate for the
            default recent window.
          format: int64
          example: 1717200000000
        endDate:
          type: integer
          description: Window end, epoch millis.
          format: int64
          example: 1719792000000
        icpIds:
          type: array
          description: Restrict to these ICP ids. Null or empty = all ICPs.
          items:
            type: integer
            description: Restrict to these ICP ids. Null or empty = all ICPs.
            format: int64
        accountListIds:
          type: array
          description: Restrict to these account-list ids. Null or empty = all lists.
          items:
            type: integer
            description: Restrict to these account-list ids. Null or empty = all lists.
            format: int64
      description: Time-window and segment filter for analytics endpoints.
    PublicIcpPenetrationDTO:
      type: object
      properties:
        icpCompanies:
          type: integer
          description: >-
            ICP accounts admitted by the ICP / account-list filters (current
            membership; the denominator of both periods).
          format: int32
          example: 1675
        engagedCompanies:
          type: integer
          description: ICP accounts with at least one buying signal in the current period.
          format: int32
          example: 310
        buyingSignals:
          type: integer
          description: Distinct buying signals on those accounts in the current period.
          format: int32
          example: 1240
        penetration:
          type: number
          description: >-
            engagedCompanies / icpCompanies * 100 for the current period; 0.0
            when there are no ICP accounts.
          format: double
          example: 18.5
        previousEngagedCompanies:
          type: integer
          description: >-
            ICP accounts with at least one buying signal in the previous period
            of equal length.
          format: int32
          example: 280
        previousBuyingSignals:
          type: integer
          description: Distinct buying signals in the previous period.
          format: int32
          example: 980
        previousPenetration:
          type: number
          description: Penetration of the previous period.
          format: double
          example: 16.7
        percentagePointChange:
          type: number
          description: >-
            penetration - previousPenetration, in percentage points (not a
            relative change).
          format: double
          example: 1.8
      description: >-
        ICP penetration: the share of your ICP accounts that showed at least one
        buying signal in the period, vs the previous equivalent period.
    CustomError:
      type: object
      properties:
        errorType:
          type: string
          enum:
            - EMAIL_ALREADY_EXISTS
            - INVALID_EMAIL
            - UNAUTHORIZED
            - UNEXPECTED_ERROR
            - WRONG_PASSWORD
            - STILL_GENERATING
            - MISSING_HEADERS
            - USER_NOT_FOUND
            - WEAK_PASSWORD
            - VALIDATION_ERROR
            - NOT_FOUND
            - PLAN_LIMIT_EXCEEDED
            - INSUFFICIENT_CREDITS
            - FEATURE_NOT_AVAILABLE
            - PAYMENT_ERROR
            - ACTIVE_SUBSCRIPTION_EXISTS
            - AGENCY_LIMIT_EXCEEDED
            - PAYMENT_METHOD_REQUIRED
            - BILLED_BY_AGENCY
            - PAYMENT_AUTHENTICATION_REQUIRED
            - PLAN_BELOW_RECOMMENDED
            - PLAN_NOT_ALLOWED
            - TRIAL_NOT_ELIGIBLE
            - INVALID_2FA_CODE
            - EXPIRED_2FA_CHALLENGE
            - TURNSTILE_FAILED
            - TAKEOVER_NOT_AVAILABLE
            - TAKEOVER_BLOCKED_OPEN_INVOICE
            - UNLINK_BLOCKED_ACTIVE_BILLING
    CommunityError:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    InsufficientCreditsError:
      type: object
      properties:
        errorType:
          type: string
          enum:
            - EMAIL_ALREADY_EXISTS
            - INVALID_EMAIL
            - UNAUTHORIZED
            - UNEXPECTED_ERROR
            - WRONG_PASSWORD
            - STILL_GENERATING
            - MISSING_HEADERS
            - USER_NOT_FOUND
            - WEAK_PASSWORD
            - VALIDATION_ERROR
            - NOT_FOUND
            - PLAN_LIMIT_EXCEEDED
            - INSUFFICIENT_CREDITS
            - FEATURE_NOT_AVAILABLE
            - PAYMENT_ERROR
            - ACTIVE_SUBSCRIPTION_EXISTS
            - AGENCY_LIMIT_EXCEEDED
            - PAYMENT_METHOD_REQUIRED
            - BILLED_BY_AGENCY
            - PAYMENT_AUTHENTICATION_REQUIRED
            - PLAN_BELOW_RECOMMENDED
            - PLAN_NOT_ALLOWED
            - TRIAL_NOT_ELIGIBLE
            - INVALID_2FA_CODE
            - EXPIRED_2FA_CHALLENGE
            - TURNSTILE_FAILED
            - TAKEOVER_NOT_AVAILABLE
            - TAKEOVER_BLOCKED_OPEN_INVOICE
            - UNLINK_BLOCKED_ACTIVE_BILLING
        required:
          type: integer
          format: int32
        available:
          type: integer
          format: int32
        message:
          type: string
    PlanLimitError:
      type: object
      properties:
        errorType:
          type: string
          enum:
            - EMAIL_ALREADY_EXISTS
            - INVALID_EMAIL
            - UNAUTHORIZED
            - UNEXPECTED_ERROR
            - WRONG_PASSWORD
            - STILL_GENERATING
            - MISSING_HEADERS
            - USER_NOT_FOUND
            - WEAK_PASSWORD
            - VALIDATION_ERROR
            - NOT_FOUND
            - PLAN_LIMIT_EXCEEDED
            - INSUFFICIENT_CREDITS
            - FEATURE_NOT_AVAILABLE
            - PAYMENT_ERROR
            - ACTIVE_SUBSCRIPTION_EXISTS
            - AGENCY_LIMIT_EXCEEDED
            - PAYMENT_METHOD_REQUIRED
            - BILLED_BY_AGENCY
            - PAYMENT_AUTHENTICATION_REQUIRED
            - PLAN_BELOW_RECOMMENDED
            - PLAN_NOT_ALLOWED
            - TRIAL_NOT_ELIGIBLE
            - INVALID_2FA_CODE
            - EXPIRED_2FA_CHALLENGE
            - TURNSTILE_FAILED
            - TAKEOVER_NOT_AVAILABLE
            - TAKEOVER_BLOCKED_OPEN_INVOICE
            - UNLINK_BLOCKED_ACTIVE_BILLING
        category:
          type: string
        currentUsage:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        addOnSlug:
          type: string
        planSlug:
          type: string
        addOnPriceMonthly:
          type: integer
          format: int32
        upgradePlanSlug:
          type: string
        upgradePlanName:
          type: string
        upgradePlanPriceMonthly:
          type: integer
          format: int32
    AgencyLimitError:
      type: object
      properties:
        errorType:
          type: string
          enum:
            - EMAIL_ALREADY_EXISTS
            - INVALID_EMAIL
            - UNAUTHORIZED
            - UNEXPECTED_ERROR
            - WRONG_PASSWORD
            - STILL_GENERATING
            - MISSING_HEADERS
            - USER_NOT_FOUND
            - WEAK_PASSWORD
            - VALIDATION_ERROR
            - NOT_FOUND
            - PLAN_LIMIT_EXCEEDED
            - INSUFFICIENT_CREDITS
            - FEATURE_NOT_AVAILABLE
            - PAYMENT_ERROR
            - ACTIVE_SUBSCRIPTION_EXISTS
            - AGENCY_LIMIT_EXCEEDED
            - PAYMENT_METHOD_REQUIRED
            - BILLED_BY_AGENCY
            - PAYMENT_AUTHENTICATION_REQUIRED
            - PLAN_BELOW_RECOMMENDED
            - PLAN_NOT_ALLOWED
            - TRIAL_NOT_ELIGIBLE
            - INVALID_2FA_CODE
            - EXPIRED_2FA_CHALLENGE
            - TURNSTILE_FAILED
            - TAKEOVER_NOT_AVAILABLE
            - TAKEOVER_BLOCKED_OPEN_INVOICE
            - UNLINK_BLOCKED_ACTIVE_BILLING
        category:
          type: string
        currentUsage:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      description: Your organization's public API key.
      name: X-Api-Key
      in: header

````