Skip to main content

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 theme
  • productIds (array of strings, required) - Product IDs that contribute to this solution
  • categoryMappings (array, required) - Category mappings with weights
    • categoryId (string, required) - Category ID from the product
    • productId (string, required) - Product ID this category belongs to
    • weight (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 include
  • solutionIds (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.