Overview
The WhiteWhale API gives you full programmatic access to your account data, signals, users, and Account Suggestions. Common use cases:- Pipe WhiteWhale data into tools not covered by native integrations
- Build your own CRM integration
- Automate account uploads and status changes
- Embed WhiteWhale signal data into your own platform or internal tooling
https://app.getwhitewhale.com/v1
API Docs: app.getbirddog.lol/api_docs
Authentication
Every request requires two headers:| Header | Description |
|---|---|
api-key | Your WhiteWhale API key |
user | The email address of the user making the request |
Getting your API key
The API key is shared across your whole team — one key per WhiteWhale instance.Scroll to API & Webhooks

Rate limits & global errors
Rate limit: 600 requests per minute, global across all routes.| Status code | Meaning |
|---|---|
401 | Authentication failed — API key missing, incorrect, or user not found |
404 | User or resource not found |
429 | Rate limit exceeded |
Endpoints
Accounts
GET /v1/get_accounts — Fetch account data
GET /v1/get_accounts — Fetch account data
| Parameter | Type | Default | Description |
|---|---|---|---|
account_filter | array | [] | Filter to specific account domains |
status | string | all | Filter by status: active, archived, farsight, or all |
signal_data | boolean | true | Include signal data in response |
lite | boolean | false | Return lightweight response without full account data |
limit | integer | 100 | Max accounts to return |
offset | integer | 0 | Pagination offset |
icp_id | string | — | Filter to a specific ICP |
Account objects including name, score, status, signal answers, and account details (LinkedIn URL, industry, employee count, etc.)POST /v1/upload_accounts — Add new accounts
POST /v1/upload_accounts — Add new accounts
| Field | Type | Required | Description |
|---|---|---|---|
accounts | array of strings | ✅ | List of account domains to upload |
farsight | boolean | — | Default true — sends to Account Suggestions first. Set to false to add directly as active. |
icp | string | — | ICP to upload accounts to. Default: Master |
farsight: true (default), uploaded accounts land in Account Suggestions and must be activated. If you have a webhook configured, you’ll receive a pre-score payload when they’re ready. If farsight: false, accounts are immediately active and will consume credits.POST /v1/change_accounts_status — Archive, activate, or delete accounts
POST /v1/change_accounts_status — Archive, activate, or delete accounts
| Field | Type | Required | Description |
|---|---|---|---|
accounts | array of strings | ✅ | Account domains to update |
new_status | string | ✅ | active, archive, or delete |
icp | string | — | ICP to apply changes to. Default: Master |
POST /v1/normalize_accounts — Validate and normalize domains
POST /v1/normalize_accounts — Validate and normalize domains
| Field | Type | Required | Description |
|---|---|---|---|
accounts | array of strings | ✅ | Raw account URLs to normalize |
Signals
GET /v1/get_signal_templates — List signal templates
GET /v1/get_signal_templates — List signal templates
Template objects with the question format, a title, whether the template is complete, and examples for templates with placeholders.POST /v1/add_signals — Add signals to an ICP
POST /v1/add_signals — Add signals to an ICP
/v1/get_signal_templates, unless ignore_templates: true is set.Body:| Field | Type | Required | Description |
|---|---|---|---|
signals | array | ✅ | Array of signal objects (see below) |
ignore_templates | boolean | — | Default false. Set to true to add custom signals outside the template format. |
| Field | Type | Required | Description |
|---|---|---|---|
signal | string | ✅ | The signal question text |
name | string | ✅ | A unique name for the signal within the ICP |
icp | string | ✅ | Name of the ICP to add the signal to |
q_rank | number | — | Signal rank: 0 (disqualify), 0.1 (low), 1 (normal), 6 (high) |
0— any account matching this signal is set to an arbitrary negative score. Use to disqualify accounts.6— Account Suggestions uses High-ranked signals to find new accounts. At least one signal of rank6is required for Account Suggestions to work.
POST /v1/delete_signal — Remove a signal
POST /v1/delete_signal — Remove a signal
/v1/get_user_data.Body:| Field | Type | Required | Description |
|---|---|---|---|
signal_id | string | ✅ | UUID of the signal to delete |
Users
GET /v1/get_user_data — Get a user's data
GET /v1/get_user_data — Get a user's data
UserOverview object with:icps— list of ICP namesicp_id_dict— map of ICP name → ICP IDsignals— all signals across the user’s ICPscredits_remaining— remaining account creditsactive_accounts— current active account count
GET /v1/get_all_user_data — List all users in your instance
GET /v1/get_all_user_data — List all users in your instance
UserOverview objects for every user in your WhiteWhale instance. Requires admin authentication.POST /v1/create_user_request — Create a new user
POST /v1/create_user_request — Create a new user
| Field | Type | Required | Description |
|---|---|---|---|
email | string | ✅ | Email address for the new user. Stored entirely lowercase. |
email_alerts | boolean | — | Default false. Set to true to enable email alerts for this user. |
403 if out of user seats. 409 if a user with that email already exists.POST /v1/delete_user_request — Delete a user
POST /v1/delete_user_request — Delete a user
| Field | Type | Required | Description |
|---|---|---|---|
email | string | ✅ | Email of the user to delete |
403 if the user is not in your organization.Account Suggestions (ICP)
GET /v1/icp/details — Get ICP details
GET /v1/icp/details — Get ICP details
| Parameter | Type | Description |
|---|---|---|
icp_ids | array | Optional. ICP IDs to fetch. If omitted, returns all ICPs in your instance. |
POST /v1/add_icp — Create a new ICP
POST /v1/add_icp — Create a new ICP
| Field | Type | Required | Description |
|---|---|---|---|
icp_name | string | ✅ | Name for the new ICP. Must be unique. |
400 if an ICP with that name already exists.POST /v1/swap_icp — Move accounts to a different ICP
POST /v1/swap_icp — Move accounts to a different ICP
| Field | Type | Required | Description |
|---|---|---|---|
accounts | array | ✅ | Account domains to move |
target_icp | string | ✅ | Name of the ICP to move them to |
POST /v1/delete_icp_request — Delete an ICP
POST /v1/delete_icp_request — Delete an ICP
| Field | Type | Required | Description |
|---|---|---|---|
icp_id | string | ✅ | UUID of the ICP to delete |
400 if ICP not found for user. 403 if attempting to delete a Master ICP.POST /v1/icp/farsight_state_switch — Enable or disable Account Suggestions
POST /v1/icp/farsight_state_switch — Enable or disable Account Suggestions
| Field | Type | Description |
|---|---|---|
icp_id | string | ICP to update |
state | string | "false" (off), "limited" (only scans uploaded accounts), or "unlimited" (scans the full internet within your constraints) |
6 (High) is required for Account Suggestions to find new accounts. Account Suggestions runs automatically at 3:00 UTC daily. To trigger immediately, use /v1/icp/run_farsight.POST /v1/icp/run_farsight — Trigger an immediate Account Suggestions scan
POST /v1/icp/run_farsight — Trigger an immediate Account Suggestions scan
| Field | Type | Required | Description |
|---|---|---|---|
icp_id | string | ✅ | ICP to run Account Suggestions for |
POST /v1/icp/farsight_constraints_change — Update Account Suggestions filters
POST /v1/icp/farsight_constraints_change — Update Account Suggestions filters
| Field | Type | Required | Description |
|---|---|---|---|
icp_id | string | ✅ | ICP to update |
filter_list | array | ✅ | List of countries, states, or industries to apply |
inclusion_or_exclusion | string | ✅ | "inclusion" or "exclusion" |
list_type | string | ✅ | "country", "state", or "industry" |
/v1/utilities/location_codes and valid industries from /v1/utilities/industries.POST /v1/icp/farsight_employee_bounds — Set employee count range
POST /v1/icp/farsight_employee_bounds — Set employee count range
| Field | Type | Required | Description |
|---|---|---|---|
icp_id | string | ✅ | ICP to update |
min | integer | — | Minimum employee count. Default: 0 |
max | integer | — | Maximum employee count. Default: 0 |
Webhook
POST /v1/set_webhook — Register a webhook URL
POST /v1/set_webhook — Register a webhook URL
| Field | Type | Required | Description |
|---|---|---|---|
webhook_url | string | ✅ | The URL WhiteWhale should send events to |
POST /v1/test_webhook — Send a test webhook payload
POST /v1/test_webhook — Send a test webhook payload
| Field | Type | Required | Description |
|---|---|---|---|
event_type | string | ✅ | "account.upload" or "account.signal" |
spoof_payload | boolean | — | Returns a fake payload with the correct data structure. Requires at least one signal on an account. |
icp_name | string | — | If provided, returns a real signal and account name instead of spoofed data. |
Utilities
GET /v1/utilities/location_codes — Get valid location codes
GET /v1/utilities/location_codes — Get valid location codes
GET /v1/utilities/industries — Get valid industry codes
GET /v1/utilities/industries — Get valid industry codes

