Summary APIs

The Summary API generates an AI topic summary over a set of your articles — not a single document. You choose which articles to summarize with a filter (fq) and/or by passing virtual_articles, and Miso writes one cohesive summary that cites them.

Possible use cases: newsletters, a TL;DR above a search-results page, folder / topic digests, and recurring briefs.

Like the Ask API, summarization is a two-step flow:

  1. POST /v1/ask/summary — returns a question_id.
  2. GET /v1/ask/questions/{question_id}/answer — poll until finished is true (use answer_stage / finished to track progress).

Pass ?wait_for_answer=true on step 1 to skip polling and get the finished summary inline.


Example 1 — Summarize a topic (simplest)

Summarize everything tagged interest rates:

POST /v1/ask/summary
{
  "fq": "tags:\"interest rates\"",
  "instructions": "Summarize the current state of intere…"
}

The API responds with a question id:

{
  "message": "success",
  "data": {
    "question_id": "57aeb083-b943-43b1-86ab-b6108788dd50"
  }
}

Then GET /v1/ask/questions/57aeb083-.../answer. While it is still working:

{
  "message": "success",
  "data": {
    "question_id": "57aeb083-b943-43b1-86ab-b6108788dd50",
    "answer_stage": "Selecting articles",
    "finished": false,
    "answer": "Selecting articles ...",
    "sources": []
  }
}

When finished:

{
  "message": "success",
  "data": {
    "question_id": "57aeb083-b943-43b1-86ab-b6108788dd50",
    "answer_stage": "Generating summary",
    "finished": true,
    "answer": "## Interest-rate policy in 2026\n\nThe c…",
    "sources": [
      {
        "product_id": "art-20260612-rates",
        "title": "Central bank signals 2026 cuts",
        "url": "https://example.com/markets/rates"
      }
    ]
  }
}

Example 2 — Weekly newsletter (HTML + tracked links)

Summarize the markets section from the last 7 days, render HTML, and rewrite every link for click tracking with url_template:

POST /v1/ask/summary
{
  "fq": "section:\"markets\" AND published_at:[NOW-7DAY…",
  "max_articles": 15,
  "instructions": "Write a concise newsletter intro sum…",
  "format": "html",
  "url_template": "https://example.com{url}?utm_source=n…"
}

Poll the answer endpoint exactly as in Example 1. The answer field comes back as HTML.


Example 3 — Enforce length & citations with rules

rules are checked after generation; the summary is automatically regenerated up to 3× until they all pass:

POST /v1/ask/summary
{
  "fq": "tags:\"interest rates\"",
  "instructions": "Summarize the current rate outlook.",
  "rules": ["Must be under 200 words", "Every claim must cite a source"]
}

Example 4 — Tighten relevance with relevance_instruction

When a broad fq pulls in loosely-related articles, add a strict per-article check. Miso keeps a candidate only if it passes. While you tune it, pass force_refresh so you do not get a cached result:

POST /v1/ask/summary
{
  "fq": "tags:\"banking\"",
  "instructions": "Summarize recent developments at the…",
  "relevance_instruction": "Keep only if a major US ban…",
  "force_refresh": true
}

Example 5 — Include content not in your catalog (virtual_articles)

Summarize a mix of catalog articles and ad-hoc content (for example, a breaking press release). Virtual articles are prepended and cited identically:

POST /v1/ask/summary
{
  "fq": "section:\"markets\"",
  "virtual_articles": [
    {
      "product_id": "pr-2026-0624",
      "title": "Bank issues surprise statement",
      "content": "Full text ...",
      "url": "https://example.com/pr/0624"
    }
  ],
  "instructions": "Summarize today's market-moving news,…"
}

Tip: add ?wait_for_answer=true to the POST to get the finished summary in the response and skip polling — handy for server-side rendering of a newsletter or digest page.