/api/v1/portfolio/exports/{export_id}Read a portfolio export
Returns the current state and artifact fields for a portfolio export.
freeSince 3.152.0
Why use this
Poll an export job until its artifact is available, failed, or expired.
Common use case
Render export progress and, after success, offer the returned download URL and artifact reference.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| export_id | path | required | — | — | Export identifier returned by the create operation. | 00000000-0000-4000-8000-000000000006 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | `success`. |
| request_id | string | no | Request correlation identifier. |
| timestamp | string | no | Response timestamp. |
| data | object | no | Export result with exactly `id`, `portfolio_id`, `state`, `format`, `expires_at`, `download_url`, `artifact_ref`, `reconciled_at`, `authoritative_version`, and `evidence`. Download and reconciliation fields are null until a successful result is reconciled. |
| data.evidence | object | yes | On success, reconciliation evidence with `kind`, `reference`, `verified_at`, and `authoritative_version`. |
| meta | object | no | Source metadata with exactly `source_as_of`, `freshness`, `coverage`, `version`, and `omissions`; `coverage` has `covered_count` and `omitted_count`. |
Sample response
·
- "status": "success"
- "request_id": "00000000-0000-4000-8000-000000000010"
- "timestamp": "2026-09-07T12:00:00Z"
- "data":
- "id": "00000000-0000-4000-8000-000000000006"
- "portfolio_id": "00000000-0000-4000-8000-000000000004"
- "state": "RUNNING"
- "format": "CSV"
- "expires_at": "2026-09-07T12:05:00Z"
- "download_url": null
- "artifact_ref": null
- "reconciled_at": null
- "authoritative_version": null
- "evidence": null
- "meta":
- "source_as_of": "2026-09-07T12:00:00Z"
- "freshness": "FRESH"
- "coverage":
- "version": "source-v1"
- "omissions": []
Errors
| Status | Label | Description |
|---|---|---|
| 200 | Success; returns the export data and source metadata. | |
| 400 | `INVALID_REQUEST` — the export identifier is malformed. | |
| 401 | `UNAUTHENTICATED` — authentication is required. | |
| 403 | `FORBIDDEN` — the caller lacks `portfolio:export`. | |
| 404 | `NOT_FOUND` — the export does not exist or is not visible to the caller. | |
| 410 | `EXPORT_EXPIRED` — the export artifact is no longer available. | |
| 429 | `RATE_LIMITED` — retry after the server-provided delay. | |
| 503 | `SERVICE_UNAVAILABLE`, `DEADLINE_EXCEEDED`, `RESULT_GRAPH_INVALID`, or `RESULT_GRAPH_LIMIT_EXCEEDED`. |
Code samples
curl "https://api.finradar.ai/api/v1/portfolio/exports/00000000-0000-4000-8000-000000000006" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).