Skip to content

Search metrics, members, and series

POST
/api/b2b/search/entities
curl --request POST \
--url https://api.stockalloy.com/api/b2b/search/entities \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "query": "direct-to-consumer revenue", "ticker": "DECK", "types": [ "series" ], "limit": 5 }'

Full-text search over the metric/member/series registry. Scope to one company with ticker or cik, to a set with tickers/ciks, or search cross-company by omitting all of them.

Media typeapplication/json
object
ticker

Stock ticker, e.g. DECK.

string
cik

Zero-padded 10-digit SEC CIK, e.g. 0001011570.

string
tickers

Company set (search endpoints only).

Array<string>
ciks

Company set (search endpoints only).

Array<string>
query
required
string
>= 2 characters
types

Restrict result entity types.

Array<string>
Allowed values: metric member series
limit
integer
default: 20 >= 1 <= 50
offset
integer
0 <= 200
Example
{
"query": "direct-to-consumer revenue",
"ticker": "DECK",
"types": [
"series"
],
"limit": 5
}

Ranked search results.

Media typeapplication/json
object
scope
string
Allowed values: company company_set cross_company
query
string
ticker
string | null
cik
string | null
tickers
Array<string> | null
ciks
Array<string> | null
limit
integer
offset
integer
count
integer
results
Array<object>
object
entity_type
string
Allowed values: metric member series
entity_id
string
cik
string | null
title
string | null
subtitle
string | null
category
string | null
rank

BM25 rank — lower is better.

number
series_point_count
integer | null
series_last_period
string | null
metric_id
string | null
dims_key
string | null
unit_signature
string | null
series_key

Present on series rows; use with /facts/*/by-series.

string | null
meaning_hint
string | null
meaning_disclaimer
string | null
meaning_tooltip
string | null
needs_meaning_tooltip
boolean
Example
{
"scope": "company",
"results": [
{
"entity_type": "metric"
}
]
}
X-RateLimit-Limit
integer

Requests allowed per minute for this key.

X-RateLimit-Remaining
integer

Requests remaining in the current minute window.

X-RateLimit-Reset
integer

Unix timestamp (seconds) when the window resets.

Invalid request — missing/invalid fields, malformed JSON, or an unsupported scope combination.

Media typeapplication/json
object
error
required

Human-readable error message.

string
Example
{
"error": "query is required"
}

Missing or invalid API key.

Media typeapplication/json
object
error
required

Human-readable error message.

string
Example
{
"error": "API key required"
}

Key revoked/disabled/expired, account disabled, key not entitled for this product, or cross-company search not enabled for this key.

Media typeapplication/json
object
error
required

Human-readable error message.

string
Example
{
"error": "API key has expired"
}

Company not found (unknown ticker or CIK).

Media typeapplication/json
object
error
required

Human-readable error message.

string
Example
{
"error": "Unknown ticker: ZZZZ"
}

Rate limit exceeded (per-minute) or quota exceeded (daily/monthly, account-level or per-key). Distinguish by body shape.

Media typeapplication/json
One of:
object
error
required
string
Allowed value: Rate limit exceeded
retryAfter
required

Seconds until the window resets.

integer
limit
required

Requests allowed per minute for this key.

integer
windowMs
required
integer
Allowed value: 60000
Examples

Per-minute rate limit

{
"error": "Rate limit exceeded",
"retryAfter": 31,
"limit": 60,
"windowMs": 60000
}
X-RateLimit-Limit
integer

Requests allowed per minute for this key.

X-RateLimit-Remaining
integer

Requests remaining in the current minute window.

X-RateLimit-Reset
integer

Unix timestamp (seconds) when the window resets.

Retry-After
integer

Seconds to wait before retrying (429 only).

Unexpected server error.

Media typeapplication/json
object
error
required

Human-readable error message.

string
Example
{
"error": "Facts lookup failed"
}