Project data model

Updated:

View field support, webhooks, and list parameters for each integration on the Supported Integrations page.

FieldTypeRequiredDescription
idstringNo
created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
namestringNo
codestringNoprovider-side project code/number (e.g. NetSuite entityId, Intacct PROJECTID, BC jobNumber)
descriptionstringNo
statusenumNoValues: NOT_STARTED, IN_PROGRESS, ON_HOLD, COMPLETED, CANCELLED, CLOSED
is_activebooleanNo
is_billablebooleanNo
contact_idstringNothe customer the project is for (reference to AccountingContact)
parent_idstringNoparent project / sub-project hierarchy
manager_user_idstringNoreferences a HRIS employee/user (reference to HrisEmployee)
started_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
due_atstring (date-time)Noplanned/target end date (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
ended_atstring (date-time)Noactual completion (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
currencystringNo
estimate_amountnumberNo
estimated_cost_amountnumberNo
actual_cost_amountnumberNo
invoiced_amountnumberNo
to_be_invoiced_amountnumberNo
expense_amountnumberNo
deposit_amountnumberNo
deposit_applied_amountnumberNo
credit_note_amountnumberNo
minutes_loggednumberNointeger minutes, not hours
minutes_to_be_invoicednumberNointeger minutes, not hours
percent_completenumberNo0-100
billing_typeenumNoValues: FIXED_PRICE, TIME_AND_MATERIALS, MILESTONE, NON_BILLABLE
category_idsstring[]No(reference to AccountingCategory)
location_idstringNo
organization_idstringNo
metadataAccountingMetadata[]No
metadata[].idstringNoThe ID of the custom field definition (from the metadata/metadata endpoint).
metadata[].slugstringNoThe integration's API name (key) of an existing custom field. List valid slugs for this object with the metadata/metadata endpoint; unknown slugs are rejected by the integration.
metadata[].valueobjectNoThe field's value, typed by format: DATE as ISO-8601 (YYYY-MM-DD, or YYYY-MM-DDTHH:MM:SSZ for date-times); NUMBER, PRICE and CURRENCY as a number; BOOLEAN and YES_NO as true/false; MULTIPLE_SELECT as an array of option values; otherwise a string.
metadata[].namespacestringNo
metadata[].formatenumNoThe data type of the custom field, which determines how value is formatted. Values: TEXT, NUMBER, DATE, BOOLEAN, FILE, TEXTAREA, SINGLE_SELECT, MULTIPLE_SELECT, MEASUREMENT, PRICE, YES_NO, CURRENCY, URL
metadata[].extra_dataobjectNo

TypeScript

TypeScript
export type AccountingProject = {
	id?: string;
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	name?: string;
	code?: string; // provider-side project code/number (e.g. NetSuite entityId, Intacct PROJECTID, BC jobNumber)
	description?: string;
	status?: 'NOT_STARTED' | 'IN_PROGRESS' | 'ON_HOLD' | 'COMPLETED' | 'CANCELLED' | 'CLOSED';
	is_active?: boolean;
	is_billable?: boolean;
	contact_id?: string; // the customer the project is for (reference to AccountingContact)
	parent_id?: string; // parent project / sub-project hierarchy
	manager_user_id?: string; // references a HRIS employee/user (reference to HrisEmployee)
	started_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	due_at?: string-time; // planned/target end date (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	ended_at?: string-time; // actual completion (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	currency?: string;
	estimate_amount?: number;
	estimated_cost_amount?: number;
	actual_cost_amount?: number;
	invoiced_amount?: number;
	to_be_invoiced_amount?: number;
	expense_amount?: number;
	deposit_amount?: number;
	deposit_applied_amount?: number;
	credit_note_amount?: number;
	minutes_logged?: number; // integer minutes, not hours
	minutes_to_be_invoiced?: number; // integer minutes, not hours
	percent_complete?: number; // 0-100
	billing_type?: 'FIXED_PRICE' | 'TIME_AND_MATERIALS' | 'MILESTONE' | 'NON_BILLABLE';
	category_ids?: string[]; // (reference to AccountingCategory)
	location_id?: string;
	organization_id?: string;
	metadata?: [];
	raw?: any;
} 

Zod

Zod
import { z } from 'zod';

export const ZodAccountingProject = z.object({
	id: z.string().optional(),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	name: z.string().optional(),
	code: z.string().optional().describe("provider-side project code/number (e.g. NetSuite entityId, Intacct PROJECTID, BC jobNumber)"),
	description: z.string().optional(),
	status: z.enum("NOT_STARTED", "IN_PROGRESS", "ON_HOLD", "COMPLETED", "CANCELLED", "CLOSED").optional(),
	is_active: z.boolean().optional(),
	is_billable: z.boolean().optional(),
	contact_id: z.string().optional().describe("the customer the project is for (reference to AccountingContact)"),
	parent_id: z.string().optional().describe("parent project / sub-project hierarchy"),
	manager_user_id: z.string().optional().describe("references a HRIS employee/user (reference to HrisEmployee)"),
	started_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	due_at: z.string-time().optional().describe("planned/target end date (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	ended_at: z.string-time().optional().describe("actual completion (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	currency: z.string().optional(),
	estimate_amount: z.number().optional(),
	estimated_cost_amount: z.number().optional(),
	actual_cost_amount: z.number().optional(),
	invoiced_amount: z.number().optional(),
	to_be_invoiced_amount: z.number().optional(),
	expense_amount: z.number().optional(),
	deposit_amount: z.number().optional(),
	deposit_applied_amount: z.number().optional(),
	credit_note_amount: z.number().optional(),
	minutes_logged: z.number().optional().describe("integer minutes, not hours"),
	minutes_to_be_invoiced: z.number().optional().describe("integer minutes, not hours"),
	percent_complete: z.number().optional().describe("0-100"),
	billing_type: z.enum("FIXED_PRICE", "TIME_AND_MATERIALS", "MILESTONE", "NON_BILLABLE").optional(),
	category_ids: z.array().optional().describe("(reference to AccountingCategory)"),
	location_id: z.string().optional(),
	organization_id: z.string().optional(),
	metadata: z.array().optional(),

});

Python

Python
import dataclasses

@dataclasses.dataclass
class AccountingProjectStatus(str, Enum):
	NOT_STARTED = 'NOT_STARTED'
	IN_PROGRESS = 'IN_PROGRESS'
	ON_HOLD = 'ON_HOLD'
	COMPLETED = 'COMPLETED'
	CANCELLED = 'CANCELLED'
	CLOSED = 'CLOSED'

@dataclasses.dataclass
class AccountingProjectBilling_type(str, Enum):
	FIXED_PRICE = 'FIXED_PRICE'
	TIME_AND_MATERIALS = 'TIME_AND_MATERIALS'
	MILESTONE = 'MILESTONE'
	NON_BILLABLE = 'NON_BILLABLE'

@dataclasses.dataclass
class AccountingProject:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	name: Optional[str]
	"""provider-side project code/number (e.g. NetSuite entityId, Intacct PROJECTID, BC jobNumber)"""
	code: Optional[str]
	description: Optional[str]
	status: Optional[AccountingProjectStatus]
	is_active: Optional[bool]
	is_billable: Optional[bool]
	"""the customer the project is for (reference to AccountingContact)"""
	contact_id: Optional[str]
	"""parent project / sub-project hierarchy"""
	parent_id: Optional[str]
	"""references a HRIS employee/user (reference to HrisEmployee)"""
	manager_user_id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	started_at: Optional[str]
	"""planned/target end date (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	due_at: Optional[str]
	"""actual completion (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	ended_at: Optional[str]
	currency: Optional[str]
	estimate_amount: Optional[int]
	estimated_cost_amount: Optional[int]
	actual_cost_amount: Optional[int]
	invoiced_amount: Optional[int]
	to_be_invoiced_amount: Optional[int]
	expense_amount: Optional[int]
	deposit_amount: Optional[int]
	deposit_applied_amount: Optional[int]
	credit_note_amount: Optional[int]
	"""integer minutes, not hours"""
	minutes_logged: Optional[int]
	"""integer minutes, not hours"""
	minutes_to_be_invoiced: Optional[int]
	"""0-100"""
	percent_complete: Optional[int]
	billing_type: Optional[AccountingProjectBilling_type]
	"""(reference to AccountingCategory)"""
	category_ids: Optional[List[List[str]]]
	location_id: Optional[str]
	organization_id: Optional[str]
	metadata: Optional[PropertyAccountingProjectMetadata]
Are we missing anything? Let us know
Was this page helpful?