Offerings API
The Offerings API allows you to manage offerings (products/services) in your workspace. Offerings represent your own products/services that you want to compare against competitors, as well as competitor offerings discovered during research.
List Offerings
Get all offerings for your workspace (both your organization's offerings and competitor offerings).
GET /api/offerings
Response
{
"offerings": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspaceId": "workspace-id",
"name": "My Offering",
"description": "Offering description",
"audience": "Primary buyer persona",
"valueProps": ["Value prop 1", "Value prop 2"],
"features": [
{
"id": "feature-id",
"name": "Feature Name",
"description": "Feature description"
}
],
"capabilityIds": ["capability-id-1"],
"createdAt": "2024-01-01T00:00:00.000Z",
"createdByUserId": "user-id",
"isActive": true
}
]
}
Get Offering
Get a specific offering by ID.
GET /api/offerings/{id}
Path Parameters
id(string, required) - Offering ID
Response
{
"offering": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspaceId": "workspace-id",
"name": "My Offering",
"description": "Offering description",
"audience": "Primary buyer persona",
"valueProps": ["Value prop 1"],
"features": [],
"capabilityIds": ["capability-id-1"],
"createdAt": "2024-01-01T00:00:00.000Z",
"createdByUserId": "user-id",
"isActive": true
}
}
Create Offering
Create a new offering. Requires EDITOR role or higher.
POST /api/offerings
Request Body
{
"name": "My Offering",
"description": "Offering description",
"audience": "Primary buyer persona",
"valueProps": ["Value prop 1", "Value prop 2"],
"features": [
{
"name": "Feature Name",
"description": "Feature description"
}
],
"capabilityIds": ["capability-id-1"]
}
Required Fields
name(string) - Offering namedescription(string) - Offering descriptionaudience(string) - Primary buyer persona
Optional Fields
valueProps(array of strings) - Value propositionsfeatures(array of objects) - Offering features (each withnameanddescription)capabilityIds(array of strings) - Capability IDs this offering implementschildOfferingIds(array of strings) - Child offering IDs for bundle/suite hierarchy
Response
{
"offering": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspaceId": "workspace-id",
"name": "My Offering",
"description": "Offering description",
"audience": "Primary buyer persona",
"valueProps": ["Value prop 1"],
"features": [],
"capabilityIds": ["capability-id-1"],
"createdAt": "2024-01-01T00:00:00.000Z",
"createdByUserId": "user-id",
"isActive": true
}
}
Update Offering
Update an offering. Requires EDITOR role or higher.
PATCH /api/offerings/{id}
Path Parameters
id(string, required) - Offering ID
Request Body
All fields are optional. Only include fields you want to update:
{
"name": "Updated Offering Name",
"description": "Updated description",
"audience": "Updated audience",
"valueProps": ["New value prop"],
"features": [],
"capabilityIds": ["capability-id-1"],
"isActive": true
}
Response
{
"offering": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspaceId": "workspace-id",
"name": "Updated Offering Name",
"description": "Updated description",
"audience": "Updated audience",
"valueProps": ["New value prop"],
"features": [],
"capabilityIds": ["capability-id-1"],
"createdAt": "2024-01-01T00:00:00.000Z",
"createdByUserId": "user-id",
"isActive": true
}
}
Delete Offering
Delete an offering. Requires EDITOR role or higher.
DELETE /api/offerings/{id}
Path Parameters
id(string, required) - Offering ID
Response
{
"success": true
}
Discover Offerings
Discover offerings from a competitor website. Triggers an analysis job.
POST /api/offerings/discover
Request Body
{
"websiteUrl": "https://competitor.com",
"competitorId": "competitor-id"
}
Required Fields
websiteUrl(string) - Competitor website URLcompetitorId(string) - Competitor ID
Response
{
"jobId": "job-id-for-tracking-discovery"
}
Enrich Offering
Trigger enrichment analysis for an offering.
POST /api/offerings/enrich
Request Body
{
"offeringIds": ["offering-id-1", "offering-id-2"]
}
Required Fields
offeringIds(array of strings) - Offering IDs to enrich
Response
{
"jobId": "job-id-for-tracking-enrichment"
}
Upload Offering Document
Upload a document (PDF, DOCX, etc.) for an offering to extract features and capabilities.
POST /api/offerings/{id}/upload
Path Parameters
id(string, required) - Offering ID
Request Body
Form data with file field containing the document.
Response
{
"jobId": "job-id-for-tracking-extraction"
}
Reanalyze Offering
Trigger reanalysis of an offering to update features and capabilities.
POST /api/offerings/{id}/reanalyze
Path Parameters
id(string, required) - Offering ID
Response
{
"jobId": "job-id-for-tracking-reanalysis"
}
Get Offering Knowledge Tree
Get the knowledge tree metadata for an offering.
GET /api/offerings/{id}/knowledge-tree
Path Parameters
id(string, required) - Offering ID
Response
{
"tree": {
"id": "tree-id",
"treeId": "tree-id",
"workspaceId": "workspace-id",
"entityType": "OFFERING",
"entityId": "offering-id",
"version": 1,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z",
"sources": []
}
}
Get Offering Tree Metadata
Get knowledge tree metadata for an offering.
GET /api/offerings/{id}/tree-metadata
Path Parameters
id(string, required) - Offering ID
Response
{
"metadata": {
"treeId": "tree-id",
"rootId": "root-node-id",
"nodeCount": 10,
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
Delete Offering Knowledge Tree
Delete the knowledge tree for an offering.
DELETE /api/offerings/{id}/tree
Path Parameters
id(string, required) - Offering ID
Response
{
"success": true
}
Error Responses
400- Bad Request (missing required fields, invalid data)401- Unauthorized (invalid or missing API key)403- Forbidden (insufficient permissions)404- Not Found (offering doesn't exist)