Skip to main content
Skip to Content

Projects API

Projects represent scoped work for a company. They can be billed as time & materials, fixed fee, or against a retainer agreement.

The Project Object

{
  "id": "prj_cuid123456",
  "title": "Website Redesign",
  "description": "Complete redesign of corporate website with new CMS",
  "client_id": "cli_xxxxx",
  "status": "active",
  "type_id": "ptype_xxxxx",
  "billing_type": "fixed_fee",
  "manager_id": "usr_xxxxx",
  "contact_id": "con_xxxxx",
  "agreement_id": null,
  "dates": {
    "start_date": "2026-01-15",
    "due_date": "2026-03-31",
    "commenced_at": "2026-01-16T09:00:00Z",
    "completed_at": null
  },
  "budget": {
    "hours": 200.00,
    "amount": 25000.00,
    "hours_used": 87.50,
    "amount_billed": 10937.50,
    "percent_complete": 43.75
  },
  "rate": {
    "override": false,
    "rate_id": null,
    "custom_rate": null
  },
  "notes": "Priority project - CEO visibility",
  "contract_url": "https://drive.google.com/...",
  "created_at": "2026-01-10T14:30:00Z",
  "updated_at": "2026-01-22T11:15:00Z"
}

Project Fields

FieldTypeDescription
idstringUnique identifier (prefix: prj_)
titlestringRequired. Project name
descriptionstringProject description
client_idstringRequired. Associated client
statusenumProject status (see below)
type_idstringProject type category
billing_typeenumHow this project is billed
manager_idstringAssigned project manager
contact_idstringPrimary client contact
agreement_idstringRetainer agreement (if billing type is retainer)
datesobjectProject dates
budgetobjectBudget and progress tracking
rateobjectRate overrides
notesstringInternal notes
contract_urlstringLink to contract/SOW document
created_atdatetimeWhen the project was created
updated_atdatetimeWhen the project was last updated

Project Status

StatusDescription
pendingNot started, planning phase
activeWork in progress
on_holdPaused (client decision, blocker, etc.)
completedAll work finished
cancelledProject cancelled

Billing Types

TypeDescription
time_and_materialsBill actual hours at rate
fixed_feeFixed price with milestone billing
retainerBill against retainer agreement
non_billableInternal or pro-bono work

List Projects

GET/v1/projectsList all projects

Returns a paginated list of projects.

Query Parameters

ParameterTypeDefaultDescription
pageinteger1Page number
per_pageinteger20Results per page (max: 100)
client_idstringFilter by client
statusstringFilter by status
billing_typestringFilter by billing type
manager_idstringFilter by project manager
type_idstringFilter by project type
searchstringSearch project titles
sortstringcreated_atSort by: title, created_at, due_date, status
orderstringdescSort order: asc, desc

Request

curl "https://api.govantage.co/v1/projects?status=active&manager_id=usr_xxxxx" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Response

{
  "data": [
    {
      "id": "prj_cuid123456",
      "title": "Website Redesign",
      "client_id": "cli_xxxxx",
      "client_name": "Acme Corporation",
      "status": "active",
      "billing_type": "fixed_fee",
      "manager_id": "usr_xxxxx",
      "dates": {
        "due_date": "2026-03-31"
      },
      "budget": {
        "hours": 200.00,
        "hours_used": 87.50,
        "percent_complete": 43.75
      },
      "created_at": "2026-01-10T14:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 45,
    "total_pages": 3
  }
}

Create a Project

POST/v1/projectsCreate a new project

Request Body

FieldTypeRequiredDescription
titlestringYesProject name
client_idstringYesClient ID
descriptionstringNoProject description
statusstringNoDefault: pending
type_idstringNoProject type ID
billing_typestringNoDefault: time_and_materials
manager_idstringNoProject manager user ID
contact_idstringNoClient contact ID
agreement_idstringNoRetainer agreement ID
start_datedateNoProject start date
due_datedateNoTarget completion date
budget_hoursdecimalNoBudgeted hours
budget_amountdecimalNoBudget amount (for fixed fee)
notesstringNoInternal notes
contract_urlstringNoLink to contract document

Request

curl -X POST "https://api.govantage.co/v1/projects" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Website Redesign",
    "client_id": "cli_xxxxx",
    "description": "Complete redesign of corporate website",
    "billing_type": "fixed_fee",
    "manager_id": "usr_xxxxx",
    "start_date": "2026-02-01",
    "due_date": "2026-04-30",
    "budget_hours": 200,
    "budget_amount": 25000
  }'

Response

{
  "data": {
    "id": "prj_cuid789012",
    "title": "Website Redesign",
    "client_id": "cli_xxxxx",
    "description": "Complete redesign of corporate website",
    "status": "pending",
    "billing_type": "fixed_fee",
    "manager_id": "usr_xxxxx",
    "dates": {
      "start_date": "2026-02-01",
      "due_date": "2026-04-30"
    },
    "budget": {
      "hours": 200.00,
      "amount": 25000.00,
      "hours_used": 0,
      "amount_billed": 0,
      "percent_complete": 0
    },
    "created_at": "2026-01-25T10:30:00Z",
    "updated_at": "2026-01-25T10:30:00Z"
  }
}

Get a Project

GET/v1/projects/:idRetrieve a project by ID

Path Parameters

ParameterDescription
idThe project ID

Query Parameters

ParameterTypeDescription
includestringComma-separated: client, manager, tickets, time_entries, milestones, phases, tasks

Request

curl "https://api.govantage.co/v1/projects/prj_cuid123456?include=tickets,time_entries" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Response

{
  "data": {
    "id": "prj_cuid123456",
    "title": "Website Redesign",
    "client_id": "cli_xxxxx",
    "description": "Complete redesign of corporate website with new CMS",
    "status": "active",
    "billing_type": "fixed_fee",
    "manager_id": "usr_xxxxx",
    "dates": {
      "start_date": "2026-01-15",
      "due_date": "2026-03-31",
      "commenced_at": "2026-01-16T09:00:00Z"
    },
    "budget": {
      "hours": 200.00,
      "amount": 25000.00,
      "hours_used": 87.50,
      "amount_billed": 10937.50,
      "percent_complete": 43.75
    },
    "tickets": [
      {
        "id": "tkt_xxxxx",
        "title": "Homepage wireframes",
        "status": "completed"
      },
      {
        "id": "tkt_yyyyy",
        "title": "Design system setup",
        "status": "in_progress"
      }
    ],
    "time_entries": {
      "total_hours": 87.50,
      "billable_hours": 85.00,
      "by_user": [
        { "user_id": "usr_xxxxx", "hours": 45.00 },
        { "user_id": "usr_yyyyy", "hours": 42.50 }
      ]
    },
    "created_at": "2026-01-10T14:30:00Z",
    "updated_at": "2026-01-22T11:15:00Z"
  }
}

Update a Project

PUT/v1/projects/:idUpdate a project

Path Parameters

ParameterDescription
idThe project ID

Request

curl -X PUT "https://api.govantage.co/v1/projects/prj_cuid123456" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "active",
    "due_date": "2026-04-15",
    "notes": "Extended deadline per client request"
  }'

Delete a Project

DELETE/v1/projects/:idDelete a project

Deleting a project removes all associated tickets, time entries, and tasks. This action cannot be undone. Consider setting status to cancelled instead.

Request

curl -X DELETE "https://api.govantage.co/v1/projects/prj_cuid123456" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Project Tickets

List Project Tickets

GET/v1/projects/:id/ticketsList tickets for a project
curl "https://api.govantage.co/v1/projects/prj_cuid123456/tickets" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Create Project Ticket

POST/v1/projects/:id/ticketsCreate a ticket under this project
curl -X POST "https://api.govantage.co/v1/projects/prj_cuid123456/tickets" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Implement contact form",
    "description": "Add contact form to homepage with validation",
    "priority_id": "pri_xxxxx",
    "assignee_id": "usr_xxxxx"
  }'

Project Time Entries

List Project Time

GET/v1/projects/:id/time-entriesList time entries for a project
curl "https://api.govantage.co/v1/projects/prj_cuid123456/time-entries?from=2026-01-01&to=2026-01-31" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Project Milestones

List Milestones

GET/v1/projects/:id/milestonesList milestones for a project

Create Milestone

POST/v1/projects/:id/milestonesCreate a milestone
curl -X POST "https://api.govantage.co/v1/projects/prj_cuid123456/milestones" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Design Complete",
    "due_date": "2026-02-15",
    "amount": 5000,
    "description": "All design deliverables approved"
  }'

Project Phases

List Phases

GET/v1/projects/:id/phasesList phases for a project

Reorder Phases

PUT/v1/projects/:id/phases/reorderReorder project phases
curl -X PUT "https://api.govantage.co/v1/projects/prj_cuid123456/phases/reorder" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "phase_ids": ["phase_1", "phase_3", "phase_2", "phase_4"]
  }'

Budget Tracking

Projects track budget consumption automatically:

MetricDescription
hours_usedTotal hours logged against project
amount_billedTotal amount invoiced
percent_completeProgress percentage

Budget alerts are triggered at 75%, 90%, and 100% consumption. Configure notification settings in the dashboard.


Webhooks

Subscribe to project events:

EventDescription
project.createdNew project created
project.updatedProject details changed
project.status_changedStatus transitioned
project.budget_alertBudget threshold crossed
project.completedProject marked complete

Next Steps