Insights
Browse, search, filter, and triage synthesized insights in Praxiom AI.
Overview
Insights are the structured output of synthesis. Each insight represents a validated finding from your research — a pain point, opportunity, feature request, user behavior pattern, or feedback theme. Praxiom provides full CRUD, semantic search, filtering, and batch operations so you can efficiently triage hundreds of insights during prioritization sessions.
How It Works
Browsing and Filtering
List insights with GET /api/insights?workspace_id={id}. The endpoint supports rich filtering:
| Parameter | Description |
|---|---|
insight_type | Filter by type: pain_point, opportunity, feature_request, user_behavior, feedback_theme |
severity | Filter by severity: low, medium, high, critical |
is_archived | Filter archived/active insights (true or false) |
min_frequency | Minimum number of sources that mention this theme (e.g. 3 for high-signal insights) |
limit | Max results (default 200, max 500) |
offset | Pagination offset |
The response returns { insights: [...], total: N } sorted by creation date (newest first).
Semantic Search
For natural language queries across your insight library, use POST /api/insights/search:
{
"workspace_id": "your-workspace-uuid",
"query": "What are the main onboarding friction points?",
"limit": 10,
"insight_type": null,
"severity": null,
"min_frequency": null
}
The search pipeline works in two stages:
- Semantic search — Embeds your query and searches the Pinecone vector store for the most relevant insights, preserving relevance ordering.
- Fallback — If vector search is unavailable, falls back to database text search across
titleanddescriptionfields usingILIKE.
Results are returned as { insights: [...], total: N, query: "..." }.
Semantic search shines when you use natural language questions like "Which users complained about pricing?" rather than exact keyword matches. The vector embeddings capture meaning, not just text overlap.
Individual Insight Operations
| Operation | Endpoint | Description |
|---|---|---|
| Create | POST /api/insights | Manually create an insight |
| Read | GET /api/insights/{insight_id} | Fetch a single insight |
| Update | PATCH /api/insights/{insight_id} | Edit notes, rating, severity, etc. |
| Delete | DELETE /api/insights/{insight_id} | Permanently remove an insight |
Batch Operations
During triage sessions, use POST /api/insights/batch to archive or unarchive multiple insights at once:
{
"workspace_id": "your-workspace-uuid",
"insight_ids": ["uuid-1", "uuid-2", "uuid-3"],
"action": "archive"
}
The action field accepts archive or unarchive. The response reports { updated_count: N, insight_ids: [...] }.
Archiving does not delete insights. Archived insights are hidden from default list views but remain searchable and can be unarchived at any time.
Key Concepts
Insight Fields
| Field | Description |
|---|---|
title | Short, descriptive summary |
description | Detailed explanation with context |
insight_type | pain_point, opportunity, feature_request, user_behavior, feedback_theme |
severity | low, medium, high, critical |
frequency | Number of sources that surfaced this theme |
quotes | Direct user quotes with source attribution |
source_ids | UUIDs of the research sources that contributed |
impact | Optional impact assessment |
is_archived | Whether the insight is archived |
Prioritization Workflow
A typical PM triage session looks like this:
- Filter by
severity=highormin_frequency=3to surface the strongest signals - Search for specific product areas ("checkout flow", "mobile experience")
- Archive low-priority or duplicate insights in bulk
- Select the remaining high-value insights for recommendation generation
What's Next
Once your insights are triaged, generate evidence-backed recommendations in the Recommendations guide.
Was this helpful?