Change Status
Move projects through your investment pipeline by updating their status, phase, and stage. Track decision-making with comments and reasons, with automatic webhook notifications for pipeline changes.
Endpoint
POST https://api.kruncher.ai/api/integration/project/status
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Your API key (format: YOUR_API_KEY) |
Content-Type | Yes | Must be application/json |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Unique project identifier |
projectstatusId | string | Yes | Status ID from /api/config |
projectphaseId | string | Yes | Phase ID from /api/config |
projectstageId | string | No | Stage ID (if applicable) |
reasonTakenArray | array | No | Array of reason objects with id and name |
comment | string | No | Comment explaining the change (max 1000 chars) |
Getting Required IDs
To find the correct status, phase, and stage IDs:
- Call Config Endpoint:
GET /api/config - Find Status: Look in
projectstatusarray for code (e.g.,active,dropped) - Find Phase: Look in
projectphasesarray for code (e.g.,invested,rejected) - Extract ID: Use the
idfield from matching objects
Common Status Codes
| Code | Status | Use Case |
|---|---|---|
active | Active | Currently evaluating |
screening | Screening | Initial review |
dropped | Dropped | No longer pursuing |
archived | Archived | Historical record |
Common Phase Codes
| Code | Phase | Meaning |
|---|---|---|
undecided | Undecided | Not yet decided |
duediligence | Due Diligence | Active investigation |
invested | Invested | Investment completed |
rejected | Rejected | Opportunity declined |
exited | Exited | Investment realized |
Code Examples
JavaScript/TypeScript
Basic
const API_KEY = "YOUR_API_KEY_HERE";
const response = await fetch("https://api.kruncher.ai/api/integration/project/status", {
method: "POST",
headers: {
"Authorization": `${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
projectId: "521a93a6-091d-4943-ba13-7c1a654a14ae",
projectstatusId: "status_active_id",
projectphaseId: "phase_invested_id",
comment: "Moving to invested phase based on board decision"
})
});
const result = await response.json();
console.log("Status updated:", result);Result: Updates project status and phase with a comment.
Python
Basic
import requests
API_KEY = "YOUR_API_KEY_HERE"
url = "https://api.kruncher.ai/api/integration/project/status"
headers = {
"Authorization": f"{API_KEY}",
"Content-Type": "application/json"
}
data = {
"projectId": "521a93a6-091d-4943-ba13-7c1a654a14ae",
"projectstatusId": "status_active_id",
"projectphaseId": "phase_invested_id",
"comment": "Moving to invested phase based on board decision"
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Status updated:", response.json())
else:
print(f"Error: {response.status_code} {response.text}")Result: Updates project status and phase.
cURL
Basic
curl -X POST "https://api.kruncher.ai/api/integration/project/status" \
-H "Authorization: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"projectId": "521a93a6-091d-4943-ba13-7c1a654a14ae",
"projectstatusId": "status_active_id",
"projectphaseId": "phase_invested_id",
"comment": "Moving to invested phase"
}'Response
Success Response (200 OK)
{
"code": "1000",
"title": "Success",
"description": "Project status updated successfully",
"data": {
"projectId": "521a93a6-091d-4943-ba13-7c1a654a14ae",
"previousStatus": "screening",
"newStatus": "active",
"previousPhase": "undecided",
"newPhase": "invested",
"comment": "Board approved $5M Series A investment",
"updatedAt": "2024-01-15T10:30:00Z"
}
}Error Responses
400 Bad Request
{
"code": "4000",
"title": "Bad Request",
"description": "Invalid status ID or phase ID"
}404 Not Found
{
"code": "4040",
"title": "Not Found",
"description": "Project not found"
}Pipeline Workflow Examples
Example 1: Complete Investment Flow
const manager = new ProjectStatusManager(API_KEY);
// Step 1: Initial screening
await manager.moveToScreening("proj_123");
// Step 2: Passed screening, move to due diligence
const ddReasons = [
{ id: "reason_1", name: "Strong founding team" },
{ id: "reason_2", name: "Large TAM" },
{ id: "reason_3", name: "Innovative product" }
];
await manager.moveToDueDiligence(
"proj_123",
ddReasons,
"Approved by investment committee"
);
// Step 3: Due diligence complete, move to investment
const investmentReasons = [
{ id: "reason_1", name: "Excellent financials" },
{ id: "reason_2", name: "Strong market validation" }
];
await manager.moveToInvested(
"proj_123",
investmentReasons,
"Board approved $5M Series A lead"
);
console.log("Investment complete!");Example 2: Rejection Flow
manager = ProjectStatusManager()
# Company doesn't fit investment criteria
manager.reject(
"proj_456",
"Market timing concerns - space too competitive"
)
# Later: Archive the rejected project
manager.archive(
"proj_456",
"Archived rejected opportunities for Q1 2024"
)Example 3: Bulk Status Updates
const manager = new ProjectStatusManager(API_KEY);
const projectsToMove = [
{ id: "proj_1", status: "screening", phase: "undecided" },
{ id: "proj_2", status: "active", phase: "duediligence" },
{ id: "proj_3", status: "dropped", phase: "rejected" }
];
for (const project of projectsToMove) {
try {
await manager.updateStatus(
project.id,
project.status,
project.phase,
[],
`Bulk update to ${project.status}`
);
console.log(`✓ Updated ${project.id}`);
} catch (error) {
console.error(`✗ Failed to update ${project.id}: ${error.message}`);
}
}Webhook Integration
When a status change is made, a changedStatus webhook event is triggered if webhooks are configured.
Webhook Payload
{
"eventType": "changedStatus",
"projectId": "521a93a6-091d-4943-ba13-7c1a654a14ae",
"previousStatus": "screening",
"newStatus": "active",
"previousPhase": "undecided",
"newPhase": "invested",
"comment": "Board approved investment",
"updatedAt": "2024-01-15T10:30:00Z"
}Configure webhooks in your Webhook Settings to receive these notifications.
Best Practices
Before Updating Status
- Verify project exists
- Check current status to avoid redundant updates
- Validate status/phase transitions (e.g., can’t go from invested to undecided)
- Log all status changes
- Add meaningful comments for audit trail
Using Reasons
- Always provide reasons when moving to due diligence or investment
- Use consistent reason codes across team
- Document reason IDs in team documentation
- Track which reasons drive decisions
Comments
- Keep under 1000 characters
- Be specific about decision drivers
- Include dollar amounts for investments
- Reference meeting/committee that made decision
- Use consistent format for searchability
Error Handling
try {
await manager.moveToInvested("proj_123", reasons, comment);
} catch (error) {
if (error.message.includes("Invalid")) {
// Invalid status or phase
console.error("Check status/phase codes");
} else if (error.message.includes("not found")) {
// Project doesn't exist
console.error("Project not found");
} else {
// Other error
console.error("Update failed:", error);
}
}Related Endpoints
- Configuration - Get valid status and phase IDs
- Find Companies - Get project IDs
- Webhooks - Configure status change notifications
- Update Analysis - Update project data
Troubleshooting
Invalid Status ID
- Call
/api/configto get current valid IDs - Check for typos in status code
- Verify status exists in your account
Invalid Phase ID
- Call
/api/configto get current valid IDs - Phase codes are case-sensitive
- Verify phase exists for your account
Project Not Found
- Verify project ID is correct
- Check project hasn’t been deleted
- Ensure you have access to project
Status Transition Blocked
- Some transitions may be restricted by business rules
- Contact support if expected transition is blocked
- Review pipeline configuration
Need Help?
- Custom statuses? Contact support to configure
- Webhook issues? Check Webhook Guide
- Bulk updates? Ask about batch processing
- Audit trail? All changes logged with comments
Last updated on