List products
Search products across all vendors.
GET/api/v1/products
A cross-vendor product search ranked by CVE count. The required q filter (minimum two characters) matches product names; narrow to a single vendor with the vendor parameter. The same product name under different vendors returns as distinct rows.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | Required. Substring match on the product name (minimum 2 characters). |
vendor | query | string | Restrict to one vendor key. |
limit | query | integer | Page size, 1–100. Default: 25. |
Example request
curl "https://radicalnotion.ai/api/v1/products?q=react" \
-H "Authorization: Bearer $RN_TOKEN"Example response
{
"data": [
{
"slug": "react-router",
"display": "react-router",
"vendor": "remixrun",
"vendor_display": "remix-run",
"cve_count": 16
},
{
"slug": "react-router",
"display": "react-router",
"vendor": "shopify",
"vendor_display": "shopify",
"cve_count": 11
},
{
"slug": "react-server-dom-webpack",
"display": "react-server-dom-webpack",
"vendor": "meta",
"vendor_display": "Meta",
"cve_count": 8
},
{
"slug": "react-server-dom-parcel",
"display": "react-server-dom-parcel",
"vendor": "meta",
"vendor_display": "Meta",
"cve_count": 8
},
{
"slug": "react-server-dom-turbopack",
"display": "react-server-dom-turbopack",
"vendor": "meta",
"vendor_display": "Meta",
"cve_count": 8
},
{
"slug": "react",
"display": "react",
"vendor": "facebook",
"vendor_display": "facebook",
"cve_count": 7
}
],
"pagination": {
"limit": 25,
"next_cursor": null
}
}Response schema
| Field | Type | Description |
|---|---|---|
data[].slug / display | string | Product key and display name. |
data[].vendor / vendor_display | string | Owning vendor key and display name. |
data[].cve_count | integer | CVEs affecting the product. |
pagination.next_cursor | string | null | Null — this list is not cursor-paged. |
Responses
| Status | Meaning |
|---|---|
200 | Success. |
400 | A path or query parameter failed validation. |
401 | Missing or invalid access token. |
429 | Rate limit exceeded. |
No product matches — empty data.
{
"data": [],
"pagination": { "limit": 25, "next_cursor": null }
}