Insights

CRUD operations, semantic search, and batch actions for synthesized insights.

Overview

Insights are structured findings extracted from research sources during synthesis. They include pain points, opportunities, feature requests, and behavioral patterns -- each with supporting quotes, severity ratings, and frequency counts.


Create Insight

POST /api/insights

Create an insight manually or via the agent.

Request Body

NameTypeRequiredDescription
workspace_idUUIDYesTarget workspace
insight_typestringYesType of insight (e.g., pain_point, opportunity, feature_request, behavior)
titlestringYesShort insight title
descriptionstringYesDetailed description
source_idsstring[]NoIDs of research sources this insight was derived from
quotesobject[]NoSupporting quotes with text, source_id, speaker
frequencyintegerNoNumber of sources mentioning this insight
severitystringNoSeverity level: low, medium, high, critical
impactstringNoImpact assessment

Example Request

curl -X POST https://api.praxiomai.xyz/api/insights \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_id": "550e8400-e29b-41d4-a716-446655440000",
    "insight_type": "pain_point",
    "title": "Slow dashboard loading times",
    "description": "Users report frustration with 5+ second load times on the main dashboard.",
    "frequency": 7,
    "severity": "high"
  }'

Response (201 Created)

{
  "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "workspace_id": "550e8400-e29b-41d4-a716-446655440000",
  "insight_type": "pain_point",
  "title": "Slow dashboard loading times",
  "description": "Users report frustration with 5+ second load times on the main dashboard.",
  "frequency": 7,
  "severity": "high",
  "is_archived": false,
  "created_at": "2026-03-27T11:00:00Z"
}

List Insights

GET /api/insights

List insights for a workspace with optional filters.

Query Parameters

NameTypeRequiredDescription
workspace_idUUIDYesWorkspace ID
insight_typestringNoFilter by type
severitystringNoFilter by severity
is_archivedbooleanNoFilter by archive status
min_frequencyintegerNoMinimum source mention count (>= 1)
limitintegerNoMax results (default: 200, max: 500)
offsetintegerNoPagination offset (default: 0)

Example Request

curl "https://api.praxiomai.xyz/api/insights?workspace_id=550e8400-...&severity=high&min_frequency=3" \
  -H "Authorization: Bearer $TOKEN"

Response (200 OK)

{
  "insights": [ ... ],
  "total": 12
}

Get Insight

GET /api/insights/{insight_id}

Get a single insight by ID.

Path Parameters

NameTypeRequiredDescription
insight_idUUIDYesInsight ID

Update Insight

PATCH /api/insights/{insight_id}

Update an insight's fields (notes, rating, severity, etc.). Only provided fields are updated.

Path Parameters

NameTypeRequiredDescription
insight_idUUIDYesInsight ID

Request Body

All fields are optional.

NameTypeRequiredDescription
titlestringNoUpdated title
descriptionstringNoUpdated description
severitystringNoUpdated severity
is_archivedbooleanNoArchive or unarchive

Delete Insight

DELETE /api/insights/{insight_id}

Delete an insight permanently.

Response (204 No Content)


Search Insights

POST /api/insights/search

Semantic search for insights using natural language queries. Uses vector embeddings (Pinecone) for relevance ranking, with fallback to database text search.

Request Body

NameTypeRequiredDescription
workspace_idUUIDYesWorkspace ID
querystringYesNatural language search query
insight_typestringNoFilter by type
severitystringNoFilter by severity
min_frequencyintegerNoMinimum frequency
limitintegerNoMax results (default: 10)

Example Request

curl -X POST https://api.praxiomai.xyz/api/insights/search \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_id": "550e8400-e29b-41d4-a716-446655440000",
    "query": "What are the main onboarding friction points?",
    "severity": "high",
    "limit": 10
  }'

Response (200 OK)

{
  "insights": [ ... ],
  "total": 5,
  "query": "What are the main onboarding friction points?"
}

Batch Archive/Unarchive

POST /api/insights/batch

Batch archive or unarchive insights during triage sessions.

Request Body

NameTypeRequiredDescription
workspace_idUUIDYesWorkspace ID
insight_idsUUID[]YesList of insight IDs to process
actionstringYes"archive" or "unarchive"

Response (200 OK)

{
  "updated_count": 5,
  "insight_ids": ["c3d4...", "d4e5...", "e5f6...", "f6a7...", "a7b8..."]
}

Was this helpful?