The Products API is the typed surface iOS uses for card-first idea capture and review.Documentation Index
Fetch the complete documentation index at: https://docs.manticscore.com/llms.txt
Use this file to discover all available pages before exploring further.
POST /ideas returns a ProductCard in 3-5 seconds after a fast interpretation pass — the full research pipeline continues asynchronously. GET /products/{card_id} returns the ProductDetail payload including the live state, checkpoints, the synthesized artifact, and the top-20 evidence rows with provenance metadata so clients can render source links and freshness badges next to claims.
These endpoints coexist with the legacy
POST /research and GET /research/{id}/status flow described in the Research API. The card-first endpoints return strongly typed shapes; the legacy endpoints remain for backward compatibility.Create an idea
Submits a raw idea, runs a fast interpretation cascade (Sonnet, ~3-5s), and returns aProductCard immediately. Full research is dispatched in the background.
Every card returned from this endpoint is guaranteed to have a non-null project_id — the server auto-bridges a project row in the same transaction, and falls back through a defense-in-depth path inside the card-creation chokepoint if the primary bridge fails. Use project_id directly to navigate via GET /projects/{id}. The call is idempotent per user on the semantic content of the idea: re-submitting the same idea reuses the existing project rather than creating a duplicate.
If both bridge paths fail, the request fails loudly with 500 BRIDGE_INVARIANT_VIOLATED rather than returning a card the client can’t navigate to. See Errors for the response shape.
Rate limit: 20 requests per minute.
The product idea or question. Between 4 and 8,000 characters.
202 response
GET /research/{job_id}/events using the returned research_job_id.
ProductCard fields
Product card UUID.
UUID of the research job dispatched for this card. Use it to subscribe to streaming events.
UUID of the project row linked to the card. Use it to fetch the project via
GET /projects/{id}.Cards returned from POST /ideas always have a non-null project_id — the server fails the request with 500 BRIDGE_INVARIANT_VIOLATED rather than ship a card without one.Cards returned from GET /products and GET /products/{id} may rarely be null if they were created before the project bridge shipped. These pre-bridge cards self-heal: the next time the card is accessed through the card-creation chokepoint (for example, when an existing research job is reattached), the server auto-bridges a project and updates the card row in place. As a defensive fallback, clients can render the card via GET /products/{id} while waiting for the heal to propagate.Short title generated from the idea.
Suggested product name.
One-line summary of the idea.
Auto-assigned product category (for example,
fintech, devtools).Lifecycle state:
researching, completed, or failed.Pipeline progress, 0–100.
Key of the most recent pipeline checkpoint (for example,
interpret, search, analyze, synthesize).ISO 8601 timestamp the card was created.
ISO 8601 timestamp the card was last updated.
List products
Returns the authenticated user’s product cards, most-recently-updated first. Reading this list automatically records alist_viewed behavioral event server-side — clients don’t need to instrument it.
Rate limit: 60 requests per minute.
Page size. Between 1 and 100.
Number of rows to skip. Use with
limit for pagination.ProductCard objects, ordered by updated_at descending.
Get a product
Returns the fullProductDetail for a card the authenticated user owns: the card metadata, the original idea interpretation, classification, checkpoints, the synthesized research artifact (when available), and the top-20 evidence rows. Reading the detail records a detail_opened behavioral event server-side.
Rate limit: 60 requests per minute.
Product card UUID.
200 response
Response fields
Product card UUID. Same as
card.id.Card metadata. See
ProductCard shape returned by POST /ideas above.Structured interpretation of the user’s raw idea. Includes
raw_input, normalized_idea, target_user, problem_statement, and proposed_solution.Auto-assigned
category, subcategory, market_type, and confidence (0-1) for the idea.Pipeline checkpoints with status and timing. Each checkpoint has
id, job_id, key, title, status, summary, started_at, completed_at.The synthesized
ResearchArtifact once research has completed. null while research is still running. Contains the market summary, competitors, recommendation, and renderable UI sections.Top-20 evidence rows backing the artifact. Sorted by
confidence descending, then freshness_score descending, then fetched_at descending. Clients render these as source-link badges next to competitors and market signals.Evidence rows are populated by the live research pipeline as the analyze stage completes — newly-finished cards return their sources alongside the artifact. Empty arrays mean the job hasn’t reached the analyze stage yet (subscribe to research events) or completed with no attributed sources.| Status | Meaning |
|---|---|
200 | Detail returned. |
404 | Product not found, or owned by another user. |
Record a behavioral event
Records a behavioral event for outcome-based learning. Most events are auto-recorded server-side byGET /products and GET /products/{id} — call this endpoint only for client-driven signals like card swipes, taps, or shares.
Rate limit: 120 requests per minute.
Event name. Between 1 and 64 characters.Common event names:
list_viewed, detail_opened, card_viewed, section_expanded, card_completed, build_started, share_tapped.Sending build_started or share_tapped also reinforces the canonical entities cited in the card’s artifact, surfacing high-converting companies and features earlier in future retrieval. Other event names are recorded but do not feed the outcome loop.Product card UUID, when the event relates to a specific card.
Research job UUID, when the event relates to a specific research run.
Project UUID, when the event relates to a specific project.
Free-form metadata (numbers, strings, nested objects) to attach to the event.
204 No Content on success.