Accounts
An account is a buyer company you have interviews on. The accounts endpoints roll your interviews up by company, so you can answer "which companies match this profile?" and "what does this company's stack and buying context look like?" without paging through transcripts yourself.
Account endpoints require API vendor access and the account_pages feature on your account — the same two conditions that expose the search_accounts and fetch_account MCP tools. Contact support if you receive 403 Forbidden on these endpoints.
List accounts
GET /api/v1/accounts
Search accounts using the same filter surface as transcript search, deduplicated to one row per company.
Results are ordered by how many of the matching interviews belong to each account, then by the most recent of those interviews.
How the search works
The account list is built from an interview search, not from a dump of every company. Alium runs your filters against the interview index, inspects up to 1,000 matching interviews, and groups those into accounts. meta.transcript_hits_inspected reports how many it actually inspected; meta.transcript_total how many matched overall.
When more interviews matched than could be inspected, meta.truncated is true. meta.total_count is then a floor, not a total, and accounts whose interviews ranked below the cap are missing. Narrow the filters — by industry, use case, vendor, or company size — rather than paging further.
Query parameters
| Parameter | Type | Description |
|---|---|---|
q | string | Free-text search across the account's interviews |
page | integer | Page number over the deduplicated account list (default: 1) |
per_page | integer | Accounts per page (default: 10, max: 50) |
accounts[] | string[] | Filter to specific accounts by slug, name, or domain |
buyers[] | string[] | Alias for accounts[] |
in_market_for[] | string[] | Filter by use case names |
industry[] | string[] | Filter by buyer industry names |
vendors[] | string[] | Filter by vendor company names |
products[] | string[] | Filter by product names |
min_rating / max_rating | integer | Tech stack rating bounds, 1–10. Requires products[] |
mgmt_level[] | string[] | Filter by the interviewee's management level |
department[] | string[] | Filter by the interviewee's department |
revenue | string | Revenue range in dollars, e.g. 1000000;50000000 |
employee_count | string | Employee count range, e.g. 1000;5000 |
intro_optin | string | open or closed |
targeted_accounts_only | boolean | Only accounts on your team's targeted list |
since | string | Interview date window, e.g. 6.months |
start_date / end_date | string | Interview date bounds, YYYY-MM-DD |
start_publish_date / end_publish_date | string | Publish date bounds, YYYY-MM-DD |
Unlike transcript search, unrecognized names are an error here, not a silent no-op. An accounts[], buyers[], vendors[], products[], industry[], or in_market_for[] value that doesn't resolve returns 422 Unprocessable Entity with suggestions:
{
"error": "- Could not find vendor 'Salesfroce'. Did you mean: Salesforce?"
}
Example request
curl -H "Authorization: Token YOUR_API_KEY" \
"https://app.alium.io/api/v1/accounts?in_market_for[]=CDP&revenue=1000000000;"
Response
{
"data": [
{
"name": "Acme Corp",
"slug": "acme-corp",
"domain_name": "acme.com",
"url": "https://app.alium.io/accounts/acme-corp",
"industry": ["Retail > Footwear"],
"revenue": 17000000000,
"employee_count": 62000,
"location": "New York, NY",
"icp_matches": 3,
"targeted": true,
"matching_interviews": 4,
"last_matching_interview": "2026-06-18"
}
],
"meta": {
"total_count": 27,
"transcript_hits_inspected": 112,
"transcript_total": 112,
"truncated": false,
"page": 1,
"per_page": 10
}
}
Response fields
| Field | Type | Description |
|---|---|---|
name | string | Buyer company name |
slug | string | URL-safe account identifier — pass to the detail endpoint |
domain_name | string | Company website domain |
url | string | Account page in the Alium app |
industry | string[] | Buyer industries, as Parent > Child paths |
revenue | integer | null | Annual revenue in US dollars (17000000000 = $17B) — the same unit the revenue filter takes |
employee_count | integer | null | Headcount |
location | string | null | Company headquarters |
icp_matches | integer | null | ICP attributes this account matches for your team |
targeted | boolean | Whether the account is on your team's targeted list |
matching_interviews | integer | Interviews from this account among the inspected hits |
last_matching_interview | string | null | Date of the most recent matching interview (YYYY-MM-DD) |
Meta fields
| Field | Type | Description |
|---|---|---|
total_count | integer | Accounts found. A floor rather than a total when truncated is true |
transcript_hits_inspected | integer | Interviews the accounts were aggregated from (capped at 1,000) |
transcript_total | integer | Interviews matching your filters in total |
truncated | boolean | true when the cap was hit, so coverage is partial |
page | integer | Current page of the deduplicated account list |
per_page | integer | Accounts per page |
Get an account
GET /api/v1/accounts/:id
:id accepts an account slug (current or historical, so a renamed account keeps resolving), a domain, or an exact company name — matched against canonical and alternative names.
Unlike the MCP tools, this endpoint treats :id as an identifier: there is no fuzzy fallback. A near-miss like acme-corportation returns 404 rather than resolving to a different account. Accounts you have no provisioned interviews for also return 404.
Query parameters
| Parameter | Type | Description |
|---|---|---|
fields[] | string[] | Sections to include: kpis, tech_stack, qa, or all. Default: kpis,tech_stack |
The Q&A section can be large, so it is omitted unless you ask for it. The header fields are always included.
Passing fields[] replaces the default rather than adding to it — fields[]=qa returns the header plus Q&A, without kpis or tech_stack. An unrecognized value is an error, not an empty selection: fields[]=tech-stack returns 422 listing the valid values.
Example request
curl -H "Authorization: Token YOUR_API_KEY" \
"https://app.alium.io/api/v1/accounts/acme-corp?fields[]=all"
Response
{
"data": {
"name": "Acme Corp",
"slug": "acme-corp",
"domain_name": "acme.com",
"url": "https://app.alium.io/accounts/acme-corp",
"industry": ["Retail > Footwear"],
"revenue": 17000000000,
"employee_count": 62000,
"location": "New York, NY",
"icp_matches": 3,
"targeted": true,
"icp": {
"revenue_match": true,
"employees_match": false
},
"kpis": {
"interview_count": 4,
"first_interviewed": "2025-02-10",
"last_interviewed": "2026-06-18"
},
"tech_stack": [
{
"product": "Salesforce Marketing Cloud",
"vendor": "Salesforce",
"vendor_slug": "salesforce",
"rating": 4.2,
"status": "unhappy_with",
"interview_count": 3,
"first_seen": "2025-02-10",
"last_seen": "2026-06-18",
"use_cases": ["Email Marketing"]
}
],
"qa": [
{
"category": "Budget & Procurement",
"questions": [
{
"question": "How is the martech budget allocated?",
"answer": "Most teams report spending between $200K-$500K annually...",
"evidence_count": 3,
"total_interviews": 4,
"confidence": 0.75
}
]
}
],
"links": {
"interviews": "/api/v1/transcripts?accounts[]=acme-corp"
}
}
}
Response fields
The header fields are the same as a list row, minus matching_interviews and last_matching_interview, plus:
| Field | Type | Description |
|---|---|---|
icp.revenue_match | boolean | Account revenue falls inside your team's ICP revenue range |
icp.employees_match | boolean | Account headcount falls inside your team's ICP range |
kpis.interview_count | integer | Interviews you have for this account |
kpis.first_interviewed | string | null | Date of the earliest interview (YYYY-MM-DD) |
kpis.last_interviewed | string | null | Date of the most recent interview (YYYY-MM-DD) |
tech_stack[].product | string | Product found in the account's stack |
tech_stack[].vendor | string | null | Company that makes the product |
tech_stack[].vendor_slug | string | null | Pass to GET /api/v1/vendors/:slug |
tech_stack[].rating | float | null | Recency-weighted buyer rating, 1–10 |
tech_stack[].status | string | satisfied, unhappy_with, or not_recently_mentioned |
tech_stack[].interview_count | integer | Interviews mentioning this product |
tech_stack[].first_seen / last_seen | string | null | Interview dates bounding the mentions |
tech_stack[].use_cases | string[] | Use cases the product is associated with here |
qa[].category | string | Question category |
qa[].questions[].question | string | The question asked |
qa[].questions[].answer | string | null | AI-synthesized answer across the account's interviews |
qa[].questions[].evidence_count | integer | Interviews that supplied evidence |
qa[].questions[].total_interviews | integer | Interviews considered |
qa[].questions[].confidence | float | Confidence in the synthesis, 0–1 |
links.interviews | string | Transcript search scoped to this account |
Responses are cached for 10 minutes.
Errors
| Status | Meaning |
|---|---|
403 | Account endpoints aren't enabled for your account — they require both API vendor access and the account_pages feature |
404 | No account matched :id, or you have no provisioned interviews for it |
422 | An unrecognized fields[] value, or (on the list endpoint) a filter name that didn't resolve |