Skip to content
/api/v1/nport/screen

Cross-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.

10 tokensoffset paginationSince 3.139.0

Why use this

One structured query across every fund's most recent monthly report. Composable _gt/_lt ranges AND-combine; results return the screened scalars per fund, ordered by net assets descending.

Common use case

Finding funds above $1B AUM with net redemptions last month, screening a fund family (cik=...) by size, or pulling the largest funds by AUM in one call.

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

NameInRequiredDefaultAllowedDescriptionExample
net_assets_gtbodyoptionalLower bound (exclusive) on Part B net assets (USD) of the fund's latest published month.1000000000
net_assets_ltbodyoptionalUpper bound (exclusive) on Part B net assets (USD).50000000000
tot_assets_gtbodyoptionalLower bound (exclusive) on total assets (USD).5000000000
tot_assets_ltbodyoptionalUpper bound (exclusive) on total assets (USD).100000000000
tot_liabs_gtbodyoptionalLower bound (exclusive) on total liabilities (USD).1000000
tot_liabs_ltbodyoptionalUpper bound (exclusive) on total liabilities (USD).500000000
flow_sales_1m_gtbodyoptionalLower 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_ltbodyoptionalUpper bound (exclusive) on the latest month's investor SALES (USD).100000000
flow_reinvestment_1m_gtbodyoptionalLower bound (exclusive) on the latest month's dividend REINVESTMENT flow (USD).0
flow_reinvestment_1m_ltbodyoptionalUpper bound (exclusive) on the latest month's dividend REINVESTMENT flow (USD).100000000
flow_redemption_1m_gtbodyoptionalLower bound (exclusive) on the latest month's REDEMPTIONS (USD).0
flow_redemption_1m_ltbodyoptionalUpper bound (exclusive) on the latest month's REDEMPTIONS (USD).100000000
return_1m_gtbodyoptionalLower 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_ltbodyoptionalUpper bound (exclusive) on the filing's best share-class month-1 total return.0.10
holdings_count_gtbodyoptionalLower bound (exclusive) on the number of position rows in the latest filing.1000
holdings_count_ltbodyoptionalUpper bound (exclusive) on the number of position rows in the latest filing.10000
cikbodyoptionalBound the screen to registrant CIKs (array or comma-string, max 100, bare or padded).["1100663"]
series_idbodyoptionalBound the screen to specific series ids (array or comma-string, max 100).["S000004310"]
limitbodyoptional100Rows per page (1-500).100
offsetbodyoptional0Pagination offset.0

Response schema

FieldTypeNullableDescription
data[]arraynoMatching funds — one row per fund, its latest published month — ordered by net_assets DESC.
data[].accession_numberstringnoThe latest filing the row's values come from.
data[].series_idstringyesFund series id (null for whole-trust filings).
data[].series_namestringyesFund name.
data[].reg_cikstringnoRegistrant CIK (zero-padded).
data[].as_ofstringyesThe 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_assetsnumberyesNet assets (AUM, USD) — also the sort key.
data[].tot_assetsnumberyesTotal assets (USD).
data[].tot_liabsnumberyesTotal liabilities (USD).
data[].return_1mnumberyesPresent only when a return_1m filter was applied: the value that passed the filter (max month-1 class return).
data[].holdings_countintegeryesPresent only when a holdings_count filter was applied.
meta.screenobjectno{ grain, filters_applied, cik_list_size, series_list_size } — the applied screen echoed back; grain is 'latest published reporting month per fund'.
meta.paginationobjectno{ total: null, limit, offset, has_more } — page forward with offset while has_more is true.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "screen":
    • "pagination":
    }
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected 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).