Skip to main content

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 name
  • description (string) - Offering description
  • audience (string) - Primary buyer persona

Optional Fields​

  • valueProps (array of strings) - Value propositions
  • features (array of objects) - Offering features (each with name and description)
  • capabilityIds (array of strings) - Capability IDs this offering implements
  • childOfferingIds (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 URL
  • competitorId (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)