Equities
Metric History
/v2/equities/metrics/historyReturns one statement-derived metric (ratios, margins, growth and every *_ttm name) as a series of points, one per fiscal period end, newest first. Suppressed periods are returned as explicit null points with a reason instead of being omitted, so point counts stay stable for mirrors; see the Metric History guide for basis, vintage and TTM-overlap semantics.
Included in: Startup, Pro, Growth.
Authentication
Send your API key in the x-api-key header on every request to https://api.bavest.co. The samples read it from the BAVEST_API_KEY environment variable. Get an API key · Authentication guide
Parameters
Required: one of symbol, isin, for example symbol=AAPL.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| symbol | query | string | one of symbol, isin | Stock ticker symbol (e.g., Example |
| isin | query | string | one of symbol, isin | ISIN code (e.g., |
| name | query | string | yes | Metric name. Discover valid names via GET /equities/metrics/names. Example |
| basis | query | string | no | Reporting basis. Defaults to TTM for *_ttm names, FY otherwise. One of |
| vintage | query | string | no | MR = most recent restated statements. AR / as_of point-in-time replay is not yet enabled. One of Default |
| from | query | string (date) | no | Earliest period end (inclusive). |
| to | query | string (date) | no | Latest period end (inclusive). |
| provenance | query | boolean | no | When true, each point carries a provenance block (knownAt, restated, and the vendor's acceptedDate/filingDate claim). Empty while ledger coverage has not begun for the security. Default |
| changedSince | query | string (date-time) | no | Incremental sync. Returns only points whose value changed at or after this ISO-8601 timestamp. Pass the |
Try it
Stock ticker symbol (e.g., `AAPL`, `MSFT`, `GOOGL`). Provide exactly one of symbol or isin.
ISIN code (e.g., `US0378331005`). Provide exactly one of symbol or isin. Clear the symbol example before using an ISIN.
Metric name. Discover valid names via GET /equities/metrics/names.
MR = most recent restated statements. AR / as_of point-in-time replay is not yet enabled.
GET /v2/equities/metrics/history?symbol=AAPL&name=roe_ttm&vintage=MR
Sent only to api.bavest.co for this request; not stored.
Response 200
Successful response · application/json
dataobjectmetricobjectbasisstringOne of
FYQ1Q2Q3Q4H1H2TTMvintagestringOne of
MRwarningstringPresent when no history is materialized yet for this security/metric/basis.
syncCursorstring (date-time) | nullLatest change time across the whole series (not only the returned points). Pass it as
changedSinceon the next call. Null when no history is materialized.Example
2026-07-22T21:42:19.701813+00:00pointsarray of object
metaResponseMetaResponse envelope metadata. Always present on a 200:
timeis set bycore/response.pyon every successful response. Errors carry the same block, built by the same code, so a client parses one meta shape whether the call succeeded or failed.timeintegerServer-side processing time in milliseconds
Example
17parametersobjectEcho of the request parameters the endpoint resolved
Errors
- 400Invalid request parameters. Returned when required query parameters are missing, have invalid types, or violate constraints (e.g., providing both symbol and isin when they are mutually exclusive).
- 401Missing or invalid API key.
- 404Resource not found.
- 429Rate limit exceeded. Retry after the `Retry-After` header interval.
- 500An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value.
- 502Upstream data provider returned an error or is temporarily unavailable. Retry after a short delay.
- 504The request timed out waiting for a response from the upstream data provider. This may occur for complex queries or during peak load.
- defaultAn unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value.

