---
title: "List company attributes available for policy checks"
method: GET
path: "/api/company_attributes"
tags: ["Policy"]
---

# List company attributes available for policy checks

`GET /api/company_attributes`

## Request

- Base URL: `https://app.herondata.io`
- URL: `https://app.herondata.io/api/company_attributes`
- Auth: API key in header `x-api-key`

Returns the authenticated account's launch catalogue with picker metadata. Admins get the full internal catalogue, for the account given by user_id or else their current account. An admin impersonating an account also gets the full catalogue for that account.

## Query parameters

- `user_id` integer

## Response `200`

Ok

- CompanyAttributeCatalogueSchema[]
  - `availability` 'all_customers' | 'specific_customers' | 'internal': Which libraries list this attribute: every customer's, specific customers' only (per-account attributes such as entity fields), or admins' only. Sent only to Heron admins, including while impersonating an account.
  - `check_options` object[]: Allowed check forms and any conditional inputs for this value type. `validators` lists the validity operators this variable offers on top of its type's own, e.g. {"type": "is_valid", "label": "must be a valid EIN", "trigger_label": "is invalid"}: `type` is the operator to store, `label` reads as the pass condition and `trigger_label` as the condition that fails the check. Empty when the variable has none
    - `check_type` 'string_check' | 'numeric_check' | 'date_check' | 'boolean_check' | 'date_delta_to_now_check', required
    - `extra_inputs` object, required
    - `validators` object[], required
      - `label` string, required
      - `trigger_label` string, required
      - `type` 'is_invalid' | 'is_valid', required
  - `description` string, nullable: What the value means, written for the customer reading their own rules - the status words a position count admits, what a window is anchored to, when the value is missing rather than zero. Null for a label with no curated description yet. Present only for accounts on policy versions
  - `display_name` string: The attribute's human-readable name, with its tier as a qualifier, e.g. "NSF days last 30 days", "Open judgment total amount (12 months, background check, owner 1)". Parameters are not part of the name - render them from `parameters` where the context wants them. Derived, so it may be reworded. Present only for accounts on policy versions
  - `label` string: The attribute's stable identifier, which a check refers to and a CRM field maps onto. Namespaced with ":" where a source groups its attributes, e.g. "nsf_days_last_30_days", "BackgroundCheck:owner_1:has_felony"
  - `parameter_definitions` unknown
  - `parameter_value_sets` unknown
  - `parameter_value_types` object[], nullable: Settings that change the value's type and unit, e.g. [{"parameters": {"aggregation": "total"}, "type": "decimal", "unit": "currency"}]. Each entry names only the settings that decide the type. A check whose settings include an entry's `parameters` uses that entry's `type` and `unit`; any other check uses the attribute's own. Null when no setting changes it
    - `parameters` object, required
    - `type` 'float' | 'int' | 'decimal' | 'string' | 'date' | 'datetime' | 'bool', required
    - `unit` 'currency' | 'percentage' | 'count' | 'ratio' | 'days' | 'years' | 'text', nullable, required
  - `parameters` object, nullable: Which variant of a parametrised label this is, e.g. {"product_type": "mca", "status": "active_only"}. Null for a label that takes no parameters, and null on a catalogue listing, where parameter definitions give the choices instead
  - `period_examples` unknown
  - `source` 'business_details' | 'entity_graph' | 'template_entity' | 'custom_entity' | 'documents' | 'emails' | 'bank_statements' | 'transactions' | 'positions' | 'background_check' | 'court_records' | 'datamerch' | 'web_presence' | 'fraud_network' | 'broker_velocity' | 'industry_prediction' | 'lendsaas' | 'other': Where the attribute's value comes from: the business details record, the entity graph, an MCA template entity, one of the account's own (custom) entities, documents, emails, bank statements, transactions, positions, the background check, court records, DataMerch or LendSaaS. Sent only to Heron admins, including while impersonating an account.
  - `topic_path` string[]: The picker hierarchy from broad topic to narrow topic.
  - `type` 'float' | 'int' | 'decimal' | 'string' | 'date' | 'datetime' | 'bool': The value's type, which decides what a check on it can compare: "int", "float", "decimal", "string", "date", "datetime", "bool"
  - `unit` unknown
  - `value_set` unknown

## Other responses

- `404`: Account or policy access not found

## Changes

- **2026-11-03** `1ec936e17fef`: 2 warning
  - added the new `industry_category` enum value to the `items/value_set` response property for the response status `200`
  - added the new `industry_prediction` enum value to the `items/source` response property for the response status `200`
- **2026-11-03** `bd8008e49534`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/herondata/apis/heron-data-api/changes/api/company_attributes/get.md)

---

[API](https://skmtc.dev/herondata/apis/heron-data-api.md) - [All operations](https://skmtc.dev/herondata/apis/heron-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/herondata/apis/heron-data-api/revisions/1ec936e17fef?raw)
