Skip to main content
Briefs transform completed research into a structured market analysis document — market map, incumbent analysis, emerging players, feature landscape, market gaps, positioning, and MVP angle. Sections are generated in parallel and streamed as they complete, so you can display partial content immediately rather than waiting for the full document. Each brief is revisioned, diffable, and exportable to PDF or as a shareable App Clip page.

Create a brief

string
required
UUID of the project to create the brief for. The server uses the project’s latest completed research to generate the brief.
string
UUID of a specific research run to use. When omitted, the server picks the most recent completed research for the project.
string
Optional template name to vary the brief structure or tone. Pass null for the default template.
201 response
Returns 404 if the specified research_id is not found or has not completed. Returns 422 if the project has no completed research at all.
Stream section progress immediately from GET /briefs/{brief_id}/events. You can also poll GET /briefs/{brief_id} — it returns whatever sections have been written so far, even during generation.
Briefs can also be created automatically. The first time a Forge run on a project opens a pull request, the server bootstraps a brief for that project (using the latest completed research with audience: "founder") if one does not already exist, then appends a progress section that summarizes the PR. Subsequent PRs upsert items into that same progress section keyed by pr_number and bump brief.revision. You will see these auto-created briefs in GET /briefs alongside ones you created explicitly.

List briefs

number
default:"20"
Maximum number of briefs to return. Upper bound: 100.
number
default:"0"
Number of items to skip for pagination.
200 response
number
required
Increments each time a section is regenerated. Use with the diff endpoint.
number
required
0–100 quality score computed from section completeness and source confidence.
string
Token for the public share link. Present once the brief has been shared.

Get a brief

Returns the full brief with all sections that have been written so far. During generation, sections complete progressively — poll this endpoint or stream events to track progress.
200 response
object
Structured map of the competitive landscape.
array
Analysis of established competitors.
array
Analysis of newer entrants and challengers.
array
Feature comparison across competitors.
array
Identified opportunities not well-served by existing products.
object
Recommended positioning for your product.
object
Suggested MVP scope and angle based on the market gaps.
object
Optional auto-maintained section that tracks Forge pull requests opened against this project. Has shape {"title": "Progress", "items": [{"pr_number": 42, "pr_url": "...", "summary": "...", "appended_at": "..."}]}. Items are upserted on pr_number, so re-emitting the same PR is idempotent. Absent on briefs that have never had a PR auto-appended.
object
Per-section metadata keyed by section name. Each value contains a quality_score and generated_at timestamp.
object[]
Web sources consulted during generation. Each source includes a url, title, snippet, and a confidence score.

Stream brief generation events

Subscribe to the live NDJSON stream as the brief’s sections are written. Reconnect at any sequence number using the cursor.
number
default:"0"
Resume from this event sequence number.
Each line is a JSON object with shape {"v": 1, "event": "<type>", "data": {...}}. The event types are:

Regenerate a section

Re-runs generation for a single section of the brief. Increments the brief’s revision counter. Use the diff endpoint afterwards to compare what changed.
string
required
The section to regenerate. One of: market_map, incumbents, emerging, features, market_gaps, positioning, mvp_angle.
200 response

Diff brief revisions

Compare the current version of the brief against an earlier revision to see which sections changed.
number
The earlier revision to compare from. Omit to compare against the immediately previous revision.
200 response

Build a graph from a brief

Generates a build graph using the features in the brief. Returns immediately — the graph is built in the background.
201 response
Returns 422 if the brief has no features section yet.

Export to PDF

Downloads the brief as a binary PDF file rendered by WeasyPrint. If rendering fails, the server falls back to a plain-text export.
string
default:"pdf"
Export format. Currently only pdf is supported.
Returns binary PDF content with Content-Type: application/pdf. Returns 422 for unsupported format values.

Publish as a shareable clip

Publishes the brief as a public App Clip page at manticscore.com/clip/brief-....
200 response
Returns 502 if the CMS publish step fails.

Read a shared brief (public)

Anyone with the share token can read the brief without authentication. Content-negotiated: returns HTML by default (with Open Graph meta tags), or JSON when you pass Accept: application/json. Rate limit: 30 requests per minute.

Delete a brief

Returns 204 No Content on success.