/workspaceGet workspace, plan, limits and usage
curl "http://localhost:3000/api/v1/workspace" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Developers
Everything you can do in Huginnova, you can do over the API: 79 endpoints across 20 modules (51 reads, 28 writes). The same data is available to AI agents through our MCP server, and as flat tables for Power BI and Looker Studio.
Base URL http://localhost:3000/api/v1. Create keys in Integrations & API. Send them as Authorization: Bearer <key>. Full-access keys (hgn_live_…) can read and change data; read-only keys (hgn_read_…) can only read, and may also be passed as ?key= on GET requests for BI tools that can't send headers.
Responses are JSON: { "data": … } on success, { "error": { "code", "message" } } otherwise (400 invalid request, 401 bad key, 402 no active plan, 403 plan limit or read-only key, 404 not found, 429 rate limited). Rates are fractions (0.42 = 42%) with 95% confidence bounds as low/high. Lists page with limit and offset. Limit: 120 requests per minute per key.
Engines: chatgpt, perplexity, gemini, google_aio, google_ai_mode, claude. MCP: point Claude, Cursor or any MCP client at http://localhost:3000/api/mcp with the same key (MCP guide). Webhooks: see Integrations.
Plan, limits and usage.
/workspaceGet workspace, plan, limits and usage
curl "http://localhost:3000/api/v1/workspace" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Brands (projects): settings, market, engines and sampling.
/projectsList projects
curl "http://localhost:3000/api/v1/projects" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projectsfull-access keyuses creditsCreate a project
Creates a brand with competitors and prompts and starts its first collection run (set `startRun: false` to skip). Counts against the plan's brand and prompt limits.
curl -X POST "http://localhost:3000/api/v1/projects" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Holafly","domain":"holafly.com","country":"US","language":"en","engines":["chatgpt","perplexity","gemini","google_aio","google_ai_mode"],"samples":3,"cadence":"weekly","competitors":[{"name":"Airalo","domain":"airalo.com"}],"prompts":["best eSIM for Japan","Airalo alternatives"],"startRun":true}'/projects/{id}Get a project
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}full-access keyUpdate a project
Any of name, domain, description, country, language, engines, samples, cadence, aliases.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X PATCH "http://localhost:3000/api/v1/projects/$ID" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cadence":"daily","engines":["chatgpt","perplexity"]}'/projects/{id}full-access keyDelete a project
Deletes the brand and all its data. Irreversible.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X DELETE "http://localhost:3000/api/v1/projects/$ID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Competitors tracked for each brand.
/projects/{id}/competitors/projects/{id}/competitors/projects/{id}/competitors/{competitorId}/projects/{id}/competitors/{competitorId}/projects/{id}/competitors/{competitorId}/projects/{id}/competitorsList competitors
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/competitors" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/competitorsfull-access keyAdd competitors
One competitor, or several with `competitors: [...]`. Mentions in answers already collected are re-detected right away.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/competitors" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"competitors":[{"name":"Airalo","domain":"airalo.com","aliases":["Airalo eSIM"]}]}'/projects/{id}/competitors/{competitorId}Get a competitor
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| competitorId | path | string | competitorId |
curl "http://localhost:3000/api/v1/projects/$ID/competitors/$COMPETITORID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/competitors/{competitorId}full-access keyUpdate a competitor
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| competitorId | path | string | competitorId |
curl -X PATCH "http://localhost:3000/api/v1/projects/$ID/competitors/$COMPETITORID" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"airalo.com","aliases":["Airalo"]}'/projects/{id}/competitors/{competitorId}full-access keyRemove a competitor
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| competitorId | path | string | competitorId |
curl -X DELETE "http://localhost:3000/api/v1/projects/$ID/competitors/$COMPETITORID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
The questions asked to every AI engine.
/projects/{id}/prompts/projects/{id}/prompts/projects/{id}/prompts/{promptId}/projects/{id}/prompts/{promptId}/projects/{id}/prompts/{promptId}/projects/{id}/tags/projects/{id}/promptsList prompts with visibility
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/prompts" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/promptsfull-access keyAdd prompts
Prompts already tracked (same text, any case) are skipped. Counts against the plan's active prompt limit.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/prompts" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompts":["best eSIM for Europe"],"tags":["comparison"]}'/projects/{id}/prompts/{promptId}Get a prompt
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| promptId | path | string | promptId |
curl "http://localhost:3000/api/v1/projects/$ID/prompts/$PROMPTID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/prompts/{promptId}full-access keyUpdate a prompt
Pause or resume (`active`), retag or edit. Resuming counts against the plan's active prompt limit.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| promptId | path | string | promptId |
curl -X PATCH "http://localhost:3000/api/v1/projects/$ID/prompts/$PROMPTID" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"active":false,"tags":["pricing"]}'/projects/{id}/prompts/{promptId}full-access keyDelete a prompt
Also deletes its answers.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| promptId | path | string | promptId |
curl -X DELETE "http://localhost:3000/api/v1/projects/$ID/prompts/$PROMPTID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/tagsList prompt tags with counts
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/tags" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Collection runs: every prompt × engine × sample.
/projects/{id}/runsList runs with progress
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| limit | query | integer | Max items to return · default 20 |
| offset | query | integer | Items to skip, for paging · default 0 |
curl "http://localhost:3000/api/v1/projects/$ID/runs" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/runs/{runId}Get a run
Progress by engine.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| runId | path | string | runId |
curl "http://localhost:3000/api/v1/projects/$ID/runs/$RUNID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Visibility with 95% confidence intervals, share of voice, position and sentiment.
/projects/{id}/metrics/projects/{id}/metrics/timeseries/projects/{id}/metrics/engines/projects/{id}/metrics/prompts/projects/{id}/metricsVisibility overview
Brand and competitors with 95% CIs, change vs the previous period (with p-value) and per-engine visibility.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
| engine | query | chatgpt | perplexity | gemini | google_aio | google_ai_mode | claude | Only this AI engine |
curl "http://localhost:3000/api/v1/projects/$ID/metrics" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/metrics/timeseriesVisibility per run
One point per run with every brand's visibility, plus completed actions as annotations.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 90 |
| engine | query | chatgpt | perplexity | gemini | google_aio | google_ai_mode | claude | Only this AI engine |
| tag | query | string | Only prompts with this tag |
curl "http://localhost:3000/api/v1/projects/$ID/metrics/timeseries" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/metrics/enginesVisibility by engine
Brand and competitors on each engine, with significance of the change.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
| tag | query | string | Only prompts with this tag |
curl "http://localhost:3000/api/v1/projects/$ID/metrics/engines" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/metrics/promptsVisibility by prompt
Your visibility per prompt, the leading competitor and the gap.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
| engine | query | chatgpt | perplexity | gemini | google_aio | google_ai_mode | claude | Only this AI engine |
| tag | query | string | Only prompts with this tag |
curl "http://localhost:3000/api/v1/projects/$ID/metrics/prompts" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
The raw AI answers with the brands they name and the sources they cite.
/projects/{id}/answersList answers
Newest first, with brands mentioned (in order) and sources cited.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| limit | query | integer | Max items to return · default 50 |
| offset | query | integer | Items to skip, for paging · default 0 |
| engine | query | chatgpt | perplexity | gemini | google_aio | google_ai_mode | claude | Only this AI engine |
| prompt_id | query | string | Only answers to this prompt |
| days | query | integer | Only answers from the last N days |
| mentioned | query | boolean | true: only answers that mention the brand; false: only those that don't |
curl "http://localhost:3000/api/v1/projects/$ID/answers" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/answers/{answerId}Get an answer
Full text, mentions with snippets and sentiment, citations, query fan-out, shopping products, ads and local results.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| answerId | path | string | answerId |
curl "http://localhost:3000/api/v1/projects/$ID/answers/$ANSWERID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Domains and pages AI cites, and where you're missing.
/projects/{id}/citationsTop cited domains
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/citations" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/citations/urlsTop cited pages
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
| limit | query | integer | Max items to return · default 50 |
curl "http://localhost:3000/api/v1/projects/$ID/citations/urls" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/citations/gapsSource gaps
Third-party domains AI cites in answers that don't mention you, ranked by missed answers.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/citations/gaps" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Brands AI recommends that you don't track yet.
/projects/{id}/discovered-brands/projects/{id}/discovered-brands/track/projects/{id}/discovered-brands/ignore/projects/{id}/discovered-brandsUntracked brands AI recommends
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
| limit | query | integer | Max items to return · default 25 |
curl "http://localhost:3000/api/v1/projects/$ID/discovered-brands" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/discovered-brands/trackfull-access keyTrack a discovered brand
Adds it as a competitor and re-detects its mentions in collected answers.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/discovered-brands/track" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Saily"}'/projects/{id}/discovered-brands/ignorefull-access keyIgnore a discovered brand
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/discovered-brands/ignore" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Google Fi"}'Evidence-based actions and their measured before/after impact.
/projects/{id}/actions/projects/{id}/actions/projects/{id}/actions/generate/projects/{id}/actions/{actionId}/projects/{id}/actions/{actionId}/projects/{id}/actions/{actionId}/projects/{id}/actions/{actionId}/impact/projects/{id}/audit/projects/{id}/audit/projects/{id}/actionsList actions
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| status | query | todo | doing | done | dismissed | Filter by status |
curl "http://localhost:3000/api/v1/projects/$ID/actions" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/actionsfull-access keyAdd an action
Your own action. Link prompts with `promptIds` to measure its impact on them.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/actions" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"content","title":"Publish Japan eSIM comparison","detail":"Table with price per GB and carriers.","priority":1,"promptIds":[]}'/projects/{id}/actions/generatefull-access keyRegenerate the plan
Builds new actions from the last 30 days of answers. Never duplicates existing ones.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/actions/generate" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/actions/{actionId}Get an action with its impact
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| actionId | path | string | actionId |
curl "http://localhost:3000/api/v1/projects/$ID/actions/$ACTIONID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/actions/{actionId}full-access keyUpdate an action
`status: "done"` stamps the completion date that starts the before/after window.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| actionId | path | string | actionId |
curl -X PATCH "http://localhost:3000/api/v1/projects/$ID/actions/$ACTIONID" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"done"}'/projects/{id}/actions/{actionId}full-access keyDelete an action
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| actionId | path | string | actionId |
curl -X DELETE "http://localhost:3000/api/v1/projects/$ID/actions/$ACTIONID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/actions/{actionId}/impactMeasured impact
Visibility before vs after completion on the targeted prompts, with a two-proportion z-test.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| actionId | path | string | actionId |
| window | query | integer | Days before and after completion · default 28 |
curl "http://localhost:3000/api/v1/projects/$ID/actions/$ACTIONID/impact" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/auditAI readiness audit (latest)
The latest audit of the brand's website as AI crawlers see it: robots.txt and firewall access, content rendered without JavaScript, noindex, canonicals, speed, titles, structured data, freshness, sitemap and llms.txt, per page, with a score and a draft llms.txt. null if none yet.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/audit" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/auditfull-access keyRun an AI readiness audit
Audits the website now (plain requests to the site, no AI cost) and refreshes the action plan: new problems become actions, fixed ones are closed.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/audit" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
How AI describes the brand, scored, with quotes.
/projects/{id}/reputation/projects/{id}/reputation/history/projects/{id}/reputation/regenerate/projects/{id}/reputation/actions/projects/{id}/reputationLatest reputation analysis
Scores, strengths, weaknesses and inaccurate claims with quotes, tone per run and the most negative mentions.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/reputation" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/reputation/historyReputation score history
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| limit | query | integer | Max items to return · default 20 |
curl "http://localhost:3000/api/v1/projects/$ID/reputation/history" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/reputation/regeneratefull-access keyuses creditsRe-analyse reputation
On the latest completed run. Limited per brand per day.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/reputation/regenerate" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/reputation/actionsfull-access keyTurn a finding into an action
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/reputation/actions" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"inaccuracy","index":0}'Query fan-out, ChatGPT shopping, ads, local packs, entities, Reddit and YouTube.
/projects/{id}/signals/projects/{id}/signals/fan-out/projects/{id}/signals/shopping/projects/{id}/signals/ads/projects/{id}/signals/entities/projects/{id}/signals/community/projects/{id}/signals/local/projects/{id}/signalsSignals summary
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/fan-outQuery fan-out
The searches AI engines ran behind your prompts.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/fan-out" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/shoppingChatGPT shopping products and merchants
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/shopping" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/adsAds shown in answers
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/ads" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/entitiesBrand entities recognised in answers
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/entities" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/communityReddit and YouTube sources
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/community" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/signals/localLocal businesses in answers
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/signals/local" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Opportunities and content drafts grounded in the pages AI cites.
/projects/{id}/geo/opportunities/projects/{id}/geo/drafts/projects/{id}/geo/drafts/projects/{id}/geo/drafts/{draftId}/projects/{id}/geo/drafts/{draftId}/action/projects/{id}/geo/opportunitiesOptimization opportunities
Prompts ranked by the gap to the leading competitor, with the page to optimize.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/geo/opportunities" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/geo/draftsList drafts
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/geo/drafts" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/geo/draftsfull-access keyuses creditsCreate a draft
Analyses the answers, the pages AI cites instead of yours and your page, then drafts the content. Takes 1–2 minutes. Limited per workspace per day.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/geo/drafts" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"promptId":"…","targetUrl":"https://holafly.com/esim-japan"}'/projects/{id}/geo/drafts/{draftId}Get a draft
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| draftId | path | string | draftId |
curl "http://localhost:3000/api/v1/projects/$ID/geo/drafts/$DRAFTID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/geo/drafts/{draftId}/actionfull-access keyAdd a draft to the action plan
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| draftId | path | string | draftId |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/geo/drafts/$DRAFTID/action" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Visits AI assistants send to your site, and GA4 imports.
/projects/{id}/traffic/projects/{id}/traffic/daily/projects/{id}/traffic/pages/projects/{id}/traffic/ga4/projects/{id}/trafficAI referral traffic summary
Sessions and conversions by engine from one data source (snippet first, then analytics imports), the sources available, and the tracking snippet.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/traffic" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/traffic/dailyAI sessions per day
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/traffic/daily" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/traffic/pagesTop landing pages from AI
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/traffic/pages" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/traffic/ga4full-access keyImport a GA4 CSV
Body is a GA4 export with Date, Session source and Sessions columns. Non-AI rows are skipped; re-importing the same dates replaces them.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/traffic/ga4" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY" \ -H "Content-Type: text/csv" \ --data-binary @export.csv
AI bot activity from your server or CDN logs.
/projects/{id}/botsAI crawler summary
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/bots" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/bots/by-botHits by crawler
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/bots/by-bot" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/bots/pagesMost crawled pages
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| days | query | integer | Look-back window in days · default 30 |
curl "http://localhost:3000/api/v1/projects/$ID/bots/pages" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Alerts raised after runs.
/alertsList alerts
| Parameter | In | Type | Description |
|---|---|---|---|
| unread | query | boolean | Only unread alerts |
| project_id | query | string | Only this project |
| limit | query | integer | Max items to return · default 100 |
curl "http://localhost:3000/api/v1/alerts" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/alerts/{alertId}/readfull-access keyMark an alert read
| Parameter | In | Type | Description |
|---|---|---|---|
| alertId | path | string | alertId |
curl -X POST "http://localhost:3000/api/v1/alerts/$ALERTID/read" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/alerts/read-allfull-access keyMark all alerts read
| Parameter | In | Type | Description |
|---|---|---|---|
| project_id | query | string | Only this project |
curl -X POST "http://localhost:3000/api/v1/alerts/read-all" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Email, Slack and signed webhook notifications.
/integrations/integrations/integrations/{integrationId}/integrations/{integrationId}/integrations/{integrationId}/integrations/{integrationId}/test/integrationsList integrations
curl "http://localhost:3000/api/v1/integrations" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/integrationsfull-access keyAdd an integration
Email, Slack incoming webhook or https webhook. Webhooks return a signing `secret` once; every delivery carries `X-Huginnova-Signature: sha256=<hmac>`.
curl -X POST "http://localhost:3000/api/v1/integrations" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"webhook","target":"https://hooks.zapier.com/hooks/catch/…","events":["alert.created","run.completed"]}'/integrations/{integrationId}Get an integration
| Parameter | In | Type | Description |
|---|---|---|---|
| integrationId | path | string | integrationId |
curl "http://localhost:3000/api/v1/integrations/$INTEGRATIONID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/integrations/{integrationId}full-access keyUpdate an integration
| Parameter | In | Type | Description |
|---|---|---|---|
| integrationId | path | string | integrationId |
curl -X PATCH "http://localhost:3000/api/v1/integrations/$INTEGRATIONID" \
-H "Authorization: Bearer $HUGINNOVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":false}'/integrations/{integrationId}full-access keyDelete an integration
| Parameter | In | Type | Description |
|---|---|---|---|
| integrationId | path | string | integrationId |
curl -X DELETE "http://localhost:3000/api/v1/integrations/$INTEGRATIONID" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/integrations/{integrationId}/testfull-access keySend a test notification
| Parameter | In | Type | Description |
|---|---|---|---|
| integrationId | path | string | integrationId |
curl -X POST "http://localhost:3000/api/v1/integrations/$INTEGRATIONID/test" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
CSV exports and white-label client report links.
/projects/{id}/export/{file}Download a CSV export
`file` is one of answers.csv, prompts.csv, citations.csv, metrics.csv.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
| file | path | string | file |
curl "http://localhost:3000/api/v1/projects/$ID/export/answers.csv" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/share-linkGet the client report link
Private link to the always-up-to-date white-label report.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl "http://localhost:3000/api/v1/projects/$ID/share-link" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/projects/{id}/share-linkfull-access keyRotate the client report link
The previous link stops working immediately.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | path | string | Project id |
curl -X POST "http://localhost:3000/api/v1/projects/$ID/share-link" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
Flat tables for Power BI, Looker Studio, Google Sheets and Excel, as JSON or CSV.
/biList BI datasets
Every flat table with its columns and ready-made JSON and CSV URLs.
curl "http://localhost:3000/api/v1/bi" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
/bi/{dataset}Get a BI dataset
One row per day/brand/engine (or per prompt, source, page…) across every brand in the workspace. Point Power BI (Get data → Web) or Google Sheets (IMPORTDATA) at the CSV URL with a read-only key.
| Parameter | In | Type | Description |
|---|---|---|---|
| dataset | path | string | dataset |
| project | query | string | A project id, or `all` (default) · default all |
| days | query | integer | Look-back window in days · default 90 |
| format | query | json | csv | Response format · default json |
curl "http://localhost:3000/api/v1/bi/visibility" \ -H "Authorization: Bearer $HUGINNOVA_API_KEY"
API index and this specification.
/no keyAPI index
Every endpoint with a one-line description.
curl "http://localhost:3000/api/v1"
/openapi.jsonno keyOpenAPI 3.1 specification
curl "http://localhost:3000/api/v1/openapi.json"
Questions or need an endpoint we don't have? Contact us.