{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "#/components/schemas/Project",
"title": "Project",
"type": "object",
"x-apideck-schema-id": "Project",
"additionalProperties": false,
"x-apideck-weights": {
"id": "critical",
"downstream_id": "edge-case",
"name": "critical",
"display_id": "medium",
"reference_id": "medium",
"description": "medium",
"status": "high",
"active": "high",
"project_type": "medium",
"priority": "medium",
"completion_percentage": "medium",
"completion_date": "medium",
"start_date": "medium",
"end_date": "medium",
"customer": "high",
"department": "medium",
"company_id": "medium",
"owner_id": "medium",
"parent_project": "low",
"currency": "medium",
"budget_amount": "medium",
"approved_amount": "medium",
"actual_amount": "low",
"budget_hours": "medium",
"actual_hours": "low",
"hourly_rate": "medium",
"billing_method": "medium",
"is_billable": "medium",
"phase": "medium",
"tax_rate": "medium",
"tracking_categories": "medium",
"custom_fields": "medium",
"tags": "low",
"notes": "low",
"contract_number": "medium",
"profit_margin": "medium",
"schedule_status": "medium",
"addresses": "medium",
"team_size": "low",
"updated_by": "edge-case",
"created_by": "edge-case",
"updated_at": "medium",
"created_at": "medium",
"row_version": "edge-case"
},
"required": [
"name"
],
"properties": {
"id": {
"$ref": "#/components/schemas/Id"
},
"downstream_id": {
"$ref": "#/components/schemas/DownstreamId"
},
"name": {
"type": "string",
"title": "Project name",
"description": "Name of the project",
"example": "Website Redesign Project",
"minLength": 1
},
"display_id": {
"type": "string",
"title": "Display ID",
"description": "User-friendly project identifier",
"example": "PROJ-001",
"nullable": true
},
"reference_id": {
"type": "string",
"title": "Reference ID",
"description": "External reference identifier for the project",
"example": "WD-REF-2024-001",
"nullable": true
},
"description": {
"type": "string",
"title": "Description",
"description": "Detailed description of the project",
"example": "Complete redesign of the company website including new branding and improved user experience",
"nullable": true
},
"status": {
"type": "string",
"title": "Project Status",
"description": "Current status of the project",
"example": "active",
"enum": [
"active",
"completed",
"on_hold",
"cancelled",
"draft",
"in_progress",
"approved",
"other"
],
"x-apideck-enum-id": "project.status",
"nullable": true
},
"active": {
"type": "boolean",
"title": "Active",
"description": "Indicates whether the project is currently active or inactive",
"example": true,
"nullable": true
},
"project_type": {
"type": "string",
"title": "Project Type",
"description": "Type or category of the project",
"example": "client_project",
"enum": [
"client_project",
"internal_project",
"maintenance",
"research_development",
"training",
"other"
],
"x-apideck-enum-id": "project.project_type",
"nullable": true
},
"priority": {
"type": "string",
"title": "Priority",
"description": "Priority level of the project",
"example": "high",
"enum": [
"low",
"medium",
"high",
"critical"
],
"x-apideck-enum-id": "project.priority",
"nullable": true
},
"completion_percentage": {
"type": "number",
"minimum": 0,
"maximum": 100,
"title": "Completion Percentage",
"description": "Percentage of project completion (0-100)",
"example": 75.5,
"nullable": true
},
"start_date": {
"type": "string",
"format": "date",
"title": "Start Date",
"description": "Start date of the project",
"example": "2024-01-15",
"nullable": true
},
"end_date": {
"type": "string",
"format": "date",
"title": "End Date",
"description": "Expected or planned end date of the project",
"example": "2024-06-30",
"nullable": true
},
"completion_date": {
"type": "string",
"format": "date",
"title": "End Date",
"description": "Actual end date of the project",
"example": "2024-08-06",
"nullable": true
},
"customer": {
"$ref": "#/components/schemas/LinkedCustomer"
},
"department": {
"type": "object",
"title": "Department",
"description": "Department or organizational unit associated with the project",
"nullable": true,
"properties": {
"id": {
"type": "string",
"title": "Department ID",
"description": "Unique identifier for the department",
"example": "DEPT-001"
},
"name": {
"type": "string",
"title": "Department Name",
"description": "Name of the department",
"example": "Marketing"
}
}
},
"company_id": {
"$ref": "#/components/schemas/AccountingCompanyId"
},
"owner_id": {
"type": "string",
"title": "Owner ID",
"description": "ID of the user who owns/manages this project",
"example": "12345",
"nullable": true
},
"parent_project": {
"type": "object",
"title": "Parent Project",
"description": "Parent project if this is a subproject",
"nullable": true,
"properties": {
"id": {
"type": "string",
"title": "Parent Project ID",
"description": "Unique identifier for the parent project",
"example": "PROJ-PARENT-001"
},
"name": {
"type": "string",
"title": "Parent Project Name",
"description": "Name of the parent project",
"example": "Company Website Overhaul"
}
}
},
"currency": {
"$ref": "#/components/schemas/Currency"
},
"budget_amount": {
"type": "number",
"multipleOf": 0.01,
"title": "Budget Amount",
"description": "Total budgeted amount for the project",
"example": 50000,
"nullable": true
},
"approved_amount": {
"type": "number",
"multipleOf": 0.01,
"title": "Approved Amount",
"description": "Approved budget amount for the project",
"example": 48000,
"nullable": true
},
"actual_amount": {
"type": "number",
"multipleOf": 0.01,
"title": "Actual Amount",
"description": "Total actual amount spent on the project",
"example": 45250.75,
"nullable": true,
"readOnly": true
},
"budget_hours": {
"type": "number",
"title": "Budget Hours",
"description": "Total budgeted hours for the project",
"example": 400,
"nullable": true
},
"actual_hours": {
"type": "number",
"title": "Actual Hours",
"description": "Total actual hours worked on the project",
"example": 385.5,
"nullable": true,
"readOnly": true
},
"hourly_rate": {
"type": "number",
"multipleOf": 0.01,
"title": "Hourly Rate",
"description": "Default hourly rate for project work",
"example": 125,
"nullable": true
},
"billing_method": {
"type": "string",
"title": "Billing Method",
"description": "Method used for billing this project",
"example": "time_and_materials",
"enum": [
"fixed_price",
"time_and_materials",
"milestone_based",
"retainer",
"non_billable"
],
"x-apideck-enum-id": "project.billing_method",
"nullable": true
},
"is_billable": {
"type": "boolean",
"title": "Is Billable",
"description": "Indicates if the project is billable to the customer",
"example": true,
"default": true,
"nullable": true
},
"phase": {
"type": "string",
"title": "Project Phase",
"description": "Current phase of the project lifecycle",
"example": "execution",
"enum": [
"initiation",
"planning",
"execution",
"monitoring",
"closure",
"other"
],
"x-apideck-enum-id": "project.phase",
"nullable": true
},
"tax_rate": {
"$ref": "#/components/schemas/LinkedTaxRate"
},
"tracking_categories": {
"$ref": "#/components/schemas/LinkedTrackingCategories"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"title": "Tags",
"description": "Tags associated with the project",
"example": [
"website",
"redesign",
"urgent"
]
},
"notes": {
"type": "string",
"title": "Notes",
"description": "Additional notes about the project",
"example": "Client has requested modern design with mobile-first approach",
"nullable": true
},
"contract_number": {
"type": "string",
"title": "Contract Number",
"description": "Contract or agreement number associated with the project",
"example": "CNT-2024-001",
"nullable": true
},
"profit_margin": {
"type": "number",
"title": "Profit Margin",
"description": "Expected profit margin percentage for the project",
"example": 15.5,
"minimum": 0,
"maximum": 100,
"nullable": true
},
"schedule_status": {
"type": "string",
"title": "Schedule Status",
"description": "Current status of project schedule compared to plan",
"example": "on_schedule",
"enum": [
"ahead_of_schedule",
"on_schedule",
"behind_schedule",
"critical_delay"
],
"x-apideck-enum-id": "project.schedule_status",
"nullable": true
},
"addresses": {
"type": "array",
"title": "Addresses",
"description": "An array of addresses associated with the project (billing, job site, etc.)",
"items": {
"$ref": "#/components/schemas/Address"
}
},
"team_size": {
"type": "integer",
"title": "Team Size",
"description": "Number of team members assigned to the project",
"example": 8,
"minimum": 0,
"nullable": true
},
"custom_fields": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CustomField"
}
},
"row_version": {
"$ref": "#/components/schemas/RowVersion"
},
"updated_by": {
"$ref": "#/components/schemas/UpdatedBy"
},
"created_by": {
"$ref": "#/components/schemas/CreatedBy"
},
"created_at": {
"$ref": "#/components/schemas/CreatedAt"
},
"updated_at": {
"$ref": "#/components/schemas/UpdatedAt"
}
}
}