Subtype Filtering
Filter search and enrich results to specific signal subtypes with the signal_subtypes parameter.
Every signal has a signal_type (e.g. hiring-trends) and, within it, a signal_subtype - a more specific sub-category (e.g. hiringSalesRoles vs. hiringEngineeringRoles). The signal_subtypes request parameter filters server-side, so only the subtypes you care about come back. The full vocabulary lives in the Signal Catalog.
Subtype filtering is supported on all four search and enrich endpoints:
| Endpoint | Notes |
|---|---|
POST /v1/companies/search | Filters which signals qualify a company |
POST /v1/contacts/search | Filters which signals qualify a contact |
POST /v1/companies/enrich | Filters which signals are returned (and billed) |
POST /v1/contacts/enrich | Filters which signals are returned (and billed) |
Request fields (JSON body, all four endpoints):
| Field | Type | Description |
|---|---|---|
signal_subtypes | string[] | Subtype values to match. Max 25. OR semantics - a signal matching any value passes. |
signal_subtype | string | Legacy single-value form. If both are sent, the value is unioned into signal_subtypes. |
Step 1: Discover the Vocabulary
Don't guess subtype slugs - pull them from the free types endpoint. The response includes a per-type subtypes map. Add ?include_counts=true if you also want signal volumes per type.
curl https://signals.autobound.ai/v1/signals/types \
-H "x-api-key: YOUR_API_KEY"Response (truncated):
{
"signal_types": ["news", "hiring-trends", "sec-8k", "..."],
"subtypes": {
"hiring-trends": [
"hiringEngineeringRoles",
"hiringMachineLearningRoles",
"hiringSalesRoles",
"..."
],
"sec-8k": [
"aiInvestment",
"ceoChange",
"cybersecurityIncident",
"..."
],
"news": [
"acquires",
"launches",
"receives_financing",
"..."
]
}
}Naming style varies by type (camelCase for most, snake_case for news) - another reason to copy values from this map rather than inventing them. Matching is case-insensitive either way.
Filtering Search
Add signal_subtypes alongside signal_types to only match companies (or contacts) with the specific activity you care about - here, companies hiring for sales or marketing roles:
curl -X POST https://signals.autobound.ai/v1/companies/search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signal_types": ["hiring-trends"],
"signal_subtypes": ["hiringSalesRoles", "hiringMarketingRoles"],
"limit": 10
}'High-volume types: when a subtype filter is applied to a high-volume signal type on search (
linkedin-post-*,work-milestones,website-intelligence,twitter-*,seo-traffic,hiring-trends,hiring-velocity), the scanned window is capped to the most recent 14 days and the response includes a notice saying so. This clamp does not apply to enrich.
Filtering Enrich
The same fields work on both enrich endpoints. Company enrich - only the AI-investment content tags from Salesforce's recent SEC filings:
curl -X POST https://signals.autobound.ai/v1/companies/enrich \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "salesforce.com",
"signal_types": ["sec-8k", "sec-10k"],
"signal_subtypes": ["aiInvestment"],
"limit": 50
}'Contact enrich - signal_types is optional; a subtype filter alone applies across everything returned:
curl -X POST https://signals.autobound.ai/v1/contacts/enrich \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_email": "[email protected]",
"signal_subtypes": ["jobChange", "promotion"]
}'Billing: enrich bills 2 credits per returned signal, so a subtype filter directly reduces your bill - fewer signals returned, fewer credits spent. If the filter matches nothing, the call is free: you get a
200with an empty signals array plus response metadata, never a404, as long as the company or contact itself resolves.
Matching Semantics
The rules are identical on all four endpoints:
| Rule | Behavior |
|---|---|
| OR semantics | A signal matching any value in signal_subtypes passes the filter. |
| Max 25 values | Per request, across the array. |
| Cross-type | One list applies across all requested signal_types. SEC filing types share content-tag subtypes, so signal_types: ["sec-8k", "sec-10k"] + signal_subtypes: ["aiInvestment"] returns AI-investment signals from both filing types with a single filter. |
| Case-insensitive | Values are matched case-insensitively against the known vocabulary - hiringsalesroles matches hiringSalesRoles. |
| Unknown values | A value not in the vocabulary falls back to an exact match - typically 0 results - and adds an entry to a warnings array in the response. It is never a 400 error, so one bad value doesn't break a batch integration. |
Singular signal_subtype | Still accepted for backwards compatibility. Sent together with signal_subtypes, the two are unioned. |
Next Steps
- Endpoint Reference - request/response docs for the enrich endpoints
- Signal Catalog - what each signal type and subtype contains
Updated about 2 hours ago

