Ten minutes from a key to a chart of mention rate by day. Every step is shown in curl, Python and JavaScript.
1. Create a key¶
- Open Hi, Moose and sign in as the account owner.
- Go to Settings → Hi, Moose REST API.
- Give the key a label such as
Reporting dashboard, pick the projects it may read, and leave the extra permissions off. Reading needs none. - Click Create key and copy it. It is shown once.
Put the key in an environment variable on your server. The examples below read it from HIMOOSE_API_KEY.
2. Check the key¶
The answer names the key, its permissions and the project ids it can read:
{
"keyId": "87ac5738",
"label": "Reporting dashboard",
"scopes": ["visibility:read"],
"createdAt": "2026-10-15T02:59:10.839Z",
"expiresAt": null,
"account": { "plan": "premium" },
"projects": ["Uu5UeYLZQBLdOqfBuFmz"]
}
3. Find the project¶
Each project carries a summary: how many prompts it tracks, which engines, and when it last ran.
4. Get mention rate by day¶
The daily stats endpoint returns one row per day and engine, with the counts and the two rates already worked out. It reads a summary table, so it is fast at any size.
const params = new URLSearchParams({ from: "2026-09-01", to: "2026-09-30" });
const stats = await (await fetch(`${API}/projects/${project.id}/stats/daily?${params}`, { headers: HEADERS })).json();
for (const row of stats.data) {
console.log(row.date, row.engineId, `${Math.round(row.mentionRate * 100)}% mentioned`, `${Math.round(row.citationRate * 100)}% cited`);
}
{
"from": "2026-09-01",
"to": "2026-09-30",
"incompleteDays": 0,
"data": [
{ "date": "2026-09-01", "engineId": "chatgpt", "answers": 42, "mentioned": 17, "cited": 9, "mentionRate": 0.405, "citationRate": 0.214 },
{ "date": "2026-09-01", "engineId": "perplexity", "answers": 42, "mentioned": 22, "cited": 14, "mentionRate": 0.524, "citationRate": 0.333 }
]
}
incompleteDays is above zero when a day's summary was not ready yet. Call again in a few seconds and it fills in.
5. Draw the chart¶
Group the rows by engineId, put date on the x axis and mentionRate on the y axis, one line per engine. Add engine=chatgpt to the query to get one engine, or topicId=... to narrow to one topic. The reading data page lists every filter.
6. Go further¶
- Share of voice:
GET /projects/{id}/stats/competitorsgives your brand and every tracked competitor over the same range, ready for a bar chart. - The answers behind the numbers:
GET /projects/{id}/answers?mentioned=truelists the answers that named the brand, with an excerpt and the sources.GET /projects/{id}/answers/{answerId}has the full text. - Refresh without polling: register a webhook and Hi, Moose calls your server when a run finishes.
- Everything else: the endpoint reference.
Keep the key on the server¶
The API sends no CORS headers, so a web page cannot call it. A browser dashboard should call your backend, and your backend calls the API. That keeps the key out of the page.