Release 0.0.5
Proof-point time series include every empty bucket in the requested period. Brand facts add a directory read, mostly perfume brands for now. Fragrance family, fragrance group, fragrance note group, and fragrance note facts add directory reads.
Proof-point time series now return the full period you ask for. A bucket with no proof points has a count of 0, so a chart from 2010 through 2025 can be drawn without filling in missing years.
This is a response change on the time-series routes introduced in Release 0.0.1. Request bodies are unchanged. Project activity time series already returned every bucket and is unchanged.
What you get back
labels and counts stay aligned. weightedCounts, when you asked for them, is 0 on the same empty buckets.
| Window | Series |
|---|---|
start and end set | Every bucket from start through end, including leading and trailing zeros |
start omitted | Begins at the first bucket that has proof points, then fills through end |
end omitted | end still defaults to now, so zeros run through the current bucket |
end set to null | Stops at the last bucket that has proof points |
| No proof points, both bounds set | The full window, every count 0 |
No proof points and no start | An empty series |
The same rule applies at every resolution: day, week, month, quarter, and year. A year chart is the common case; a month chart fills empty months the same way.
counts of 0 means there were no proof points in that bucket. It is not a missing or failed response.
Routes
| Route | What changed |
|---|---|
POST /proof-points/news-articles/time-series | Empty buckets in the published-date window are returned as 0 |
POST /proof-points/research-articles/time-series | Same |
POST /proof-points/patents/time-series | Same |
POST /proof-points/pdfs/time-series | Same |
POST /proof-points/earnings-calls/time-series | Same |
POST /proof-points/projects/time-series | Same. start / end are still published date |
POST /proof-points/projects/activity-time-series | Unchanged |
Schemas are in the OpenAPI spec and the API reference. See Proof points for the shared time-series shape.
Brands
This is an additive change. One read route exposes a brand directory. The collection is mostly perfume brands for now. These are not knowledge-graph searches: there is no topicQuery, gpeQuery, or time series.
| Route | What it does |
|---|---|
GET /facts/brands | A page of brands. query is an optional case-insensitive substring of name, labels, or description. ids keeps specific brands. |
take is at most 100. sortColumn is name. sortDirection is desc by default. Set returnTotal to include the match count.
Each brand has name, labels (stored in lowercase; name may be included), and optional website, image, description, and people. metadata holds source URLs: fragsi, wikidata, lineage, and brandtree. metadata.organization is the company behind the brand, when one is known: name, description, image, website, city, country, founded, ticker, and alternativeNames. Source ids are left out. organizationIds are knowledge-graph organization ids when resolution succeeded.
Fragrance families and groups
This is an additive change. Two read routes expose a fragrance family directory and a fragrance group directory. A group belongs to one family. These are not knowledge-graph searches: there is no topicQuery, gpeQuery, or time series.
| Route | What it does |
|---|---|
GET /facts/fragrance-families | A page of families. query is an optional case-insensitive substring of name, labels, or description. ids keeps specific families. |
GET /facts/fragrance-groups | A page of groups. query works the same way. familyId keeps groups in one family. ids keeps specific groups. |
take is at most 100. sortColumn is name. sortDirection is desc by default. Set returnTotal to include the match count.
Each record has name, labels (stored in lowercase; name may be included), and optional description. metadata holds source URLs: perfumeSociety, wikidata, and fragrantica. A group has family, with id and name.
Fragrance note groups and fragrance notes
This is an additive change. Two read routes expose a fragrance note group directory and a fragrance note directory. A fragrance note belongs to one group. These are not knowledge-graph searches: there is no topicQuery, gpeQuery, or time series.
| Route | What it does |
|---|---|
GET /facts/fragrance-note-groups | A page of groups. query is an optional case-insensitive substring of name, labels, or description. ids keeps specific groups. |
GET /facts/fragrance-notes | A page of fragrance notes. query is an optional case-insensitive substring of name or labels. groupId keeps fragrance notes in one group. ids keeps specific fragrance notes. |
take is at most 100. sortColumn is name. sortDirection is desc by default. Set returnTotal to include the match count.
Each record has name, labels (stored in lowercase; name may be included), and optional image. A group also has an optional description. metadata.fragrantica is the Fragrantica page when one is known. A fragrance note has group, with id and name.