Skip to Content
Docs are evolving — expect frequent updates.
CompanyChange Status

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

HeaderRequiredDescription
AuthorizationYesYour API key (format: YOUR_API_KEY)
Content-TypeYesMust be application/json

Request Body

FieldTypeRequiredDescription
projectIdstringYesUnique project identifier
projectstatusIdstringYesStatus ID from /api/config
projectphaseIdstringYesPhase ID from /api/config
projectstageIdstringNoStage ID (if applicable)
reasonTakenArrayarrayNoArray of reason objects with id and name
commentstringNoComment explaining the change (max 1000 chars)

Getting Required IDs

To find the correct status, phase, and stage IDs:

  1. Call Config Endpoint: GET /api/config
  2. Find Status: Look in projectstatus array for code (e.g., active, dropped)
  3. Find Phase: Look in projectphases array for code (e.g., invested, rejected)
  4. Extract ID: Use the id field from matching objects

Common Status Codes

CodeStatusUse Case
activeActiveCurrently evaluating
screeningScreeningInitial review
droppedDroppedNo longer pursuing
archivedArchivedHistorical record

Common Phase Codes

CodePhaseMeaning
undecidedUndecidedNot yet decided
duediligenceDue DiligenceActive investigation
investedInvestedInvestment completed
rejectedRejectedOpportunity declined
exitedExitedInvestment realized

Code Examples

JavaScript/TypeScript

CODE
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

CODE
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

CODE
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
{
  "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
{
  "code": "4000",
  "title": "Bad Request",
  "description": "Invalid status ID or phase ID"
}

404 Not Found

CODE
{
  "code": "4040",
  "title": "Not Found",
  "description": "Project not found"
}

Pipeline Workflow Examples

Example 1: Complete Investment Flow

CODE
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

CODE
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

CODE
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

CODE
{
  "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

CODE
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);
  }
}

Troubleshooting

Invalid Status ID

  • Call /api/config to get current valid IDs
  • Check for typos in status code
  • Verify status exists in your account

Invalid Phase ID

  • Call /api/config to 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