1. Executive Overview & Architecture
Quantivo ProspectIQ CRM provides a comprehensive RESTful API framework designed to manage the full lifecycle of software engineering and operational projects. Through the API, external developer platforms, CI/CD pipelines (GitHub Actions, GitLab CI, Bitbucket Pipelines), and microservices can programmatically interact with projects, tasks, milestones, timesheets, and checklists.
Key Integration Capabilities
- Projects Lifecycle: Provisioning, status management, client allocation, budget tracking, and member assignment.
- Task Management: Hierarchical work breakdown structure (WBS), priorities, milestones, deadlines, and dynamic task status updates.
- Task Checklists: Granular acceptance criteria verification and definition-of-done (DoD) tracking.
- Timesheets & Resource Tracking: Granular labor logging, start/stop timer integrations, and developer effort auditing.
- Git CI/CD Automation: Automated commit-to-task correlation, PR status synchronization, and build/deploy event logging.
2. Authentication & Authorization
All API endpoints require authentication using the API key header:
authtoken: YOUR_API_TOKEN_HERE
Content-Type: application/json
- Base URL:
https://crm.quantivolabs.co.ke/api/ - Token Generation: Navigate to Setup > Integrations > API / Users in the ProspectIQ CRM console to generate API keys with appropriate project and task privileges.
- Access Control: API tokens enforce staff role permissions. Ensure the service token possesses
VIEW,CREATE,EDIT, andLOG_TIMEpermissions for Projects and Tasks.
3. Core Project Management API Specifications
3.1 Projects API
List Projects
Endpoint: GET /api/projects
Query Parameters:
status: Filter by project status ID (e.g.1=Not Started,2=In Progress,3=On Hold,4=Finished,5=Cancelled)clientid: Filter by client IDlimit: Number of records (default50)
curl -X GET "https://crm.quantivolabs.co.ke/api/projects?status=2" \
-H "authtoken: {{authtoken}}"
Get Project Details
Endpoint: GET /api/projects/:id
Create Project
Endpoint: POST /api/projects
Payload:
{
"name": "SuperApp Settlement Microservice Migration",
"clientid": "1",
"billing_type": "1",
"start_date": "2026-09-15",
"deadline": "2026-11-30",
"description": "Migration of settlement reconciliation engine to distributed event architecture.",
"progress_from_tasks": "1",
"project_members": [1, 7, 8]
}
3.2 Tasks API
List Tasks
Endpoint: GET /api/tasks
Query Parameters: rel_type=project, rel_id=PROJECT_ID, status=STATUS_ID
Create Task
Endpoint: POST /api/tasks
Payload:
{
"name": "Implement Idempotency Keys in Settlement Gateway",
"priority": "3",
"startdate": "2026-09-12",
"duedate": "2026-09-18",
"rel_type": "project",
"rel_id": "1",
"milestone": "2",
"description": "Ensure payment webhooks cannot trigger duplicate ledger postings.",
"assignees": [1, 8],
"billable": "1"
}
Update Task Status
Endpoint: POST /api/tasks/status/:id or PUT /api/tasks/:id
Status Mapping: 1 = Not Started | 4 = In Progress | 3 = Testing / QA | 2 = Awaiting Feedback | 5 = Complete
{
"status": "5"
}
3.3 Task Checklists & Milestones API
Add Checklist Item to Task
Endpoint: POST /api/tasks/:id/checklist_items
{
"description": "Unit tests pass with >90% coverage",
"finished": 0
}
Complete Checklist Item
Endpoint: PUT /api/tasks/checklist_items/:item_id
{
"finished": 1
}
Create Milestone
Endpoint: POST /api/projects/:id/milestones
{
"name": "Sprint 1: Settlement Engine Kernel",
"due_date": "2026-09-30",
"description": "Core messaging and event distribution verification."
}
3.4 Timesheets & Work Logging API
Log Time Entry
Endpoint: POST /api/timesheets
{
"task_id": "45",
"staff_id": "1",
"start_time": "2026-09-11 14:00:00",
"end_time": "2026-09-11 16:30:00",
"note": "Refactored payment event listener and added retry handling in settlement service."
}
Fetch Project Timesheets
Endpoint: GET /api/timesheets?project_id=1
4. Git CI/CD Automated Activity & Task Tracking
Automate project tracking across GitHub, GitLab, and Bitbucket using standardized commit formatting and CI pipelines.
4.1 Commit Message Grammar
feat(settlement): add idempotent transaction lock [TASK-45] #time 1h 30m
- Resolves race condition during concurrent settlement calls
- Closes checklist: 'Concurrency stress testing'
Refs: #45
- Task Key:
[TASK-<id>],TASK-<id>, or#<id> - Status Triggers:
Fixes #<id>,Closes #<id>,Resolves [TASK-<id>]triggers status transition to Testing (3) or Complete (5). - Time Logging:
#time 1h 30mautomatically parses effort and submits timesheets against the task.
4.2 GitHub Actions Workflow Sample
Add .github/workflows/prospectiq-task-sync.yml to your application repositories:
name: ProspectIQ Task & Activity Sync
on:
push:
branches: [ "main", "develop" ]
pull_request:
types: [ opened, closed, synchronize ]
jobs:
sync-task:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 5
- name: Sync Git Activity to ProspectIQ CRM
env:
PROSPECTIQ_API_URL: "https://crm.quantivolabs.co.ke/api"
PROSPECTIQ_API_TOKEN: ${{ secrets.PROSPECTIQ_API_TOKEN }}
COMMIT_MSG: ${{ github.event.head_commit.message }}
AUTHOR_EMAIL: ${{ github.event.head_commit.author.email }}
run: |
TASK_ID=$(echo "$COMMIT_MSG" | grep -oE '(TASK-[0-9]+|#[0-9]+)' | head -n1 | tr -dc '0-9')
if [ -z "$TASK_ID" ]; then
echo "No CRM task ID found in commit."
exit 0
fi
echo "Found ProspectIQ Task ID: $TASK_ID"
# 1. Post Git activity comment to task
COMMENT_BODY="Git Push on ${GITHUB_REPOSITORY} (${GITHUB_REF_NAME}):\nCommit: ${GITHUB_SHA::7} by ${AUTHOR_EMAIL}\nMessage: ${COMMIT_MSG}"
curl -s -X POST "${PROSPECTIQ_API_URL}/tasks/${TASK_ID}/comments" \
-H "authtoken: ${PROSPECTIQ_API_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"content\": \"$COMMENT_BODY\"}"
# 2. Check if closing keywords are present
if echo "$COMMIT_MSG" | grep -iqE '(closes|fixes|resolves)'; then
echo "Transitioning task to Testing/QA (Status 3)..."
curl -s -X POST "${PROSPECTIQ_API_URL}/tasks/status/${TASK_ID}" \
-H "authtoken: ${PROSPECTIQ_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"status": "3"}'
fi
# 3. Check for time log
TIME_LOG=$(echo "$COMMIT_MSG" | grep -oE '#time\s+[0-9]+(h|m)' | awk '{print $2}')
if [ -n "$TIME_LOG" ]; then
END_TIME=$(date -u +"%Y-%m-%d %H:%M:%S")
START_TIME=$(date -u -d "1 hour ago" +"%Y-%m-%d %H:%M:%S")
curl -s -X POST "${PROSPECTIQ_API_URL}/timesheets" \
-H "authtoken: ${PROSPECTIQ_API_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"task_id\": \"$TASK_ID\", \"start_time\": \"$START_TIME\", \"end_time\": \"$END_TIME\", \"note\": \"Automated CI time log: $COMMIT_MSG\"}"
fi
5. Postman Collection Integration
A ready-to-import Postman collection has been pre-configured with all endpoints, schema validation scripts, and automated environment variable capture.
- File Name:
crm_project_management_postman_collection.json - Server Path:
/www/wwwroot/crm.quantivolabs.co.ke/prospectiq/crm_project_management_postman_collection.json - Local Project Path:
public_html/crm_project_management_postman_collection.json