Partner ApiICP Configs

ICP Configs

Ideal Customer Profile (ICP) configs define segmentation rules that filter and prioritize visitors. Create, update, and manage ICP configs for each organization.

Segmentation Rule Structure

ICP configs use a rule structure with groups and conditions:

{
  "groups": [
    {
      "operator": "AND",
      "conditions": [
        {
          "type": "industry",
          "comparator": "in",
          "value": ["Technology", "SaaS"],
          "optional": false
        },
        {
          "type": "company_size",
          "comparator": "gte",
          "value": 50,
          "optional": false
        }
      ]
    }
  ]
}
  • groups: Array of condition groups. Groups are combined with OR (any group can match).
  • operator: AND or OR - how conditions within a group are combined.
  • conditions: Array of rule conditions.
  • optional: If true, the condition does not exclude visitors but may affect scoring.

Condition Types

TypeDescriptionExample Values
utm_sourceUTM source parameter”google”, “linkedin”
utm_mediumUTM medium parameter”cpc”, “email”
utm_campaignUTM campaign parameter”summer_sale”
utm_termUTM term parameter”visitor identification”
utm_contentUTM content parameter”banner_a”
page_containsPage URL contains”/pricing”
page_equalsPage URL equalshttps://example.com/contact
page_view_countNumber of page views5
session_countNumber of sessions3
industryCompany industry”Technology”
company_sizeCompany employee count100
icp_matchICP match statustrue/false
icp_scoreICP score value0-100
countryVisitor country”US”
regionVisitor region/state”California”
cityVisitor city”San Francisco”
last_seen_daysDays since last visit7
persona_matchPersona match statustrue/false
domainCompany domain”acme.com”
job_titleJob title”CTO”
linkedin_urlLinkedIn profile URLhttps://linkedin.com/…”
employee_size_rangeEmployee count range”51-200”
company_cityCompany city”Austin”
company_regionCompany region”Texas”
company_postal_codeCompany postal code”78701”

Comparators

ComparatorDescriptionUse With
equalsExact matchStrings, numbers
not_equalsDoes not equalStrings, numbers
containsString containsStrings
not_containsString does not containStrings
starts_withString starts withStrings
ends_withString ends withStrings
gtGreater thanNumbers
gteGreater than or equalNumbers
ltLess thanNumbers
lteLess than or equalNumbers
inValue in listArrays
not_inValue not in listArrays
betweenValue between (inclusive)[min, max]
has_anyHas any of valuesArrays
has_allHas all valuesArrays
existsField existsBooleans
not_existsField does not existBooleans

List ICP Configs

List all ICP configs for an organization.

Request:

GET /partner/organizations/{organizationId}/icp-configs

Response:

{
  "icpConfigs": [
    {
      "id": "uuid",
      "slug": "enterprise-leads",
      "label": "Enterprise Leads",
      "rules": { "groups": [...] },
      "priority": 1,
      "isActive": true,
      "createdAt": "2025-01-15T10:00:00Z"
    }
  ]
}

Create ICP Config

Create a new ICP config.

Request:

POST /partner/organizations/{organizationId}/icp-configs

Body:

{
  "label": "Enterprise Leads",
  "rules": {
    "groups": [
      {
        "operator": "AND",
        "conditions": [
          {
            "type": "industry",
            "comparator": "in",
            "value": ["Technology", "SaaS"],
            "optional": false
          },
          {
            "type": "company_size",
            "comparator": "gte",
            "value": 100,
            "optional": false
          }
        ]
      }
    ]
  },
  "priority": 1,
  "isActive": true
}
FieldTypeRequiredDescription
labelstringYesDisplay name for the config
rulesobjectYesRule structure with groups and conditions
priorityintegerNoSort order (lower = higher priority)
isActivebooleanNoWhether the config is active (default: true)

Response:

{
  "icpConfig": {
    "id": "uuid",
    "slug": "enterprise-leads",
    "label": "Enterprise Leads",
    "rules": { "groups": [...] },
    "priority": 1,
    "isActive": true,
    "createdAt": "2025-02-27T10:30:00Z"
  }
}

Example:

curl -X POST "https://api.app.bullseye.so/api/v1/partner/organizations/org-uuid/icp-configs" 
  -H "X-Partner-API-Key: your-api-key" 
  -H "Content-Type: application/json" 
  -d '{"label": "Enterprise Leads", "rules": {"groups": [{"operator": "AND", "conditions": [{"type": "industry", "comparator": "in", "value": ["Technology"]}]}]}}'

Get ICP Config

Retrieve a single ICP config by slug.

Request:

GET /partner/organizations/{organizationId}/icp-configs/{slug}

Response:

{
  "icpConfig": {
    "id": "uuid",
    "slug": "enterprise-leads",
    "label": "Enterprise Leads",
    "rules": { "groups": [...] },
    "priority": 1,
    "isActive": true,
    "createdAt": "2025-01-15T10:00:00Z",
    "updatedAt": "2025-02-27T09:00:00Z"
  }
}

Update ICP Config

Update an existing ICP config.

Request:

PUT /partner/organizations/{organizationId}/icp-configs/{slug}

Body:

{
  "label": "Enterprise & Mid-Market Leads",
  "rules": { "groups": [...] },
  "priority": 2,
  "isActive": true
}

All fields are optional.

Response:

{
  "icpConfig": {
    "id": "uuid",
    "slug": "enterprise-leads",
    "label": "Enterprise & Mid-Market Leads",
    "rules": { "groups": [...] },
    "priority": 2,
    "isActive": true
  }
}

Delete ICP Config

Delete an ICP config.

Request:

DELETE /partner/organizations/{organizationId}/icp-configs/{slug}

Response: 204 No Content


Get ICP Stats

Retrieve ICP statistics for an organization over a date range.

Request:

GET /partner/organizations/{organizationId}/icp-configs/stats

Query Parameters:

ParameterTypeDescription
fromstringStart date (ISO 8601 or YYYY-MM-DD)
tostringEnd date (ISO 8601 or YYYY-MM-DD)

Response:

{
  "stats": {
    "totalMatches": 150,
    "byConfig": [
      {
        "slug": "enterprise-leads",
        "label": "Enterprise Leads",
        "matches": 85
      }
    ],
    "from": "2025-02-01",
    "to": "2025-02-27"
  }
}

Example:

curl -X GET "https://api.app.bullseye.so/api/v1/partner/organizations/org-uuid/icp-configs/stats?from=2025-02-01&to=2025-02-27" 
  -H "X-Partner-API-Key: your-api-key"