From 42842ca0d9a702eae88ced27d4821e1d8e78b473 Mon Sep 17 00:00:00 2001 From: "violet.wren" Date: Thu, 19 Mar 2026 09:33:36 -0700 Subject: [PATCH] Cosmetic Product Listing API pages --- gatsby-config.js | 1 + package.json | 6 +- src/components/ApiStatus.tsx | 3 + src/components/ApiUsage.tsx | 2 + src/components/DataDictionary.tsx | 3 +- src/components/EndpointBox.tsx | 3 +- src/components/Footer.tsx | 2 +- src/components/Layout.tsx | 2 +- .../RenderContentObject/KeyFacts.tsx | 9 +- src/constants/api.tsx | 4 +- src/constants/endpoint_box.ts | 9 +- .../fields/cosmeticproductlisting.yaml | 50 +++ src/constants/fields/master_fields.yaml | 51 +++ src/constants/file_download.ts | 3 + src/pages/about/updates/updates.yaml | 6 +- src/pages/apis/cosmetic/index.tsx | 4 + .../cosmetic/productlisting/_explorers.yaml | 23 + .../apis/cosmetic/productlisting/_meta.yaml | 13 + .../productlisting/download/index.tsx | 23 + .../example-api-queries/index.tsx | 44 ++ .../how-to-use-the-endpoint/index.tsx | 35 ++ .../apis/cosmetic/productlisting/index.tsx | 39 ++ .../searchable-fields/index.tsx | 24 + .../_examples.json | 414 ++++++++++++++++++ .../understanding-the-api-results/index.tsx | 26 ++ src/pages/apis/doc-links.yaml | 16 + src/pages/data/downloads/index.tsx | 2 + src/types/endpoint.types.ts | 3 +- static/fields/cosmeticproductlisting.yaml | 50 +++ .../cosmeticproductlisting_reference.pdf | Bin 0 -> 38320 bytes .../cosmeticproductlisting_reference.xlsx | Bin 0 -> 11480 bytes 31 files changed, 854 insertions(+), 16 deletions(-) create mode 100644 src/constants/fields/cosmeticproductlisting.yaml create mode 100644 src/pages/apis/cosmetic/productlisting/_explorers.yaml create mode 100644 src/pages/apis/cosmetic/productlisting/_meta.yaml create mode 100644 src/pages/apis/cosmetic/productlisting/download/index.tsx create mode 100644 src/pages/apis/cosmetic/productlisting/example-api-queries/index.tsx create mode 100644 src/pages/apis/cosmetic/productlisting/how-to-use-the-endpoint/index.tsx create mode 100644 src/pages/apis/cosmetic/productlisting/index.tsx create mode 100644 src/pages/apis/cosmetic/productlisting/searchable-fields/index.tsx create mode 100644 src/pages/apis/cosmetic/productlisting/understanding-the-api-results/_examples.json create mode 100644 src/pages/apis/cosmetic/productlisting/understanding-the-api-results/index.tsx create mode 100644 static/fields/cosmeticproductlisting.yaml create mode 100644 static/fields/cosmeticproductlisting_reference.pdf create mode 100644 static/fields/cosmeticproductlisting_reference.xlsx diff --git a/gatsby-config.js b/gatsby-config.js index 05d443417..137c6852c 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,4 +1,5 @@ module.exports = { + pathPrefix: 'productlisting', siteMetadata: { title: `openFDA`, siteUrl: `https://www.open.fda.gov`, diff --git a/package.json b/package.json index 20eaf8252..a38620366 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "author": "Violet Wren, Priyanka Ayer", "scripts": { "dev": "gatsby develop -H 0.0.0.0 -p 3000", - "serve": "gatsby serve -H 0.0.0.0 -p 3000", - "build": "gatsby build --verbose", + "serve": "gatsby serve --prefix-paths -H 0.0.0.0 -p 3000", + "build": "gatsby build --prefix-paths --verbose", "format": "prettier --trailing-comma es5 --no-semi --single-quote --write 'src/**/*.{js,ts,tsx}'", - "develop": "gatsby develop", + "develop": "gatsby develop --prefix-paths", "cy:open": "cypress open", "cy:run": "cypress run", "test:e2e": "start-server-and-test dev http-get://127.0.0.1:3000 cy:open", diff --git a/src/components/ApiStatus.tsx b/src/components/ApiStatus.tsx index a82f47999..1d519e407 100644 --- a/src/components/ApiStatus.tsx +++ b/src/components/ApiStatus.tsx @@ -15,6 +15,7 @@ let endpointKeys = [ 'foodenforcement', 'foodevent', 'cosmeticevent', + 'cosmeticproductlisting', 'drugevent', 'druglabel', 'ndc', @@ -48,6 +49,7 @@ const catMap: Record = Object.freeze({ 'foodenforcement': 'Foods › Enforcement Reports', 'foodevent': 'Foods › Adverse Events', 'cosmeticevent': 'Cosmetics › Adverse Events', + 'cosmeticproductlisting': 'Cosmetics › Product Listing', 'drugevent': 'Drugs › Adverse Events', 'druglabel': 'Drugs › Labeling', 'ndc': 'Drugs › NDC Directory', @@ -80,6 +82,7 @@ const endpointLinkMap: Record = Object.freeze({ 'foodevent': 'food/event', 'foodenforcement': 'food/enforcement', 'cosmeticevent': 'cosmetic/event', + 'cosmeticproductlisting': 'cosmetic/productlisting', 'drugevent': 'drug/event', 'druglabel': 'drug/label', 'ndc': 'drug/ndc', diff --git a/src/components/ApiUsage.tsx b/src/components/ApiUsage.tsx index cbf63a0a3..f418d1188 100644 --- a/src/components/ApiUsage.tsx +++ b/src/components/ApiUsage.tsx @@ -460,6 +460,7 @@ if (!bp.mob && hasWindow) { Cosmetics Adverse Event Reports{this.docCount('cosmeticevent')} + Product Listing{this.docCount('cosmeticproductlisting')} Devices Classifications{this.docCount('deviceclass')} @@ -522,6 +523,7 @@ if (!bp.mob && hasWindow) { Cosmetics Adverse Event Reports{this.downloadCount('cosmeticevent')} + Product Listing{this.downloadCount('cosmeticproductlisting')} Devices diff --git a/src/components/DataDictionary.tsx b/src/components/DataDictionary.tsx index ddb467c93..3c6251490 100644 --- a/src/components/DataDictionary.tsx +++ b/src/components/DataDictionary.tsx @@ -113,7 +113,8 @@ class DataDictionary extends React.Component<{}, DataDictionaryState> { 'crl': 'Complete Response Letters', 'researchpreventionads': 'Prevention Ads Research', 'researchdigitalads': 'Digital Ads Research', - 'researchsmokefree': 'Smokefree Research' + 'researchsmokefree': 'Smokefree Research', + 'productlisting': 'Product Listing' } diff --git a/src/components/EndpointBox.tsx b/src/components/EndpointBox.tsx index 103f58c4f..4db66fbdf 100644 --- a/src/components/EndpointBox.tsx +++ b/src/components/EndpointBox.tsx @@ -32,7 +32,8 @@ const EndpointBox = (props: endpointBoxProps) => { 'event':
}, 'cosmetic': { - 'event':
+ 'event':
, + 'productlisting':
}, 'device': { 'event':
, diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 2abc6f0bd..94a16c70d 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -81,7 +81,7 @@ class Footer extends React.Component { Go to FDA website diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index f191914c7..eab833b71 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -37,7 +37,7 @@ const Layout = (props: LayoutProps) => { up: 'sticky-scroll-up' } - const hasSidebar = props.location.pathname.slice(0, 6) === `/apis/` + const hasSidebar = props.location.pathname.slice(0, 6) === `/apis/` || props.location.pathname.slice(0, 21) === `/productlisting/apis/` return (
diff --git a/src/components/RenderContentObject/KeyFacts.tsx b/src/components/RenderContentObject/KeyFacts.tsx index 6af7a8ec8..0e827c08f 100644 --- a/src/components/RenderContentObject/KeyFacts.tsx +++ b/src/components/RenderContentObject/KeyFacts.tsx @@ -15,7 +15,8 @@ const source: Record> = { 'event': 'Center for Food Safety and Applied Nutrition Adverse Event Reporting System (CAERS)' }, 'cosmetic': { - 'event': 'Cosmetic Adverse Events' + 'event': 'Cosmetic Adverse Events', + 'productlisting': 'Cosmetic Product Listing' }, 'device': { 'event': 'Manufacturer and User Facility Device Experience (MAUDE)', @@ -105,7 +106,8 @@ const timePeriod: any = { 'event': '2004 to' }, 'cosmetic': { - 'event': '2001 to' + 'event': '2001 to', + 'productlisting': 'Last updated on' }, 'device': { 'event': '2009 to', @@ -152,7 +154,8 @@ const frequency = { 'event': 'Quarterly' }, 'cosmetic': { - 'event': 'Infrequently' + 'event': 'Infrequently', + 'productlisting': 'Infrequently' }, 'device': { 'event': 'Weekly', diff --git a/src/constants/api.tsx b/src/constants/api.tsx index 46581b082..2896732ba 100644 --- a/src/constants/api.tsx +++ b/src/constants/api.tsx @@ -1,4 +1,6 @@ -export const API_LINK: string = "https://api.fda.gov" +//export const API_LINK: string = "http://34.199.139.221:8000" +export const API_LINK: string = "https://openfda-api.preprod.fda.gov" +//export const API_LINK: string = "https://api.fda.gov" export const API_NAME: string = "api.fda.gov" export default { API_LINK, diff --git a/src/constants/endpoint_box.ts b/src/constants/endpoint_box.ts index a32c6f2fd..6287e796e 100644 --- a/src/constants/endpoint_box.ts +++ b/src/constants/endpoint_box.ts @@ -11,7 +11,8 @@ export const description: Record> 'event': 'Food, dietary supplement, and cosmetic adverse event reports.' }, 'cosmetic': { - 'event': 'Cosmetic adverse event reports.' + 'event': 'Cosmetic adverse event reports.', + 'productlisting': 'Cosmetic product listing.' }, 'device': { 'event': 'Reports of serious injuries, deaths, malfunctions, and other undesirable effects associated with the use of medical devices.', @@ -58,7 +59,8 @@ export const ep_title: Record>> = 'event': 'CAERS reports' }, 'cosmetic': { - 'event': 'Adverse event reports.' + 'event': 'Adverse event reports.', + 'productlisting': 'Product listing.' }, 'device': { 'event': 'Adverse event reports', @@ -115,7 +117,8 @@ export const ep_path: Record>> = 'event': '/apis/food/event/' }, 'cosmetic': { - 'event': '/apis/cosmetic/event/' + 'event': '/apis/cosmetic/event/', + 'productlisting': '/apis/cosmetic/productlisting/' }, 'device': { 'event': '/apis/device/event/', diff --git a/src/constants/fields/cosmeticproductlisting.yaml b/src/constants/fields/cosmeticproductlisting.yaml new file mode 100644 index 000000000..8ea4f5596 --- /dev/null +++ b/src/constants/fields/cosmeticproductlisting.yaml @@ -0,0 +1,50 @@ +properties: + responsible_person_name: + description: "The manufacturer, packer, or distributor of a cosmetic product whose name appears on the label of such cosmetic product in accordance with section 609(a) of the FD&C Act or section 4(a) of the Fair Packaging and Labeling Act." + format: + is_exact: true + possible_values: + type: string + responsible_person_duns: + description: "The Data Universal Numbering System (DUNS) number for the responsible person's address listed on the product label. The DUNS Number is a unique nine-digit identification number provided by Dun & Bradstreet (D&B) and is site-specific." + format: + is_exact: true + possible_values: + type: string + business_type: + description: "The responsible person type of business as listed on label (i.e., manufacturer, packer, and/or distributor)." + format: + is_exact: true + possible_values: + type: string + product_name: + description: "The name for the cosmetic product as such name appears on the label. This is the statement of identity as required under 21 CFR 701.11, which provides information about the type or kind of cosmetic product in the package to help the consumer understand the functional use of the product." + format: + is_exact: true + possible_values: + type: string + category_names: + description: "The applicable cosmetic category or categories for the cosmetic product as listed in Appendix A of the guidance document." + format: + is_exact: true + possible_values: + type: string + ingredients: + description: "A list of ingredients in the cosmetic product, including any fragrances, flavors, or colors, with each ingredient identified by the name as required under section 701.3 of title 21, Code of Federal Regulations (or any successor regulations), or by the common or usual name of the ingredient." + format: + is_exact: true + possible_values: + type: string + fragrance_or_flavor: + description: "Information indicating whether the product contains fragrance, flavor, both fragrance and flavor, or neither." + format: + is_exact: true + possible_values: + type: string + product_url: + description: "The webpage link for the cosmetic product." + format: + is_exact: true + possible_values: + type: string +type: object diff --git a/src/constants/fields/master_fields.yaml b/src/constants/fields/master_fields.yaml index fab61c376..cf17f8e83 100644 --- a/src/constants/fields/master_fields.yaml +++ b/src/constants/fields/master_fields.yaml @@ -667,6 +667,57 @@ cosmetic: type: string type: array type: object + productlisting: + properties: + responsible_person_name: + description: "The manufacturer, packer, or distributor of a cosmetic product whose name appears on the label of such cosmetic product in accordance with section 609(a) of the FD&C Act or section 4(a) of the Fair Packaging and Labeling Act." + format: + is_exact: true + possible_values: + type: string + responsible_person_duns: + description: "The Data Universal Numbering System (DUNS) number for the responsible person's address listed on the product label. The DUNS Number is a unique nine-digit identification number provided by Dun & Bradstreet (D&B) and is site-specific." + format: + is_exact: true + possible_values: + type: string + business_type: + description: "The responsible person type of business as listed on label (i.e., manufacturer, packer, and/or distributor)." + format: + is_exact: true + possible_values: + type: string + product_name: + description: "The name for the cosmetic product as such name appears on the label. This is the statement of identity as required under 21 CFR 701.11, which provides information about the type or kind of cosmetic product in the package to help the consumer understand the functional use of the product." + format: + is_exact: true + possible_values: + type: string + category_names: + description: "The applicable cosmetic category or categories for the cosmetic product as listed in Appendix A of the guidance document." + format: + is_exact: true + possible_values: + type: string + ingredients: + description: "A list of ingredients in the cosmetic product, including any fragrances, flavors, or colors, with each ingredient identified by the name as required under section 701.3 of title 21, Code of Federal Regulations (or any successor regulations), or by the common or usual name of the ingredient." + format: + is_exact: true + possible_values: + type: string + fragrance_or_flavor: + description: "Information indicating whether the product contains fragrance, flavor, both fragrance and flavor, or neither." + format: + is_exact: true + possible_values: + type: string + product_url: + description: "The webpage link for the cosmetic product." + format: + is_exact: true + possible_values: + type: string + type: object device: classification: properties: diff --git a/src/constants/file_download.ts b/src/constants/file_download.ts index 4c6ca2328..26fa9fc67 100644 --- a/src/constants/file_download.ts +++ b/src/constants/file_download.ts @@ -4,6 +4,7 @@ export const pdfDownloadMap: Readonly> = Object.freeze({ 'foodevent': '/fields/foodevent_reference.pdf', 'foodenforcement': '/fields/foodenforcement_reference.pdf', 'cosmeticevent': '/fields/cosmeticevent_reference.pdf', + 'cosmeticproductlisting': '/fields/cosmeticproductisting_reference.pdf', 'drugevent': '/fields/drugevent_reference.pdf', 'druglabel': '/fields/druglabel_reference.pdf', 'drugndc': '/fields/drugndc_reference.pdf', @@ -31,6 +32,7 @@ export const xlsxDownloadMap: Readonly> = Object.freeze({ 'foodevent': '/fields/foodevent_reference.xlsx', 'foodenforcement': '/fields/foodenforcement_reference.xlsx', 'cosmeticevent': '/fields/cosmeticevent_reference.xlsx', + 'cosmeticproductlisting': '/fields/cosmeticproductlisting_reference.xlsx', 'drugevent': '/fields/drugevent_reference.xlsx', 'druglabel': '/fields/druglabel_reference.xlsx', 'drugndc': '/fields/drugndc_reference.xlsx', @@ -58,6 +60,7 @@ export const yamlDownloadMap: Readonly> = Object.freeze({ 'foodevent': '/fields/foodevent.yaml', 'foodenforcement': '/fields/foodenforcement.yaml', 'cosmeticevent': '/fields/cosmeticevent.yaml', + 'cosmeticproductlisting': '/fields/cosmeticproductlisting.yaml', 'drugevent': '/fields/drugevent.yaml', 'druglabel': '/fields/druglabel.yaml', 'drugndc': '/fields/drugndc.yaml', diff --git a/src/pages/about/updates/updates.yaml b/src/pages/about/updates/updates.yaml index 24cf9c65e..f8d1abca2 100644 --- a/src/pages/about/updates/updates.yaml +++ b/src/pages/about/updates/updates.yaml @@ -162,4 +162,8 @@ updates: - title: "New openFDA Dataset - Tobacco Smokefree Research" path: /apis/tobacco/researchsmokefree/ date: 2026-03-11 - desc: "The dataset Tobacco Smokefree Research is now available." \ No newline at end of file + desc: "The dataset Tobacco Smokefree Research is now available." + - title: "New openFDA Dataset - Cosmetic Product Listing" + path: /apis/cosmetic/productlisting/ + date: 2026-03-27 + desc: "The dataset Cosmetic Product Listing is now available." \ No newline at end of file diff --git a/src/pages/apis/cosmetic/index.tsx b/src/pages/apis/cosmetic/index.tsx index 5e6e2c193..9ecfce560 100644 --- a/src/pages/apis/cosmetic/index.tsx +++ b/src/pages/apis/cosmetic/index.tsx @@ -11,6 +11,10 @@ export default () => ( noun_name='cosmetic' endpoint_name='event' /> +
diff --git a/src/pages/apis/cosmetic/productlisting/_explorers.yaml b/src/pages/apis/cosmetic/productlisting/_explorers.yaml new file mode 100644 index 000000000..206101efb --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/_explorers.yaml @@ -0,0 +1,23 @@ +oneRecord: + title: One Cosmetic Product Listing + params: + - Search for all records and display one. + - limit to 1 record. + description: + - This query searches for all records and asks for a single one. + query: 'https://openfda-api.preprod.fda.gov/cosmetic/productlisting.json?limit=1' +fragrances: + title: Fragrance Products + description: + - This query searches for all Fragrance records. + params: + - search for all records with fragrance_or_flavor equal to Fragrance. + - Limit to 6 records. + query: 'https://openfda-api.preprod.fda.gov/cosmetic/productlisting.json?search=fragrance_or_flavor:"Fragrance"' +categoryNames: + title: Count Records by Category + description: + - The suffix .exact is required by openFDA to count the unique full phrases in the field product. Without it, the API will count each word in that field individually. + params: + - count the records associated with each category + query: 'https://openfda-api.preprod.fda.gov/cosmetic/productlisting.json?count=category_names.exact' diff --git a/src/pages/apis/cosmetic/productlisting/_meta.yaml b/src/pages/apis/cosmetic/productlisting/_meta.yaml new file mode 100644 index 000000000..a536133e4 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/_meta.yaml @@ -0,0 +1,13 @@ +documentTitle: openFDA › Cosmetic › Product Listing API +name: Cosmetic Product Listing +description: 'This dataset provides a product listing for cosmetics.' +datasets: + - cosmeticproductlisting +label: Cosmetic Product Listing +title: Cosmetic Product Listing +path: /apis/cosmetic/productlisting +api_path: /cosmetic/productlisting +start: 20170101 +status: cosmeticproductlisting +dateConstraintKey: +type: endpoint diff --git a/src/pages/apis/cosmetic/productlisting/download/index.tsx b/src/pages/apis/cosmetic/productlisting/download/index.tsx new file mode 100644 index 000000000..a8369c404 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/download/index.tsx @@ -0,0 +1,23 @@ +import React from "react" +import Link from "gatsby-link" + +import Downloads from '../../../../../components/Downloads' + +import meta from '../_meta.yaml' + +class IndexRoute extends React.Component { + render () { + + return ( +
+

Download the dataset

+

Use the links below to download the dataset manually, or review the Downloads documentation for more information about other download methods.

+ +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/cosmetic/productlisting/example-api-queries/index.tsx b/src/pages/apis/cosmetic/productlisting/example-api-queries/index.tsx new file mode 100644 index 000000000..4078c4443 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/example-api-queries/index.tsx @@ -0,0 +1,44 @@ +import React from "react" + +import QueryTour from '../../../../../components/QueryTour' +import explorers from '../_explorers.yaml' + +class IndexRoute extends React.Component { + render () { + + const oneRecord = explorers.oneRecord + const fragrances = explorers.fragrances + const categoryNames = explorers.categoryNames + + return ( +
+

Example Cosmetic Product Listing API queries

+

To help get you started, we have provided some API query examples below. Use the Run query button to call the API and get back results. You can experiment by editing the example queries in the black text box.

+ + + + +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/cosmetic/productlisting/how-to-use-the-endpoint/index.tsx b/src/pages/apis/cosmetic/productlisting/how-to-use-the-endpoint/index.tsx new file mode 100644 index 000000000..91498c266 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/how-to-use-the-endpoint/index.tsx @@ -0,0 +1,35 @@ +import React from "react" +import Link from "gatsby-link" + +import APIUseSteps from "../../../../../components/APIUseSteps" +import APIQueryBreakdown from "../../../../../components/APIQueryBreakdown" + + +class IndexRoute extends React.Component { + render () { + + return ( +
+

How to use the API

+

Getting started with and learning how to use the API is relatively straightforward. Here are some recommended steps:

+ +

Then, when you are ready, obtain an API Key. While you don’t need an API Key to try or use the API, we recommend you get one if you are planning to use the API on a regular basis. For more information on API Keys, see the Authentication documentation.

+ +

Making a simple API Call

+

You can call the API from a web browser. Simply type a valid API query in your browser’s address bar and press the Enter key.

+

In the example below, we are searching the records in the cosmetic product listing endpoint for matches with fragrance_or_flavor with the value Fragrance. We are requesting to see the first 5 records that match."

+ + +

Some key pointers

+
    +
  • An openFDA API query always begins with the base endpoint, which in this case is: https://api.fda.gov/cosmetic/productlisting.json
  • +
  • Searches have a special syntax: search=field:term
  • +
  • Unless otherwise specified, the API will return only one matching record for a search. You can specify the number of records to be returned by using the limit parameter. The maximum limit allowed is 1000 for any single API call. If no limit is set, the API will return one matching record.
  • +
+

It is possible to construct very complex queries using the openFDA API. Review the Construct the query documentation to learn more about all the available query parameters, how to handle quotations, spaces, phrase matches, and groupings, how to search on dates and ranges, and more.

+
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/cosmetic/productlisting/index.tsx b/src/pages/apis/cosmetic/productlisting/index.tsx new file mode 100644 index 000000000..44709a21a --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/index.tsx @@ -0,0 +1,39 @@ +import React from "react" +import Link from "gatsby-link" + +import KeyFacts from '../../../../components/RenderContentObject/KeyFacts' +import meta from './_meta.yaml' + +class IndexRoute extends React.Component { + render () { + + return ( +
+

Cosmetic Product Listing Overview

+

+ A responsible person must list each marketed cosmetic product with FDA, including product ingredients, and + provide any updates annually. +

+

+ Responsible person means the manufacturer, packer, or distributor of a cosmetic product whose name appears on + the label of such cosmetic product in accordance with section 609(a) of the FD&C Act or section 4(a) of the + Fair Packaging and Labeling Act. +

+ +

This dataset provides a product listing for cosmetics.

+ + + +

Responsible use of the data

+

Do not rely on openFDA to make decisions regarding medical care. Always speak to your health provider about the risks and benefits of FDA-regulated products. We may limit or otherwise restrict your access to the API in line with our Terms of Service.

+
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/cosmetic/productlisting/searchable-fields/index.tsx b/src/pages/apis/cosmetic/productlisting/searchable-fields/index.tsx new file mode 100644 index 000000000..1eb015348 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/searchable-fields/index.tsx @@ -0,0 +1,24 @@ +import React from "react" + +import FieldExplorer from '../../../../../components/FieldExplorer' + +import meta from '../_meta.yaml' +import fields from '../../../../../constants/fields/cosmeticproductlisting.yaml' + +class IndexRoute extends React.Component { + render () { + + return ( +
+

Searchable Fields

+

Use the fields explorer below to find detailed explanations of every field in the dataset.

+ +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/_examples.json b/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/_examples.json new file mode 100644 index 000000000..a1340b5c6 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/_examples.json @@ -0,0 +1,414 @@ +{ + "count": [ + { + "meta": { + "disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.", + "terms": "https://open.fda.gov/terms/", + "license": "https://open.fda.gov/license/", + "last_updated": "2015-01-01" + }, + "results": [ + { + "term": "(05) Fragrance preparations(05B) Perfumes(10) Manicuring preparations(10E) Nail polishes and enamels", + "count": 9048 + }, + { + "term": "(05) Fragrance preparations(05B) Perfumes", + "count": 6344 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08E) Lipsticks and lip glosses", + "count": 5281 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14F) Moisturizing", + "count": 2945 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03C) Eye shadows", + "count": 2917 + }, + { + "term": "(10) Manicuring preparations(10E) Nail polishes and enamels", + "count": 2910 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14J1) Other skin care preparations, leave-on", + "count": 2749 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on", + "count": 1675 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08C1) Foundations, traditional applications", + "count": 1616 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)", + "count": 1444 + }, + { + "term": "(10) Manicuring preparations(10G) Other manicuring preparations", + "count": 1370 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03B) Eyeliners", + "count": 1284 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14A) Cleansing (cold creams, cleansing lotions, liquids, and pads)", + "count": 965 + }, + { + "term": "(12) Personal cleanliness(12A) Bath soaps and body washes", + "count": 912 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03F) False eyelashes", + "count": 905 + }, + { + "term": "(06) Hair preparations (non-coloring)(06I1) Other hair preparations, leave-on", + "count": 824 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08D1) Leg and body paints, traditional applications", + "count": 752 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08B) Face powders", + "count": 674 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03A) Eyebrow pencils", + "count": 650 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14D1) Body and hand (excluding shaving preparations), leave-on", + "count": 605 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03G) Mascaras", + "count": 576 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08H1) Other makeup preparations, traditional applications", + "count": 547 + }, + { + "term": "(06) Hair preparations (non-coloring)(06F2) Shampoos (non-coloring), rinse-off", + "count": 451 + }, + { + "term": "(05) Fragrance preparations(05D) Other fragrance preparations", + "count": 436 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03K) Other eye makeup preparations", + "count": 327 + }, + { + "term": "(05) Fragrance preparations(05D) Other fragrance preparations(14) Skin care preparations (creams, lotions, powder, and sprays)(14J1) Other skin care preparations, leave-on(17) Other preparations (i.e., those preparations that do not fit another category)", + "count": 312 + }, + { + "term": "(06) Hair preparations (non-coloring)(06A2) Hair conditioners, rinse-off", + "count": 305 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03H) Eyelash and eyebrow adhesives, glues, and sealants", + "count": 301 + }, + { + "term": "(17) Other preparations (i.e., those preparations that do not fit another category)", + "count": 299 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C2) Face and neck (excluding shaving preparations), rinse-off", + "count": 281 + }, + { + "term": "(07) Hair coloring preparations(07B) Hair tints", + "count": 275 + }, + { + "term": "(12) Personal cleanliness(12F2) Other personal cleanliness products, rinse-off", + "count": 268 + }, + { + "term": "(06) Hair preparations (non-coloring)(06G) Tonics, dressings, and other hair grooming aids", + "count": 259 + }, + { + "term": "(07) Hair coloring preparations(07A) Hair dyes and colors (all types requiring caution statement and patch test)", + "count": 235 + }, + { + "term": "(12) Personal cleanliness(12F2) Other personal cleanliness products, rinse-off(14) Skin care preparations (creams, lotions, powder, and sprays)(14F) Moisturizing", + "count": 207 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08F1) Makeup bases, traditional applications", + "count": 206 + }, + { + "term": "(10) Manicuring preparations(10A) Basecoats and undercoats", + "count": 198 + }, + { + "term": "(02) Bath preparations(02A) Bath oils, tablets, and salts", + "count": 192 + }, + { + "term": "(02) Bath preparations(02D) Other bath preparations", + "count": 188 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03C) Eye shadows(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)", + "count": 186 + }, + { + "term": "(10) Manicuring preparations(10A) Basecoats and undercoats(10B) Cuticle softeners(10C) Nail creams and lotions(10D) Nail extenders(10E) Nail polishes and enamels(10F) Nail polish and enamel removers(10G) Other manicuring preparations", + "count": 185 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08G) Makeup fixatives", + "count": 181 + }, + { + "term": "(11) Oral products(11C) Other oral products", + "count": 181 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03F) False eyelashes(03H) Eyelash and eyebrow adhesives, glues, and sealants", + "count": 175 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14J2) Other skin care preparations, rinse-off", + "count": 172 + }, + { + "term": "(06) Hair preparations (non-coloring)(06I2) Other hair preparations, rinse-off", + "count": 168 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on(14F) Moisturizing", + "count": 164 + }, + { + "term": "(05) Fragrance preparations(05A) Colognes and toilet waters", + "count": 159 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03I) Eyelash and eyebrow preparations (primers, conditioners, serums, fortifiers)", + "count": 156 + }, + { + "term": "(10) Manicuring preparations(10F) Nail polish and enamel removers", + "count": 154 + }, + { + "term": "(10) Manicuring preparations(10D) Nail extenders", + "count": 147 + }, + { + "term": "(06) Hair preparations (non-coloring)(06A1) Hair conditioners, leave-on", + "count": 143 + }, + { + "term": "(06) Hair preparations (non-coloring)(06E) Rinses (non-coloring)", + "count": 137 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14D1) Body and hand (excluding shaving preparations), leave-on(14F) Moisturizing", + "count": 137 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14H) Paste masks (mud packs)", + "count": 137 + }, + { + "term": "(12) Personal cleanliness(12B1) Deodorants (underarm), sticks, roll-ons, gels, creams, and wipes", + "count": 128 + }, + { + "term": "(07) Hair coloring preparations(07A) Hair dyes and colors (all types requiring caution statement and patch test)(07B) Hair tints", + "count": 124 + }, + { + "term": "(06) Hair preparations (non-coloring)(06B) Hair sprays (aerosol fixatives)", + "count": 121 + }, + { + "term": "(11) Oral products(11A) Dentifrices (aerosols, liquids, pastes, and powders)", + "count": 120 + }, + { + "term": "(12) Personal cleanliness(12F1) Other personal cleanliness products, leave-on", + "count": 118 + }, + { + "term": "(07) Hair coloring preparations(07A) Hair dyes and colors (all types requiring caution statement and patch test)(07I2) Other hair coloring preparations, rinse-off", + "count": 116 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14D2) Body and hand (excluding shaving preparations), rinse-off", + "count": 113 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14F) Moisturizing(14J1) Other skin care preparations, leave-on", + "count": 107 + }, + { + "term": "(15) Suntan preparations(15A) Suntan gels, creams, and liquids", + "count": 100 + }, + { + "term": "(07) Hair coloring preparations(07I2) Other hair coloring preparations, rinse-off", + "count": 98 + }, + { + "term": "(12) Personal cleanliness(12E) Disposable wipes", + "count": 97 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14A) Cleansing (cold creams, cleansing lotions, liquids, and pads)(14C1) Face and neck (excluding shaving preparations), leave-on(14D1) Body and hand (excluding shaving preparations), leave-on(14I) Skin fresheners", + "count": 83 + }, + { + "term": "(05) Fragrance preparations(05A) Colognes and toilet waters(05B) Perfumes", + "count": 78 + }, + { + "term": "(07) Hair coloring preparations(07D2) Hair shampoos (coloring), rinse-off", + "count": 77 + }, + { + "term": "(05) Fragrance preparations(05A) Colognes and toilet waters(05B) Perfumes(05D) Other fragrance preparations", + "count": 73 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03A) Eyebrow pencils(03B) Eyeliners(03C) Eye shadows(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)(08C1) Foundations, traditional applications(08E) Lipsticks and lip glosses(08G) Makeup fixatives", + "count": 72 + }, + { + "term": "(16) Tattoo preparations(16C) Other tattoo preparations", + "count": 72 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03A) Eyebrow pencils(03B) Eyeliners(03C) Eye shadows(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)(08B) Face powders(08E) Lipsticks and lip glosses", + "count": 66 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)(08E) Lipsticks and lip glosses", + "count": 65 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03D) Eye lotions", + "count": 64 + }, + { + "term": "(16) Tattoo preparations(16B) Temporary tattoo inks", + "count": 61 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on(14D1) Body and hand (excluding shaving preparations), leave-on(14F) Moisturizing", + "count": 57 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14I) Skin fresheners", + "count": 57 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08B) Face powders(08C1) Foundations, traditional applications", + "count": 55 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03B) Eyeliners(03C) Eye shadows", + "count": 53 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14B) Depilatories", + "count": 50 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14A) Cleansing (cold creams, cleansing lotions, liquids, and pads)(14C2) Face and neck (excluding shaving preparations), rinse-off", + "count": 49 + }, + { + "term": "(16) Tattoo preparations(16A) Permanent tattoo inks", + "count": 49 + }, + { + "term": "(06) Hair preparations (non-coloring)(06C) Hair straighteners", + "count": 48 + }, + { + "term": "(07) Hair coloring preparations(07G) Hair bleaches", + "count": 48 + }, + { + "term": "(01) Baby products(01B) Lotions, oils, powders, and creams", + "count": 46 + }, + { + "term": "(12) Personal cleanliness(12C) Douches", + "count": 46 + }, + { + "term": "(02) Bath preparations(02B) Bubble baths", + "count": 45 + }, + { + "term": "(07) Hair coloring preparations(07C1) Hair rinses (coloring), leave-on", + "count": 44 + }, + { + "term": "(07) Hair coloring preparations(07C2) Hair rinses (coloring), rinse-off", + "count": 44 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03E) Eye makeup removers(03F) False eyelashes(03H) Eyelash and eyebrow adhesives, glues, and sealants", + "count": 43 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on(14D1) Body and hand (excluding shaving preparations), leave-on(14J1) Other skin care preparations, leave-on", + "count": 43 + }, + { + "term": "(11) Oral products(11B) Mouthwashes and breath fresheners (liquids and sprays)", + "count": 41 + }, + { + "term": "(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on(14D1) Body and hand (excluding shaving preparations), leave-on", + "count": 40 + }, + { + "term": "(03) Eye makeup preparations (other than children's eye makeup preparations)(03E) Eye makeup removers", + "count": 39 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08C1) Foundations, traditional applications(08C2) Foundations, airbrush applications", + "count": 39 + }, + { + "term": "(10) Manicuring preparations(10C) Nail creams and lotions", + "count": 39 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08E) Lipsticks and lip glosses(14) Skin care preparations (creams, lotions, powder, and sprays)(14C1) Face and neck (excluding shaving preparations), leave-on", + "count": 38 + }, + { + "term": "(02) Bath preparations(02B) Bubble baths(14) Skin care preparations (creams, lotions, powder, and sprays)(14F) Moisturizing", + "count": 36 + }, + { + "term": "(08) Makeup preparations (not eye)(other than makeup preparations for children)(08A) Blushers and rouges (all types)(08B) Face powders", + "count": 36 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/index.tsx b/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/index.tsx new file mode 100644 index 000000000..a2e5cb180 --- /dev/null +++ b/src/pages/apis/cosmetic/productlisting/understanding-the-api-results/index.tsx @@ -0,0 +1,26 @@ +import React from "react" +import Highlight from 'react-highlight.js' + +import examples from './_examples.json' + +class IndexRoute extends React.Component { + render () { + const example: string = JSON.stringify(examples.count, null, ' ') || '' + + return ( +
+

Understanding the API Results

+

For search queries (such as: https://api.fda.gov/cosmetic/productlisting.json?search=fragrance_or_flavor:"Fragrance"), the results section includes matching records returned by the API.

+ +

For count queries (such as: https://api.fda.gov/cosmetic/productlisting.json?count=category_names.exact), the results section will look something like the following:

+ + {example} + +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/doc-links.yaml b/src/pages/apis/doc-links.yaml index c90fc918d..47febf992 100644 --- a/src/pages/apis/doc-links.yaml +++ b/src/pages/apis/doc-links.yaml @@ -414,6 +414,22 @@ link: /apis/cosmetic/event/download/ - title: Searchable fields link: /apis/cosmetic/event/searchable-fields/ + - title: Cosmetic Events + id: cosmetic-product-listing + collapse: true + items: + - title: Overview + link: /apis/cosmetic/productlisting/ + - title: How to use the API + link: /apis/cosmetic/productlisting/how-to-use-the-endpoint/ + - title: Example API queries + link: /apis/cosmetic/productlisting/example-api-queries/ + - title: Understanding the API Results + link: /apis/cosmetic/productlisting/understanding-the-api-results/ + - title: Download the dataset + link: /apis/cosmetic/productlisting/download/ + - title: Searchable fields + link: /apis/cosmetic/productlisting/searchable-fields/ - title: Other API Endpoints id: other-api-endpoints diff --git a/src/pages/data/downloads/index.tsx b/src/pages/data/downloads/index.tsx index 92a942725..2548a99b6 100644 --- a/src/pages/data/downloads/index.tsx +++ b/src/pages/data/downloads/index.tsx @@ -9,6 +9,7 @@ import SideBarContainer from '../../../containers/SideBarContainer' import animalandveterinary_event_meta from '../../apis/animalandveterinary/event/_meta.yaml' import cosmetic_event_meta from '../../apis/cosmetic/event/_meta.yaml' +import cosmetic_productlisting_meta from '../../apis/cosmetic/productlisting/_meta.yaml' import food_enforcement_meta from '../../apis/food/enforcement/_meta.yaml' import food_event_meta from '../../apis/food/event/_meta.yaml' import drug_enforcement_meta from '../../apis/drug/enforcement/_meta.yaml' @@ -43,6 +44,7 @@ const endpoint_list = { 'Animal And Veterinary Event': animalandveterinary_event_meta, 'Cosmetics': 'cosmetic_header', 'Cosmetic Event': cosmetic_event_meta, + 'Cosmetic Product Listing': cosmetic_productlisting_meta, 'Food': 'food_header', 'Food Enforcement': food_enforcement_meta, 'Food Event': food_event_meta, diff --git a/src/types/endpoint.types.ts b/src/types/endpoint.types.ts index cc047395f..ae3a0715c 100644 --- a/src/types/endpoint.types.ts +++ b/src/types/endpoint.types.ts @@ -23,7 +23,8 @@ export type EndpointName = | 'researchdigitalads' | 'researchsmokefree' | 'crl' - | 'completeresponseletters'; + | 'completeresponseletters' + | 'productlisting'; export type endpointBoxProps = { noun_name: NounName, diff --git a/static/fields/cosmeticproductlisting.yaml b/static/fields/cosmeticproductlisting.yaml new file mode 100644 index 000000000..8ea4f5596 --- /dev/null +++ b/static/fields/cosmeticproductlisting.yaml @@ -0,0 +1,50 @@ +properties: + responsible_person_name: + description: "The manufacturer, packer, or distributor of a cosmetic product whose name appears on the label of such cosmetic product in accordance with section 609(a) of the FD&C Act or section 4(a) of the Fair Packaging and Labeling Act." + format: + is_exact: true + possible_values: + type: string + responsible_person_duns: + description: "The Data Universal Numbering System (DUNS) number for the responsible person's address listed on the product label. The DUNS Number is a unique nine-digit identification number provided by Dun & Bradstreet (D&B) and is site-specific." + format: + is_exact: true + possible_values: + type: string + business_type: + description: "The responsible person type of business as listed on label (i.e., manufacturer, packer, and/or distributor)." + format: + is_exact: true + possible_values: + type: string + product_name: + description: "The name for the cosmetic product as such name appears on the label. This is the statement of identity as required under 21 CFR 701.11, which provides information about the type or kind of cosmetic product in the package to help the consumer understand the functional use of the product." + format: + is_exact: true + possible_values: + type: string + category_names: + description: "The applicable cosmetic category or categories for the cosmetic product as listed in Appendix A of the guidance document." + format: + is_exact: true + possible_values: + type: string + ingredients: + description: "A list of ingredients in the cosmetic product, including any fragrances, flavors, or colors, with each ingredient identified by the name as required under section 701.3 of title 21, Code of Federal Regulations (or any successor regulations), or by the common or usual name of the ingredient." + format: + is_exact: true + possible_values: + type: string + fragrance_or_flavor: + description: "Information indicating whether the product contains fragrance, flavor, both fragrance and flavor, or neither." + format: + is_exact: true + possible_values: + type: string + product_url: + description: "The webpage link for the cosmetic product." + format: + is_exact: true + possible_values: + type: string +type: object diff --git a/static/fields/cosmeticproductlisting_reference.pdf b/static/fields/cosmeticproductlisting_reference.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b28f2b35bc2a58b4d10985b40f1691ac30323383 GIT binary patch literal 38320 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 U7Bad303u}fgZO)4hM&Lw9~47@D*ylh literal 0 HcmV?d00001