# Equity Metrics History Export

> Returns time-limited download links for this account's pre-materialized equity-metrics history export (Parquet, one part per metric) plus its manifest.

`GET https://api.bavest.co/v2/equities/exports`

Group: Equities. Route id: `v2_equities_export_latest`. Included in: Startup, Pro, Growth.

## Description

Returns time-limited download links for this account's pre-materialized equity-metrics history export (Parquet, one part per metric) plus its manifest. The export is produced by a batch job and scoped to the caller's API key; no identifier is required. If no export has been materialized yet, the response contains an empty parts list and a warning.

## Authentication

Send your API key in the `x-api-key` header on every request. No key yet? Sign up at https://dashboard.bavest.co/sign-up (free trial). The examples read the key from the `BAVEST_API_KEY` environment variable.

## Parameters

None.

## Response

200 Successful response (`application/json`).

| Field | Type | Always present | Description |
|---|---|---|---|
| `data` | object | no |  |
| `data.clientId` | string | no | The account (API-key id) the export is scoped to. |
| `data.generatedAt` | string | no | When the export was materialized (ISO-8601) |
| `data.format` | string | no | Example: `parquet`. |
| `data.schema` | array of string | no | Column order of every part file. |
| `data.rows` | integer | no | Total rows across all parts. |
| `data.expiresInSeconds` | integer | no | Lifetime of the returned presigned URLs. Example: `3600`. |
| `data.manifestUrl` | string | no | Presigned URL for the manifest.json. |
| `data.parts` | array of object | no |  |
| `data.parts[].metricName` | string | no | Example: `roe_ttm`. |
| `data.parts[].url` | string | no | Presigned URL for that metric's Parquet part. |
| `data.warning` | string | no | Present only when no export is materialized yet. |
| `meta` | ResponseMeta | no | Response envelope metadata. Always present on a 200: `time` is set by `core/response.py` on 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. |
| `meta.time` | integer | no | Server-side processing time in milliseconds. Example: `17`. |
| `meta.parameters` | object | no | Echo of the request parameters the endpoint resolved. |

## Example request

```bash
curl 'https://api.bavest.co/v2/equities/exports' \
  -H "x-api-key: $BAVEST_API_KEY"
```

## Errors

| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key. |
| 429 | Rate limit exceeded. Retry after the `Retry-After` header interval. |

- `403` from the gateway: the API key is invalid or switched off.
- `429` with message `Limit Exceeded`: the monthly quota of the key is used up. With `Too Many Requests`: the key is throttled, or this route is not in the key's plan. Wait for `Retry-After` when it is sent.

## Links

- HTML page: https://dashboard.bavest.co/docs/v2_equities_export_latest
- OpenAPI: https://dashboard.bavest.co/openapi.json (YAML: https://dashboard.bavest.co/openapi.yaml)
- Authentication: https://dashboard.bavest.co/docs/authentication.md
- MCP server for AI agents: https://dashboard.bavest.co/docs/mcp.md
- All routes: https://dashboard.bavest.co/llms.txt
