/api/v1/nport/screenCross-sectional fund screen on latest monthly reports
Filter the whole fund universe by ranges on each fund's LATEST published N-PORT report: net assets, total assets/liabilities, last-month investor flows, last-month class return, and holdings count — plus bounded cik/series_id lists.
Why use this
Common use case
The cross-sectional entry-point of the fund surface: one structured POST filters every fund's LATEST published monthly report in a single indexed query — the structured replacement for free-text filing search, and the fund-side sibling of the fundamentals screener (GET /api/v1/xbrl/screen in the Company Data group).
The grain is one row per FUND (series; whole-trust filers count once by registrant), at that fund's own latest published month — so a screen is always comparing each fund's freshest disclosure, and as_of can differ across rows when funds are on different filing lags. Range filters use <field>_gt / <field>_lt keys and AND-combine; at least one filter or a cik/series_id list is required (an empty body is a 400, never a full-universe dump).
Three filter families reach beyond the headline scalars: the FLOW filters read the latest month's subscriptions/reinvestment/redemptions from the Part B flow block (a filer's literal "N/A" month is excluded from a range test, never coerced to a number); the RETURN filter screens on the filing's best share-class month-1 total return; and holdings_count screens on portfolio breadth. Unknown keys return 400 with the complete legal-key list — the error is the documentation.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| net_assets_gt | body | optional | — | — | Lower bound (exclusive) on Part B net assets (USD) of the fund's latest published month. | 1000000000 |
| net_assets_lt | body | optional | — | — | Upper bound (exclusive) on Part B net assets (USD). | 50000000000 |
| tot_assets_gt | body | optional | — | — | Lower bound (exclusive) on total assets (USD). | 5000000000 |
| tot_assets_lt | body | optional | — | — | Upper bound (exclusive) on total assets (USD). | 100000000000 |
| tot_liabs_gt | body | optional | — | — | Lower bound (exclusive) on total liabilities (USD). | 1000000 |
| tot_liabs_lt | body | optional | — | — | Upper bound (exclusive) on total liabilities (USD). | 500000000 |
| flow_sales_1m_gt | body | optional | — | — | Lower bound (exclusive) on the latest month's investor SALES (subscriptions, USD) from the Part B flow block. Months where the filer reported a non-numeric literal (e.g. "N/A") are excluded from the range test rather than coerced. | 0 |
| flow_sales_1m_lt | body | optional | — | — | Upper bound (exclusive) on the latest month's investor SALES (USD). | 100000000 |
| flow_reinvestment_1m_gt | body | optional | — | — | Lower bound (exclusive) on the latest month's dividend REINVESTMENT flow (USD). | 0 |
| flow_reinvestment_1m_lt | body | optional | — | — | Upper bound (exclusive) on the latest month's dividend REINVESTMENT flow (USD). | 100000000 |
| flow_redemption_1m_gt | body | optional | — | — | Lower bound (exclusive) on the latest month's REDEMPTIONS (USD). | 0 |
| flow_redemption_1m_lt | body | optional | — | — | Upper bound (exclusive) on the latest month's REDEMPTIONS (USD). | 100000000 |
| return_1m_gt | body | optional | — | — | Lower bound (exclusive) on the filing's best share-class month-1 total return (as filed, decimal percent per the form). 'Best' = the max across the fund's share classes for that filing. | 0.02 |
| return_1m_lt | body | optional | — | — | Upper bound (exclusive) on the filing's best share-class month-1 total return. | 0.10 |
| holdings_count_gt | body | optional | — | — | Lower bound (exclusive) on the number of position rows in the latest filing. | 1000 |
| holdings_count_lt | body | optional | — | — | Upper bound (exclusive) on the number of position rows in the latest filing. | 10000 |
| cik | body | optional | — | — | Bound the screen to registrant CIKs (array or comma-string, max 100, bare or padded). | ["1100663"] |
| series_id | body | optional | — | — | Bound the screen to specific series ids (array or comma-string, max 100). | ["S000004310"] |
| limit | body | optional | 100 | — | Rows per page (1-500). | 100 |
| offset | body | optional | 0 | — | Pagination offset. | 0 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data[] | array | no | Matching funds — one row per fund, its latest published month — ordered by net_assets DESC. |
| data[].accession_number | string | no | The latest filing the row's values come from. |
| data[].series_id | string | yes | Fund series id (null for whole-trust filings). |
| data[].series_name | string | yes | Fund name. |
| data[].reg_cik | string | no | Registrant CIK (zero-padded). |
| data[].as_of | string | yes | The latest reporting month the fund has published — per-fund, so different funds' rows can carry different months (each fund is screened on ITS latest report). |
| data[].net_assets | number | yes | Net assets (AUM, USD) — also the sort key. |
| data[].tot_assets | number | yes | Total assets (USD). |
| data[].tot_liabs | number | yes | Total liabilities (USD). |
| data[].return_1m | number | yes | Present only when a return_1m filter was applied: the value that passed the filter (max month-1 class return). |
| data[].holdings_count | integer | yes | Present only when a holdings_count filter was applied. |
| meta.screen | object | no | { grain, filters_applied, cik_list_size, series_list_size } — the applied screen echoed back; grain is 'latest published reporting month per fund'. |
| meta.pagination | object | no | { total: null, limit, offset, has_more } — page forward with offset while has_more is true. |
Sample response
- "status": "success"
- "data":
- "meta":
- "screen":
- "pagination":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl -X POST "https://api.finradar.ai/api/v1/nport/screen?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"net_assets_gt": "1000000000",
"net_assets_lt": "50000000000",
"tot_assets_gt": "5000000000",
"tot_assets_lt": "100000000000",
"tot_liabs_gt": "1000000",
"tot_liabs_lt": "500000000",
"flow_sales_1m_gt": "0",
"flow_sales_1m_lt": "100000000",
"flow_reinvestment_1m_gt": "0",
"flow_reinvestment_1m_lt": "100000000",
"flow_redemption_1m_gt": "0",
"flow_redemption_1m_lt": "100000000",
"return_1m_gt": "0.02",
"return_1m_lt": "0.10",
"holdings_count_gt": "1000",
"holdings_count_lt": "10000",
"cik": "[\"1100663\"]",
"series_id": "[\"S000004310\"]",
"limit": "100",
"offset": "0"
}'Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).