Solutions API
The Solutions API allows you to manage solution themes that group product categories into high-level competitive differentiators. Solutions span multiple products and enable executive-level strategic comparisons.
Note: Solutions require PRO plan or higher.
List Solutions
Get all solutions for your workspace.
GET /api/solutions
Response
{
"solutions": [
{
"id": "solution-id-1",
"workspaceId": "workspace-id",
"name": "Enterprise Security",
"description": "Comprehensive security and compliance capabilities",
"isAiGenerated": false,
"productIds": ["product-id-1", "product-id-2"],
"categoryMappings": [
{
"categoryId": "security",
"productId": "product-id-1",
"weight": 0.5
},
{
"categoryId": "compliance",
"productId": "product-id-1",
"weight": 0.3
}
],
"createdAt": "2024-01-15T10:00:00Z",
"createdByUserId": "user-id",
"updatedAt": "2024-01-15T10:00:00Z"
}
]
}
Get Solution
Get a specific solution by ID.
GET /api/solutions/{id}
Path Parameters
id(string, required) - The solution ID
Response
{
"solution": {
"id": "solution-id-1",
"workspaceId": "workspace-id",
"name": "Enterprise Security",
"description": "Comprehensive security and compliance capabilities",
"isAiGenerated": false,
"productIds": ["product-id-1"],
"categoryMappings": [
{
"categoryId": "security",
"productId": "product-id-1",
"weight": 0.5
}
],
"createdAt": "2024-01-15T10:00:00Z",
"createdByUserId": "user-id",
"updatedAt": "2024-01-15T10:00:00Z"
}
}
Create Solution
Create a new solution theme.
POST /api/solutions
Request Body
{
"name": "Enterprise Security",
"description": "Comprehensive security and compliance capabilities",
"productIds": ["product-id-1", "product-id-2"],
"categoryMappings": [
{
"categoryId": "security",
"productId": "product-id-1",
"weight": 0.5
},
{
"categoryId": "compliance",
"productId": "product-id-1",
"weight": 0.3
}
]
}
Request Fields
name(string, required) - Solution name (e.g., "Enterprise Security", "Time to Value")description(string, optional) - Brief description of the solution themeproductIds(array of strings, required) - Product IDs that contribute to this solutioncategoryMappings(array, required) - Category mappings with weightscategoryId(string, required) - Category ID from the productproductId(string, required) - Product ID this category belongs toweight(number, required) - Weight between 0.0 and 1.0 for aggregation
Response
Returns the created solution (status 201).
Update Solution
Update an existing solution.
PUT /api/solutions/{id}
Path Parameters
id(string, required) - The solution ID
Request Body
All fields are optional. Only include fields you want to update.
{
"name": "Updated Solution Name",
"description": "Updated description",
"productIds": ["product-id-1"],
"categoryMappings": [
{
"categoryId": "security",
"productId": "product-id-1",
"weight": 0.6
}
]
}
Response
Returns the updated solution.
Delete Solution
Delete a solution.
DELETE /api/solutions/{id}
Path Parameters
id(string, required) - The solution ID
Response
{
"success": true
}
Error Responses
400 Bad Request
Invalid input data:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "At least one category mapping is required"
}
}
404 Not Found
Solution not found:
{
"error": {
"code": "NOT_FOUND",
"message": "Solution not found"
}
}
403 Forbidden
Plan upgrade required:
{
"error": {
"code": "UPGRADE_REQUIRED",
"message": "Solutions are available on PRO plan and above",
"requiredPlan": "PRO"
}
}
Solution Matrix Endpoint
Get solution matrix data for visualization.
GET /api/matrix/solutions?competitorIds={id1,id2}&solutionIds={id1,id2}
Query Parameters
competitorIds(string, optional) - Comma-separated list of competitor IDs to includesolutionIds(string, optional) - Comma-separated list of solution IDs to filter by
Response
{
"solutions": [
{
"id": "solution-id-1",
"name": "Enterprise Security",
"description": "Comprehensive security capabilities",
"productIds": ["product-id-1"],
"categoryMappings": [...]
}
],
"competitors": [
{
"id": "competitor-id-1",
"name": "Competitor Inc",
"status": "READY"
}
],
"cells": [
{
"id": "cell-id",
"workspaceId": "workspace-id",
"solutionId": "solution-id-1",
"competitorId": "competitor-id-1",
"aggregatedScore": 3.5,
"contributingCategoryIds": ["matrix-cell-id-1", "matrix-cell-id-2"],
"evidenceIds": ["intel-id-1"],
"lastRefreshedAt": "2024-01-15T10:00:00Z"
}
],
"cellMap": {
"solution-id-1": {
"competitor-id-1": { ...solutionMatrixCell }
}
},
"categoryCellMap": {
"category-id-1": {
"competitor-id-1": { ...matrixCell }
}
}
}
The categoryCellMap provides drill-down capability from solutions to underlying category cells.