API Reference
The Knownwell API provides programmatic access to your client portfolio data, Knownwell scores, and health metrics. Our REST API is designed with resource-oriented URLs, JSON responses, standard HTTP methods, and secure API key authentication. All endpoints are read-only for data security.
https://api.knownwell.com/ci/v1
Introduction
The Knownwell API is built with RESTful principles, making it intuitive and easy to integrate. All endpoints follow consistent patterns and return structured JSON responses.
Key Features
- Client Portfolio Management: Access comprehensive client data and scores
- Historical Tracking: Retrieve score trends and changes over time
- Portfolio Organization: Manage and query client portfolios
- Action Items: Access priorities and tasks
- Relationship Data: Query key people and contacts
- Notes & Observations: Retrieve client interaction history
Authentication
The Knownwell API uses API key authentication via HTTP headers.
Include your API key in the X-API-Key header with every request.
Requests without proper authentication will return a 401 Unauthorized error.
Security Best Practices
- Never expose your API key in client-side code or public repositories
- Store securely in environment variables or secure vaults
- Rotate regularly — request new keys periodically
- Use HTTPS only — all API calls must use HTTPS
- Monitor usage — track API usage for unauthorized access
# Example authenticated request curl https://api.knownwell.com/ci/v1/clients \ -H "X-API-Key: kw_live_abc123def456..."
Errors
Knownwell uses conventional HTTP response codes to indicate the success or failure of an API request.
Codes in the 2xx range indicate success. Codes in the 4xx range indicate
an error with the information provided. Codes in the 5xx range indicate an error with our servers.
| Status Code | Description |
|---|---|
200 |
Everything worked as expected |
400 |
Bad Request - Often missing a required parameter |
401 |
Unauthorized - Invalid or missing API key |
403 |
Forbidden - You don't have permission to access this resource |
404 |
Not Found - The requested resource doesn't exist |
422 |
Unprocessable Entity - Validation error |
429 |
Too Many Requests - Rate limit exceeded |
500 |
Internal Server Error - Something went wrong on our end |
Error Response Format
{
"error": "Validation error",
"detail": "API key is required",
"status_code": 401
}
Pagination
List endpoints that return multiple items support pagination through limit and
offset query parameters.
Clients
The Clients API allows you to retrieve information about your clients, including Knownwell scores, metadata, historical data, and health metrics.
Retrieves a list of all clients for your customer account. Results are sorted by Knownwell score in descending order.
Query Parameters
Example Request
curl https://api.knownwell.com/ci/v1/clients \ -H "X-API-Key: YOUR_API_KEY" \ -G \ -d "limit=50"
import requests url = "https://api.knownwell.com/ci/v1/clients" headers = {"X-API-Key": "YOUR_API_KEY"} params = {"limit": 50} response = requests.get(url, headers=headers, params=params) clients = response.json()
const axios = require('axios'); const response = await axios.get( 'https://api.knownwell.com/ci/v1/clients', { headers: { 'X-API-Key': 'YOUR_API_KEY' }, params: { limit: 50 } } ); const clients = response.data;
Example Response
{
"clients": [
{
"id": "client_abc123",
"customerId": "cust_xyz789",
"name": "Acme Corporation",
"score": 145.5,
"lastContactDate": "2026-01-10T14:30:00Z",
"hasInsufficientData": false,
"metadata": {
"accountOwner": "Jane Smith",
"industry": "Technology",
"revenueTTM": 500000
}
}
],
"total": 42,
"customerId": "cust_xyz789"
}
Get Client by ID
Retrieves detailed information about a specific client, including their spotlight summary and scoring data.
Path Parameters
Example Request
curl https://api.knownwell.com/ci/v1/clients/client_abc123 \
-H "X-API-Key: YOUR_API_KEY"
Example Response
{
"id": "client_abc123",
"customerId": "cust_xyz789",
"name": "Acme Corporation",
"score": 145.5,
"lastContactDate": "2026-01-10T14:30:00Z",
"lastUpdatedAt": "2026-01-12T10:15:00Z",
"hasInsufficientData": false,
"metadata": {
"accountOwner": "Jane Smith",
"industry": "Technology",
"location": "San Francisco, CA",
"revenueTTM": 500000
},
"spotlightSummary": "Acme Corporation has shown declining engagement. Consider reaching out to key stakeholders.",
"historicalData": [142, 138, 145.5]
}
Portfolio Health
Get aggregated health metrics for your entire client portfolio based on Knownwell scores.
Returns a portfolio health score and breakdown of clients by risk level.
Query Parameters
Example Response
{
"score": 7,
"breakdown": {
"highRisk": 2,
"mediumRisk": 5,
"lowRisk": 12,
"onTrack": 23,
"total": 42
},
"distribution": {
"highRiskPercent": 5,
"mediumRiskPercent": 12,
"lowRiskPercent": 29,
"onTrackPercent": 55
},
"customerId": "cust_xyz789"
}
Risk Levels Explained
Streams
Streams represent sub-projects or initiatives within a client. Each stream has its own Knownwell score, historical data, and analytics insights from the Cortex engine.
List all streams across all clients for your customer account. Useful for dashboards and portfolio-wide stream monitoring without needing to iterate through each client.
Query Parameters
Example Request
curl https://api.knownwell.com/ci/v1/streams \
-H "X-API-Key: YOUR_API_KEY"
Example Response
{
"streams": [
{
"id": "stream_abc",
"name": "Q1 Delivery",
"customerId": "cust_123",
"parentClientId": "client_456",
"parentClientName": "Acme Corp",
"score": 110.5,
"streamState": "active",
"goals": "Deliver phase 1 by end of Q1",
"hasInsufficientData": false,
"historicalData": [95, 100, 105, 110.5]
}
],
"total": 1,
"customerId": "cust_123"
}
Try it now
List Client Streams
Returns all streams (sub-projects) for a specific client. By default, only active streams are returned.
Path Parameters
Query Parameters
Example Request
curl https://api.knownwell.com/ci/v1/clients/client_abc123/streams \
-H "X-API-Key: YOUR_API_KEY"
Example Response
{
"streams": [
{
"id": "stream_abc123",
"name": "Q1 Delivery",
"customerId": "cust_xyz789",
"parentClientId": "client_abc123",
"parentClientName": "Acme Corporation",
"score": 110.5,
"streamState": "active",
"goals": null,
"hasInsufficientData": false,
"historicalData": [105, 108, 110.5],
"scoreChanges": {
"7day": { "change": 2.5, "percentage": 2.3, "previousScore": 108 },
"30day": { "change": 5.5, "percentage": 5.2, "previousScore": 105 }
}
}
],
"total": 1,
"parentClientId": "client_abc123",
"customerId": "cust_xyz789"
}
Get Stream Detail
Returns detailed stream information including Cortex analytics insights, contextual clues, and growth recommendations.
Path Parameters
Example Request
curl https://api.knownwell.com/ci/v1/clients/client_abc123/streams/stream_abc123 \
-H "X-API-Key: YOUR_API_KEY"
Example Response
{
"id": "stream_abc123",
"name": "Q1 Delivery",
"customerId": "cust_xyz789",
"parentClientId": "client_abc123",
"parentClientName": "Acme Corporation",
"score": 110.5,
"streamState": "active",
"historicalData": [105, 108, 110.5],
"scoreChanges": {
"7day": { "change": 2.5, "percentage": 2.3, "previousScore": 108 }
},
"spotlight": "The Q1 Delivery stream is trending positively with improved response times.",
"insights": [
{
"weekDate": "2026-01-06",
"insights": [
{
"topic": "Delivery Issues",
"summary": "Delivery timelines have improved this week.",
"sentiment": "positive"
}
]
}
],
"contextualClues": {
"activeFires": [],
"budgetIssues": false
},
"growthRecommendations": [
{
"title": "Expand Delivery Scope",
"description": "Client has expressed interest in expanding deliverables."
}
]
}
Portfolios
Retrieve portfolio information including custom portfolios and system portfolios (All Clients, Favorites, Archived).
Returns a list of all portfolios (tags) for your customer, including system portfolios.
Query Parameters
Example Response
{
"portfolios": [
{
"id": "portfolio_abc123",
"name": "Enterprise Clients",
"color": "#4CAF50",
"description": "High-value enterprise accounts",
"customerId": "cust_xyz789",
"clientCount": 42,
"userIds": ["user_1", "user_2"],
"isSystem": false,
"createdAt": "2025-01-10T12:00:00Z"
},
{
"id": "all-clients",
"name": "All Clients",
"color": "#ffffff",
"clientCount": 248,
"isSystem": true
}
],
"total": 5,
"customerId": "cust_xyz789"
}
Get Portfolio by ID
Retrieve detailed information about a specific portfolio, including all clients and health metrics.
Returns complete portfolio details with client list and health metrics.
Path Parameters
Query Parameters
Example Response
{
"id": "portfolio_abc123",
"name": "Enterprise Clients",
"color": "#4CAF50",
"customerId": "cust_xyz789",
"clientCount": 42,
"clients": [
{
"id": "client_1",
"name": "Acme Corp",
"score": 145.5,
"scoreChanges": {
"7day": {
"change": -5.2,
"percentage": -6.4,
"previousScore": 150.7
},
"30day": {
"change": 12.3,
"percentage": 9.2,
"previousScore": 133.2
}
},
"extraColumns": {
"segment": "Enterprise",
"tier": "Gold"
}
}
],
"health": {
"score": 7,
"breakdown": {
"highRisk": 2,
"mediumRisk": 5,
"lowRisk": 12,
"onTrack": 23
}
}
}
Client History
Retrieve historical score data for a specific client over time.
Returns the historical score data for a client, useful for trend analysis and visualizations.
Path Parameters
Query Parameters
Example Response
{
"clientId": "client_abc123",
"clientName": "Acme Corp",
"historicalData": [120, 122, 125, 128, 130],
"firstDataDate": "2025-10-15",
"dataPoints": 90,
"currentScore": 145.5
}
Priorities
Get prioritized action items and tasks for a specific client based on their Knownwell score and topics.
Returns a prioritized list of topics that need attention for this client, sorted by severity and impact.
Path Parameters
Example Response
{
"clientId": "client_abc123",
"priorities": [
{
"topic": "Response Time",
"score": 45,
"category": "Support",
"severity": "high",
"recommendations": [
"Improve response time to under 2 hours"
]
}
]
}
Notes
Retrieve notes and observations recorded for a specific client.
Returns notes, meeting summaries, and observations associated with this client.
Path Parameters
Query Parameters
Example Response
{
"clientId": "client_abc123",
"notes": [
{
"id": "note_123",
"content": "Discussed Q4 strategy and expansion plans",
"createdAt": "2026-01-10T15:30:00Z",
"createdBy": "John Smith",
"type": "meeting"
}
],
"total": 15
}
Key People
Get key contacts and decision-makers associated with a client for relationship mapping.
Returns important contacts, stakeholders, and decision-makers for this client account.
Path Parameters
Example Response
{
"clientId": "client_abc123",
"keyPeople": [
{
"id": "person_123",
"name": "Jane Doe",
"title": "CEO",
"email": "jane.doe@acme.com",
"phone": "+1 555-0123",
"role": "decision-maker",
"department": "Executive"
}
],
"total": 8
}
Topics
Retrieve all available Knownwell topics with descriptions. Topics are the 15 dimensions used to calculate client health scores, organized into 3 categories.
Returns all available Knownwell topics with display names, descriptions, and category groupings. No parameters required.
Example Response
{
"topics": [
{
"id": "Delivery Issues",
"displayName": "Delivery Performance",
"description": "A measure of how consistently our shared outputs align with the client's standards and expectations over the course of the engagement.",
"category": "Service Quality Perception"
},
{
"id": "Responsiveness",
"displayName": "Responsiveness",
"description": "Reflects the overall rhythm of communication and the perceived ease with which the client can engage with our support system.",
"category": "Service Quality Perception"
}
],
"categories": [
{
"name": "Service Quality Perception",
"abbreviation": "SQP",
"description": "Measures the client's perception of our delivery quality, responsiveness, and the value we bring through our team's expertise and proactive approach.",
"topicCount": 5
},
{
"name": "Relationship Strength",
"abbreviation": "RS",
"description": "Assesses the depth and resilience of our interpersonal connections, structural alignment, and collaborative culture with the client organization.",
"topicCount": 5
},
{
"name": "Commercial Alignment",
"abbreviation": "CA",
"description": "Evaluates long-term strategic fit, market conditions, and the degree to which our services are embedded in the client's operations and future plans.",
"topicCount": 5
}
],
"total": 15
}
Response Fields
id (Firestore name), displayName (UI label), description (what the topic measures), and category (parent category name)
name, abbreviation (SQP, RS, CA), description, and topicCount
Try It
Quick Start
Get started with the Knownwell API in just a few steps:
1. Get Your API Key
Generate an API Key from "Integrations" > "API Connector" in your Knownwell Dashboard.
2. Import to Postman (Recommended)
The fastest way to explore the API is using our Postman collection:
Download Postman Collection
Pre-configured with all endpoints, authentication, and examples
How to import:
- Open Postman and click "Import" in the top left
- Drag the downloaded JSON file or click "Choose Files"
- Click "Import" to add the collection to your workspace
- In the collection, click "Variables" and set your
api_key - Start making requests! All endpoints are pre-configured
3. Or Make Your First Request with cURL
curl https://api.knownwell.com/ci/v1/clients \
-H "X-API-Key: your_api_key_here"
4. Explore the Data
Check out our code examples to see common integration patterns.
Code Examples
Here are some common use cases to help you get started:
Find High-Risk Clients
curl https://api.knownwell.com/ci/v1/clients/by-risk/high_risk \
-H "X-API-Key: YOUR_API_KEY"
Monitor Declining Clients
curl https://api.knownwell.com/ci/v1/clients/trending?direction=declining \
-H "X-API-Key: YOUR_API_KEY"
Search Clients by Name
curl "https://api.knownwell.com/ci/v1/clients/search?query=acme" \ -H "X-API-Key: YOUR_API_KEY"
Rate Limits
To ensure service quality for all clients, the API enforces rate limits.
Limits
| Window | Limit |
|---|---|
| Per minute | 100 requests |
| Per hour | 5,000 requests |
| Per day | 50,000 requests |
Rate Limit Headers
Every API response includes rate limit headers:
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 95 X-RateLimit-Reset: 1642608000
If you exceed the rate limit, you'll receive a 429 Too Many Requests response:
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 60 seconds.",
"retryAfter": 60
}
}
Best Practices
Performance
- Cache responses — cache data that doesn't change frequently
- Use pagination — request only the data you need with appropriate limit values
- Batch requests efficiently — use portfolio endpoints for aggregate data
Reliability
- Implement retry logic — use exponential backoff for retries
- Respect rate limits — monitor rate limit headers
- Handle errors gracefully — provide fallback data when possible
Data Freshness
- Client scores are updated daily at 00:00 UTC
- Historical data is available for up to 365 days
- Portfolio health metrics are calculated in real-time
Support
Getting Help
| Channel | Details |
|---|---|
| Technical Support | help@knownwell.com (within 24 hours, business days) |
| Account Management | support@knownwell.com |
| API Status | Status page |
Reporting Issues
When reporting issues, please include:
- Request ID (from error response)
- Timestamp of the issue
- Full request details (excluding API key)
- Expected vs actual behavior
- Error message received