Ajera API
message for Ajera API general doc
For additional api methods see the following below:
Home
Clients API
Contacts API
Employees API
Vendors API
Expense Reports API
GL Accounts API
Various List Methods
Messages ¶
Group of all messages-related resources.
API Endpoint ¶
id
is an Ajera API specific id that is required to access the API for any given
API server call. This id and specific url can be obtained from the
Ajera 8 Menu Utility -> Setup Integrations -> API Settings
List ProjectsPOST/AjeraAPI.ashx?{id}
See v2.0 for more details on other methods Projects
ListProjects returns an array of Projects, limited by the optional filters detailed below.
Each returned Project includes only very basic information. This method is intended to be used for querying Projects for particular key values, which can then be passed to GetProjects for more detailed information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListProjects
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListProjects",
SessionToken: "",
MethodArguments: {
FilterByStatus: ["Preliminary", "Hold"],
FilterByCompany: [1],
FilterByNameLike: "Description",
FilterByDescriptionLike: "Project Description",
FilterByDescriptionEquals: "Project Description",
FilterByIDLike: "03-M4",
FilterByProjectType: [1, null],
FilterBySyncToCRM: [true],
FilterByEarliestModifiedDate: "2015-03-11",
FilterByLatestModifiedDate: "2015-03-11"
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
FilterByStatus: "string array, optional, (valid values: "Preliminary", "Active", "Hold", "WorkHold", "BillingHold", "Closed", "Marketing")",
FilterByCompany: "int array, optional",
FilterByNameLike: "string, optional, (LIKE match on Description and ID)",
FilterByDescriptionLike: "string, optional, (LIKE match on Description)",
FilterByDescriptionEquals: "string, optional, (equality match on Description)",
FilterByIDLike: "string, optional, (LIKE match on ID)",
FilterByProjectType: "int array, can include null, optional",
FilterBySyncToCRM: "bool array, optional",
FilterByEarliestModifiedDate: "date string (specific format), optional",
FilterByLatestModifiedDate: "date string (specific format)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
ProjectKey: 3,
ID: "some text",
Description: "the description"
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
type: "object",
properties: {
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object",
properties: {
ProjectKey: {
type: int
},
ID: {
type: "string"
},
Description: {
type: "string"
}
}
},
UsageKey: {
type: "guid"
}
}
}
Get ProjectsPOST/AjeraAPI.ashx?{id}
See v2.0 for more details on GetProjects
GetProjects takes one or more key values, and returns an array of matching Projects.
This method returns detailed information, which can be used to populate required fields when calling UpdateProjects.
CustomFields can be viewed/updated, the field names are prepended with the string CF_
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
GetProjects
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "GetProjects",
SessionToken: "",
MethodArguments: {
RequestedProjects: [1, 2, 3]
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
RequestedProjects: "int array, required"
}
}
200
Headers
Content-Type: application/json
Body
{
Content: {
Projects: [
{
ProjectKey: 1,
Description: "",
ID: "",
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
BudgetedOverheadRate: 175.0,
ProjectManager: {
EmployeeKey: 1,
FirstName: "PM",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 2,
FirstName: "PC",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 3,
FirstName: "MC",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
Notes: "project notes",
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ConstructionCost: 0.00,
PercentOfConstructionCost: 0.0000,
ReportedPercentComplete: 0.0000,
ReportedPercentDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
LaborEntry: false,
ExpenseConsultantEntry: false,
Contacts: [
{
ContactKey: 1,
Order: 1,
Text: "",
Description: "",
FirstName: "C1",
MiddleName: "",
LastName: "",
Title: "",
}
],
InvoiceGroups: [
{
InvoiceGroupKey: 1,
Description: "",
Client: {
ClientKey: 1,
Description: "",
},
InvoiceFormatKey: 1,
InvoiceFormatDescription: "",
EmailInvoiceTemplateKey: 1,
EmailInvoiceTemplateDescription: "Default Template",
EmailClientStatementTemplateKey: 1,
EmailClientStatementTemplateDescription: "Default Template",
PrintBackup: false,
EmailIncludeBackup: false,
BillingManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
BillingContact: {
ContactKey: 2,
Description: "",
FirstName: "",
MiddleName: "",
LastName: ""
},
InvoiceHeaderText: "",
InvoiceFooterText: "",
InvoiceScope: "",
Notes: "invoice gropup notes",
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
Notes: "phase notes",
IsBillingGroup: false,
SummarizeBillingGroup: false,
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: 3,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
]
}
]
}
]
}
]
},
Errors: [],
Message: "Success",
ResponseCode: 200,
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object"
},
UsageKey: {
type: "guid"
}
}
Update ProjectsPOST/AjeraAPI.ashx?{id}
See v2.0 for more details on UpdateProjects CreateProjects
UpdateProjects is used to update, create or delete Projects.
To create Projects, Projects is set to empty, and UpdatedProjects items are given an ProjectKey with a negative value.
To update or delete Projects, Projects must be provided with all fields populated with current data, most likely obtained from calling GetProjects. If updating, UpdatedProjects is populated with the desired values in place for each field, and optional fields may be omitted. If deleting, UpdatedProjects has the optional “Delete” field set to true, and only ProjectKey and LastModifiedDate fields are required.
CustomFields can be viewed/updated, the field names are prepended with the string CF_
To create each negative key must be unique, see example below.
Some List methods may be required in order to create a record.
ListClients
ListCompanies
ListInvoiceFromats
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
UpdateProjects
Headers
Content-Type: application/json
Accept: application/json
Body
Minimum required to create --v
{
Method: "UpdateProjects",
SessionToken: "string, see CreateAPISession",
MethodArguments: {
UpdatedProjects: [
{
ProjectKey: -1, int must be unique,
LastModifiedDate: "string, must match this format: 2017-12-06 14:46:06.873 GMT-08:00",
Description: "string",
BillingType: "string, ('Null', 'TimeAndExpense', 'FixedFee', 'PercentComplete', 'UnitPrice', 'PercentofConstructionCost', 'Nonbillable', 'Marketing', 'Overhead', 'Adjustment')"
CompanyKey: int, see ListCompanies,
Contacts: [],
InvoiceGroups: [
{
InvoiceGroupKey: -2, int must be unique,
InvoiceFormatKey: (int, see ListInvoiceFormats),
Description: "string",
Client: {
ClientKey: int, see ListClients
},
Phases: [
{
PhaseKey: -3, int must be unique,
LastModifiedDate: "string, must match this format: 2017-12-06 14:46:06.873 GMT-08:00",
Description: "string",
Contacts: [],
BillingType: "string, ('Null', 'TimeAndExpense', 'FixedFee', 'PercentComplete', 'UnitPrice', 'PercentofConstructionCost', 'Nonbillable', 'Marketing', 'Overhead', 'Adjustment')"
}
]
}
]
}
],
UnchangedProjects: [],
UseSingleTransaction: false
}
}
Minimum required to create --^
{
Method: "UpdateProjects",
SessionToken: "",
MethodArguments: {
Content: {
UpdatedProjects: [
{
ProjectKey: 1,
Delete: false,
Description: "",
ID: "",
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
BudgetedOverheadRate: 175.0,
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
Notes: "project notes",
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ConstructionCost: 0.00,
PercentOfConstructionCost: 0.0000,
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
LaborEntry: false,
ExpenseConsultantEntry: false,
Contacts: [
{
ContactKey: -1,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
],
InvoiceGroups: [
{
InvoiceGroupKey: 1,
Description: "",
Client: {
ClientKey: 1,
Description: "",
},
InvoiceFormatKey: 1,
InvoiceFormatDescription: "",
EmailInvoiceTemplateKey: 1,
EmailInvoiceTemplateDescription: "Default Template",
BillingManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
BillingContact: {
ContactKey: -1,
Description: "",
FirstName: "",
MiddleName: "",
LastName: ""
},
InvoiceHeaderText: "",
InvoiceFooterText: "",
InvoiceScope: "",
Notes: "invoice group notes",
EmailClientStatementTemplateKey: 1,
EmailClientStatementTemplateDescription: "Default Template",
PrintBackup: false,
EmailIncludeBackup: false,
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
Notes: "phase notes",
IsBillingGroup: false,
SummarizeBillingGroup: false,
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: -1,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
]
}
]
}
]
}
],
UnchangedProjects: [
{
ProjectKey: 1,
Description: "",
ID: "",
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
BudgetedOverheadRate: 175.0,
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
Notes: "project notes",
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ConstructionCost: 0.00,
PercentOfConstructionCost: 0.0000,
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: -1,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
],
InvoiceGroups: [
{
InvoiceGroupKey: 1,
Description: "",
Client: {
ClientKey: 1,
Description: "",
},
InvoiceFormatKey: 1,
InvoiceFormatDescription: "",
EmailInvoiceTemplateKey: 1,
EmailInvoiceTemplateDescription: "Default Template",
BillingManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
BillingContact: {
ContactKey: -1,
Description: "",
FirstName: "",
MiddleName: "",
LastName: ""
},
InvoiceHeaderText: "",
InvoiceFooterText: "",
InvoiceScope: "",
Notes: "invoice group notes",
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
Notes: "phase notes",
IsBillingGroup: false,
SummarizeBillingGroup: false,
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: -1,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
]
}
]
}
]
}
],
UseSingleTransaction: false
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
UpdatedProjects: [
{
ProjectKey: "int, required (negative value indicates that this is a create request)",
LastModifiedDate: "string, required"
Description: "string, required only for create, max (80 characters)",
Delete: "bool, optional, flag as a delete request, in which case only ProjectKey, LastModifiedDate required",
ID: "string, optional, max (30 characters)",
Status: "string, optional, ('Null', 'Preliminary', 'Active', 'Hold', 'Workhold', 'BillingHold', 'Closed' or 'Marketing')",
CompanyKey: "int, required, see ListCompanies",
CompanyDescription: "string, optional, read only, (will be ignored for updates) (populated from CompanyKey if provided)",
ProjectTypeKey: "int, optional",
ProjectTypeDescription: "string, optional, max (80 characters), (populated from ProjectTypeKey if provided)",
DepartmentKey: "int, optional",
DepartmentDescription: "string, optional, max (80 characters), (populated from DepartmentKey if provided)",
BudgetedOverheadRate: "decimal, optional",
ProjectManager: { "null if empty"
EmployeeKey: "int, optional, employee must be a project manager and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
PrincipalInCharge: { "null if empty"
EmployeeKey: "int, optional, employee must be a principal in charge and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
MarketingContact: { "null if empty"
EmployeeKey: "int, optional, employee must be a marketing contact and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
Location: "string, optional, no max length",
WageTableKey: "int, optional",
WageTableDescription: "string, optional, max (80 characters), (populated from WageTableKey if provided)",
IsCertified: "bool, optional, defaults to false",
RestrictTimeEntryToResourcesOnly: "bool, optional, defaults to false",
TaxState: "string, OPTIONAL, state abbreviation",
TaxLocalKey: "int, optional",
TaxLocalDescription: "string, optional, max (80 characters), (populated from TaxLocalKey if provided)",
:All Dates must between 1900-01-01 and 2019-06-06
EstimatedStartDate: "string, date only format, optional, nullable, must be before completion date",
EstimatedCompletionDate: "string, date only format, optional, nullable, must be after start date",
ActualStartDate: "string, date only format, optional, nullable, must be before completion date",
ActualCompletionDate: "string, date only format, optional, nullable, must be after start date",
ApplySalesTax: "bool, optional, defaults to false",
SalesTaxCode: "string, optional, max (20 characters)","
SalesTaxRate: "decimal(19,4), optional)",
RequireTimesheetNotes: "bool, optional, defaults to false",
Notes: "string, optional, project notes",
HoursCostBudget: "decimal(19,2), optional)",
LaborCostBudget: "decimal(19,2), optional)",
ExpenseCostBudget: "decimal(19,2), optional)",
ConsultantCostBudget: "decimal(19,2), optional)",
PercentDistribution: "decimal(19,2), optional)",
IsFinalBudget: false, "bool, optional, defaults to false",
BillingType: "string, required, ('Null', 'TimeAndExpense', 'FixedFee', 'PercentComplete', 'UnitPrice', 'PercentofConstructionCost', 'Nonbillable', 'Marketing', 'Overhead', 'Adjustment')",
RateTableKey: "int, optional, nullable",
RateTableDescription: "string, optional, max (80 characters), (populated from RateTableKey if provided)",
TotalContractAmount: "decimal(19,2), optional)",
LaborContractAmount: "decimal(19,2), optional)",
ExpenseContractAmount: "decimal(19,2), optional)",
ConsultantContractAmount: "decimal(19,2), optional)",
LockFee: "bool, optional, defaults to false",
BillLaborAsTE: "bool, optional, defaults to false",
BillExpenseAsTE: "bool, optional, defaults to false",
BillConsultantAsTE: "bool, optional, defaults to false",
Units: "decimal(19,2), optional)",
UnitRate: "decimal(19,4), optional)",
UnitDescription: "string, optional, max (50 characters)",
ConstructionCost: "decimal(19,2), optional)",
PercentOfConstructionCost: "decimal(19,4), optional)",
ReportedPercentComplete: "decimal(19,4), optional)",
ReportedPercentCompleteDate: "date, optional",
BillingDescription: "string, optional, max (80 characters)",
PhaseInvoiceText: "string, no max, optional",
LaborInvoiceText: "string, no max, optional",
ExpenseInvoiceText: "string, no max, optional",
ConsultantInvoiceText: "string, no max, optional",
Contacts: [ //Array of Contacts (max 5), required can be an empty array
{
ContactKey: "int, required",
Order: "int, required, 0-based index of the contact (0-4)",
Text: "string, optional, max (80 characters)",
Description: "string, (will be ignored for updates)",
FirstName: "string, (will be ignored for updates)",
MiddleName: "string, (will be ignored for updates)",
LastName: "string, (will be ignored for updates)",
Title: "string, (will be ignored for updates)"
}
],
InvoiceGroups: [
{
InvoiceGroupKey: "int, required, negative to create must be unique",
Description: "string, max (80 characters), required",
Client: {
ClientKey: "int, required",
Description: "string, max (80 characters), optional"
},
InvoiceFormatKey: "int, required, see ListInvoiceFormats",
InvoiceFormatDescription: "string, max (80 characters), optional",
EmailInvoiceTemplateKey: "int, optional",
EmailInvoiceTemplateDescription: "string, max (80 characters), optional",
BillingManager: { // optional
EmployeeKey: "int, required",
FirstName: "string, (will be ignored for updates)",
MiddleName: "string, (will be ignored for updates)",
LastName: "string, (will be ignored for updates)"
},
BillingContact: { // optional
ContactKey: "int, required",
Description: "string, (will be ignored for updates)",
FirstName: "string, (will be ignored for updates)",
MiddleName: "string, (will be ignored for updates)",
LastName: "string, (will be ignored for updates)",
},
InvoiceHeaderText: "string, optional, no max length",
InvoiceFooterText: "string, optional, no max length",
InvoiceScope: "string, optional, no max length",
Notes: "string, optional, invoice group notes"
Phases: [ // required must have at minimum 1 phase
{
PhaseKey: "int, required",
LastModifiedDate: "string, required"
Description: "string, max (80 characters), required",
ID: "string, max (30 characters), optional",
Notes: "string, optional, phase notes",
IsBillingGroup: "bool, optional, phase table only",
SummarizeBillingGroup: "bool, optional, phase table only",
Status: "string, optional, ('Null', 'Preliminary', 'Active', 'Hold', 'Workhold', 'BillingHold', 'Closed', 'Marketing')",
CompanyKey: "int, optional",
CompanyDescription: "string, max (80 characters), (populated from CompanyKey if provided)",
ProjectTypeKey: "int, optional",
ProjectTypeDescription: "string, max (80 characters), (populated from ProjectTypeKey if provided)",
DepartmentKey: "int, optional",
DepartmentDescription: "string, max (80 characters), (populated from DepartmentKey if provided)",
ProjectManager: { "null if empty"
EmployeeKey: "int, optional, employee must be a project manager and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
PrincipalInCharge: { "null if empty"
EmployeeKey: "int, optional, employee must be a principal in charge and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
MarketingContact: { "null if empty"
EmployeeKey: "int, optional, employee must be a marketing contact and active",
Delete: "boolean, optional, if true it will delete from project or phase"
FirstName: "string, optional (will be ignored for updates)",
MiddleName: "string, optional (will be ignored for updates)",
LastName: "string, optional (will be ignored for updates)"
},
Location: "string, optional, no max length",
WageTableKey: "int, optional",
WageTableDescription: "string, optional, max (80 characters), (populated from WageTableKey if provided)",
IsCertified: "bool, optional, defaults to false",
RestrictTimeEntryToResourcesOnly: "bool, optional, defaults to false",
TaxState: "string, OPTIONAL, state abbreviation",
TaxLocalKey: "int, optional",
TaxLocalDescription: "string, optional, max (80 characters), (populated from TaxLocalKey if provided)",
:All Dates must between 1900-01-01 and 2019-06-06
EstimatedStartDate: "string, date time format, optional, nullable, must be before completion date",
EstimatedCompletionDate: "string, date time format, optional, nullable, must be after start date",
ActualStartDate: "string, date time format, optional, nullable, must be before completion date",
ActualCompletionDate: "string, date time format, optional, nullable, must be after start date",
ApplySalesTax: "bool, optional, defaults to false",
SalesTaxCode: "string, optional, max (20 characters)","
SalesTaxRate: "decimal(19,4), optional)",
RequireTimesheetNotes: "bool, optional, defaults to false",
HoursCostBudget: "decimal(19,2), optional)",
LaborCostBudget: "decimal(19,2), optional)",
ExpenseCostBudget: "decimal(19,2), optional)",
ConsultantCostBudget: "decimal(19,2), optional)",
PercentDistribution: "decimal(19,2), optional)",
IsFinalBudget: false, "bool, optional, defaults to false",
BillingType: "string, required, ('Null', 'TimeAndExpense', 'FixedFee', 'PercentComplete', 'UnitPrice', 'PercentofConstructionCost', 'Nonbillable', 'Marketing', 'Overhead', 'Adjustment')",
RateTableKey: "int, optional, nullable",
RateTableDescription: "string, optional, max (80 characters), (populated from RateTableKey if provided)",
TotalContractAmount: "decimal(19,2), optional)",
LaborContractAmount: "decimal(19,2), optional)",
ExpenseContractAmount: "decimal(19,2), optional)",
ConsultantContractAmount: "decimal(19,2), optional)",
LockFee: "bool, optional, defaults to false",
BillLaborAsTE: "bool, optional, defaults to false",
BillExpenseAsTE: "bool, optional, defaults to false",
BillConsultantAsTE: "bool, optional, defaults to false",
Units: "decimal(19,2), optional)",
UnitRate: "decimal(19,4), optional)",
UnitDescription: "string, optional, max (50 characters)",
ReportedPercentComplete: "decimal(19,4), optional)",
ReportedPercentCompleteDate: "date, optional",
BillingDescription: "string, optional, max (80 characters)",
PhaseInvoiceText: "string, no max, optional",
LaborInvoiceText: "string, no max, optional",
ExpenseInvoiceText: "string, no max, optional",
ConsultantInvoiceText: "string, no max, optional",
Contacts: [ //Array of Contacts (max 5), required can be an empty array
{
ContactKey: "int, required",
Order: "int, required, 0-based index of the contact (0-4)",
Text: "string, optional, max (80 characters)",
Description: "string, (will be ignored for updates)",
FirstName: "string, (will be ignored for updates)",
MiddleName: "string, (will be ignored for updates)",
LastName: "string, (will be ignored for updates)",
Title: "string, (will be ignored for updates)"
}
]
}
]
}
]
}
],
UnchangedProjects: [
{
// same schema as UpdatedProjects, without "Delete" field
}
],
UseSingleTransaction: "bool, defaults to false (If true will use single sql transaction for all updates. Any failure will reject all changes)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
NumberOfProjectsUpdated: 2,
Projects: [
{
ProjectKey: 2,
Deleted: true
},
{
ProjectKey: 12,
OriginalProjectKey: -1,
Description: "",
ID: "",
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
BudgetedOverheadRate: 175.0,
ProjectManager: {
EmployeeKey: 1,
FirstName: "PM",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 2,
FirstName: "PC",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 3,
FirstName: "MC",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
Notes: "project notes",
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ConstructionCost: 0.00,
PercentOfConstructionCost: 0.0000,
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: 1,
Order: 1,
Text: "",
Description: "",
FirstName: "C1",
MiddleName: "",
LastName: "",
Title: "",
}
],
Resources: [
{
ResourceKey: 1,
Status: "NotStarted",
Priority: "None",
Description: "",
IsTask: false,
ActivityType: "Labor",
EmployeeKey: 1,
EmployeeTypeKey: 1,
ActivityKey: 1,
VendorTypeKey: 1,
VendorKey: 1,
Reference: "",
PercentDistribution: 0.00,
Units: 0.00,
CostRate: 0.0000,
CostAmount: 0.00,
FeeRate: 0.0000,
FeeAmount: 0.00,
MarkupRate: 0.00,
BeginBalanceCostAmount: 0.00,
BeginBalanceFeeAmount: 0.00,
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
Notes: ""
}
],
InvoiceGroups: [
{
InvoiceGroupKey: 1,
Description: "",
Client: {
ClientKey: 1,
Description: "",
},
InvoiceFormatKey: 1,
InvoiceFormatDescription: "",
EmailInvoiceTemplateKey: 1,
EmailInvoiceTemplateDescription: "Default Template",
BillingManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
BillingContact: {
ContactKey: 2,
Description: "",
FirstName: "",
MiddleName: "",
LastName: ""
},
InvoiceHeaderText: "",
InvoiceFooterText: "",
InvoiceScope: "",
Notes: "invoice group notes",
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
Notes: "phase notes",
IsBillingGroup: false,
SummarizeBillingGroup: false,
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: 3,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
],
Resources: [
{
ResourceKey: 1,
Status: "NotStarted",
Priority: "None",
Description: "",
IsTask: false,
ActivityType: "Labor",
EmployeeKey: 1,
EmployeeTypeKey: 1,
ActivityKey: 1,
VendorTypeKey: 1,
VendorKey: 1,
Reference: "",
PercentDistribution: 0.00,
Units: 0.00,
CostRate: 0.0000,
CostAmount: 0.00,
FeeRate: 0.0000,
FeeAmount: 0.00,
MarkupRate: 0.00,
BeginBalanceCostAmount: 0.00,
BeginBalanceFeeAmount: 0.00,
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11"
}
]
}
]
}
]
}
]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object"
},
UsageKey: {
type: "guid"
}
}
List Project TypesPOST/AjeraAPI.ashx?{id}
ListProjectTypes returns an array of Project Types, limited by the optional filters detailed below.
Each returned Project Type includes only very basic information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListPays
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListProjectTypes",
SessionToken: "",
MethodArguments: {
FilterByStatus: ['active']
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
FilterByStatus: "string array, optional, (either 'Active' or 'Inactive', case-insensitive)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
ProjectTypes: [{
ProjectTypeKey: int, 1,
Description: string, "New Residence - Typical",
Status: string, "Active"
Notes: string, ""
}]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Errors: {
type: "array"
},
Message: {
type: "string"
},
Content: {
type: "object",
properties: {
ProjectTypes: {
type: "array",
properties: {
ProjectTypeKey: int,
Description: string,
Status: string,
Notes: string
}
}
},
UsageKey: {
type: "guid"
}
}
}
List Project TemplatesPOST/AjeraAPI.ashx?{id}
ListProjectTemplates returns an array of Project Templates, limited by the optional filters detailed below.
Each returned Project Template includes only very basic information. This method is intended to be used for querying Project Templates for particular key values, which can then be passed to GetProjectTemplates for more detailed information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListProjectTemplates
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListProjectTemplates",
SessionToken: "",
MethodArguments: {
FilterByStatus: ["Preliminary", "Hold"],
FilterByCompany: [1],
FilterByNameLike: "Description",
FilterByDescriptionLike: "Project Description",
FilterByDescriptionEquals: "Project Description",
FilterByIDLike: "03-M4",
FilterByProjectType: [1, null],
FilterBySyncToCRM: [true],
FilterByEarliestModifiedDate: "2015-03-11",
FilterByLatestModifiedDate: "2015-03-11"
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
FilterByStatus: "string array, optional, (valid values: "Preliminary", "Active", "Hold", "WorkHold", "BillingHold", "Closed", "Marketing")",
FilterByCompany: "int array, optional",
FilterByNameLike: "string, optional, (LIKE match on Description and ID)",
FilterByDescriptionLike: "string, optional, (LIKE match on Description)",
FilterByDescriptionEquals: "string, optional, (equality match on Description)",
FilterByIDLike: "string, optional, (LIKE match on ID)",
FilterByProjectType: "int array, can include null, optional",
FilterBySyncToCRM: "bool array, optional",
FilterByEarliestModifiedDate: "date string (specific format), optional",
FilterByLatestModifiedDate: "date string (specific format)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
ProjectTemplates: [
{
ProjectTemplateKey: 3,
ID: "some text",
Description: "the description"
}
]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
type: "object",
properties: {
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object",
properties: {
ProjectTemplates: {
type: "array",
properties: {
ProjectTemplateKey: {
type: int
},
ID: {
type: "string"
},
Description: {
type: "string"
}
}
}
}
},
UsageKey: {
type: "guid"
}
}
}
Get Project TemplatesPOST/AjeraAPI.ashx?{id}
GetProjectTemplates takes one or more key values, and returns an array of matching Project Templates.
This method returns detailed information.
CustomFields can be viewed, the field names are prepended with the string CF_
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
GetProjectTemplates
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "GetProjectTemplates",
SessionToken: "",
MethodArguments: {
RequestedProjects: [1, 2, 3]
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
RequestedProjects: "int array, required"
}
}
200
Headers
Content-Type: application/json
Body
{
Content: {
ProjectTemplates: [
{
ProjectTemplateKey: 1,
Description: "",
ID: "",
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
BudgetedOverheadRate: 175.0,
ProjectManager: {
EmployeeKey: 1,
FirstName: "PM",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 2,
FirstName: "PC",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 3,
FirstName: "MC",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
Notes: "project notes",
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ConstructionCost: 0.00,
PercentOfConstructionCost: 0.0000,
ReportedPercentComplete: 0.0000,
ReportedPercentDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: 1,
Order: 1,
Text: "",
Description: "",
FirstName: "C1",
MiddleName: "",
LastName: "",
Title: "",
}
],
InvoiceGroups: [
{
InvoiceGroupKey: 1,
Description: "",
Client: {
ClientKey: 1,
Description: "",
},
InvoiceFormatKey: 1,
InvoiceFormatDescription: "",
EmailInvoiceTemplateKey: 1,
EmailInvoiceTemplateDescription: "Default Template",
BillingManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
BillingContact: {
ContactKey: 2,
Description: "",
FirstName: "",
MiddleName: "",
LastName: ""
},
InvoiceHeaderText: "",
InvoiceFooterText: "",
InvoiceScope: "",
Notes: "invoice gropup notes",
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
Notes: "phase notes",
IsBillingGroup: false,
SummarizeBillingGroup: false,
Status: "Active",
CompanyKey: 1,
CompanyDescription: "",
ProjectTypeKey: 1,
ProjectTypeDescription: "",
DepartmentKey: 1,
DepartmentDescription: "",
ProjectManager: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
PrincipalInCharge: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
MarketingContact: {
EmployeeKey: 1,
FirstName: "",
MiddleName: "",
LastName: ""
},
Location: "",
WageTableKey: 1,
WageTableDescription: "",
IsCertified: false,
RestrictTimeEntryToResourcesOnly: false,
TaxState: "OR",
TaxLocalKey: 1,
TaxLocalDescription: "",
EstimatedStartDate: "2015-03-11",
EstimatedCompletionDate: "2015-03-11",
ActualStartDate: "2015-03-11",
ActualCompletionDate: "2015-03-11",
ApplySalesTax: false,
SalesTaxCode: "",
SalesTaxRate: 0.000,
RequireTimesheetNotes: false,
HoursCostBudget: 0.00,
LaborCostBudget: 0.00,
ExpenseCostBudget: 0.00,
ConsultantCostBudget: 0.00,
PercentDistribution: 0.00,
IsFinalBudget: false,
BillingType: "TimeAndExpense",
RateTableKey: 1,
RateTableDescription: "",
TotalContractAmount: 0.00,
LaborContractAmount: 0.00,
ExpenseContractAmount: 0.00,
ConsultantContractAmount: 0.00,
LockFee: false,
BillLaborAsTE: false,
BillExpenseAsTE: false,
BillConsultantAsTE: false,
Units: 0.00,
UnitRate: 0.0000,
UnitDescription: "",
ReportedPercentComplete: 0.0000,
ReportedPercentCompleteDate: "2015-03-11",
BillingDescription: "",
PhaseInvoiceText: "",
LaborInvoiceText: "",
ExpenseInvoiceText: "",
ConsultantInvoiceText: "",
Contacts: [
{
ContactKey: 3,
Order: 1,
Text: "",
Description: "",
FirstName: "",
MiddleName: "",
LastName: "",
Title: "",
}
]
}
]
}
]
}
]
},
Errors: [],
Message: "Success",
ResponseCode: 200,
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object"
},
UsageKey: {
type: "guid"
}
}
Get Projects With ResourcesPOST/AjeraAPI.ashx?{id}
GetProjectsWithResources takes one or more key values, and returns an array of matching Projects with resources.
This method returns detailed information similar to GetProjects API but also contains detail about Resources
CustomFields can be viewed, the field names are prepended with the string CF_
This method can not be used to update resources and should not be used in conjunction with UpdateProjects.
Since this methods contains the same info as GetProjects but also includes resource info, this documentation will
only include info about the Resources tag which can be located on the Project and Phase objects
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
GetProjectsWithResources
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "GetProjectsWithResources",
SessionToken: "See CreateAPISession to get this token",
MethodArguments: {
RequestedProjects: [1, 2, 3]
}
}
Schema
{
Method: "string, required",
SessionToken: "string, required",
MethodArguments: {
RequestedProjects: "int array, required"
}
}
200
Headers
Content-Type: application/json
Body
{
Content: {
Projects: [
{
ProjectKey: 1,
Description: "",
ID: "",
// Additional fields omitted for clarity, to see other fields see GetProjects
InvoiceGroups: [
{
Phases: [
{
PhaseKey: 1,
Description: "",
ID: "",
// Additional fields omitted for clarity, to see other fields see GetProjects
Resources: [
{
ResourceKey: 81,
Status: "NotStarted, InProgress, Complete, Waiting or Deferred",
Priority: "",
Description: "",
IsTask: false,
ActivityType: "None, Labor, Expense or Consultant",
//If employee is present on record
Employee: {
EmployeeKey: 26 (See ListEmployees and GetEmployees for detail),
FirstName: "First name of the employee",
MiddleName: "Middle name of the employee",
LastName: "Last name of the employee"
},
//Or if employee is not present on record
EmployeeKey: null,
EmployeeTypeKey: 2 (See ListEmployeeTypes for detail),
EmployeeTypeDescription: "Description if present",
ActivityKey: null,
ActivityDescription: "Description if present",
VendorKey: null (See ListVenders and GetVendors for detail),
VendorDescription: "Description if present",
VendorTypeKey: null (See ListVendorTypes for detail),
VendorTypeDescription: "Description if present",
Reference: "",
PercentDistribution: 0,
Units: 30,
CostRate: 28.845,
CostAmount: 865.35,
FeeRate: 112.4956,
FeeAmount: 3374.87,
MarkupRate: 0,
BeginBalanceCostAmount: 0,
BeginBalanceFeeAmount: 0,
EstimatedStartDate: null,
EstimatedCompletionDate: null,
ActualStartDate: null,
ActualCompletionDate: null
}
]
}
]
}
],
Resources: [
//See above for resource fields
]
}
]
},
Errors: [],
Message: "Success",
ResponseCode: 200,
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object"
},
UsageKey: {
type: "guid"
}
}
Get Project TotalsPOST/AjeraAPI.ashx?{id}
GetProjectTotals takes one key value, and returns an object of the matching Project with totals.
This method returns detailed information similar to GetProjects API but also contains detail about Project Totals
This method can not be used to update project totals and should not be used in conjunction with UpdateProjects.
Since this methods contains the same info as GetProjects but also includes project totals info, this documentation will
only include info about the project totals tag which can be located on the Project and Phase objects
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
GetProjectTotals
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "GetProjectTotals",
SessionToken: "See CreateAPISession to get this token",
MethodArguments: {
RequestedProjectTotals: 1
}
}
Schema
{
Method: "string, required",
SessionToken: "string, required",
MethodArguments: {
RequestedProjectTotals: "integer, required"
}
}
200
Headers
Content-Type: application/json
Body
{
Content: {
Projects: [
{
ProjectKey: 1,
Description: "",
ID: "",
// Additional fields omitted for clarity, to see other fields see GetProjects
// Project totals listed in phases (Phase Project Totals) will also occur on the main Project after invoices (Project - Totals)
InvoiceGroups: [
{
Phases: [
{
PhaseKey: 2,
Description: "",
ID: "",
// Additional fields omitted for clarity, to see other fields see GetProjects
Hours Worked: 303,
Premium 1 Hours Worked: 11,
Premium 2 Hours Worked: 0,
Premium 3 Hours Worked: 0,
Regular Hours Worked: 292,
Scheduled Hours: 0,
WIP Hours: 0,
Written off Hours: 0,
Billed Adjustments Consultant: 0,
Billed Adjustments Expense: 0,
Billed Adjustments Labor: 0,
Billed Adjustments: 0,
Billed Amount By Accounting Date: 39852.95,
Billed Consultant: 5800,
Billed Expense: 1052.95,
Billed Labor: 33000,
Billed Sales Tax: 0,
Billed: 39852.95,
Consultant Billed by Accounting Date: 5800,
Cost + Premium Burdened: 34663.35,
Cost + Premium: 21400.9,
Cost Burdened: 34245.72,
Cost Consultant: 7109.09,
Cost Expense: 952.58,
Cost Labor + Premium Burdened: 26601.68,
Cost Labor + Premium: 13339.23,
Cost Labor Burdened: 26184.05,
Cost Labor: 13215.48,
Cost: 21277.15,
Expense Billed by Accounting Date: 1052.95,
Labor Billed by Accounting Date: 33000,
Payable Balance: 0,
Payments Consultant: 5000,
Payments Expense: 418.26,
Payments: 5418.26,
Receipts Adjustments Consultant: 0,
Receipts Adjustments Labor: 0,
Receipts Adjustments: 0,
Receipts Consultant: 2320,
Receipts Credit Memo Consultant: 0,
Receipts Credit Memo Expense: 0,
Receipts Credit Memo Labor: 0,
Receipts Credit Memo: 0,
Receipts Expense: 464,
Receipts Labor: 14500,
Receipts Sales Tax: 0,
Receipts: 17284,
Receivable Balance: 22780.42,
Scheduled Dollars: 0,
Spent Consultant: 7820,
Spent Expense: 1052.95,
Spent Labor: 37681.1,
Spent: 46554.05,
Vendor Invoiced Consultant: 5000,
Vendor Invoiced Expense: 418.26,
Vendor Invoiced: 5418.26,
WIP Consultant: 0,
WIP Expense: 0,
WIP Labor: 0,
WIP: 0,
Written off Consultant: 0,
Written off Expense: 0,
Written off Labor: 0,
Written off: 0
}
]
}
]
}
]
},
Errors: [],
Message: "Success",
ResponseCode: 200,
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Message: {
type: "string"
},
Errors: {
type: "array"
},
Content: {
type: "object"
},
UsageKey: {
type: "guid"
}
}
List Marketing Final DispositionsPOST/AjeraAPI.ashx?{id}
ListMarketingFinalDispositions returns an array of Marketing Final Dispositions, limited by the optional filters detailed below.
Each returned Marketing Final Disposition includes only very basic information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListMarketingFinalDispositions
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListMarketingFinalDispositions",
SessionToken: "",
MethodArguments: {
FilterByStatus: ['active']
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
FilterByStatus: "string array, optional, (either 'Active' or 'Inactive', case-insensitive)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
MarketingFinalDispositions: [{
MarketingFinalDispositionKey: int, 1,
Description: string, "Marketing Final Disposition Description",
Status: string, "Active",
Notes: string, ""
}]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Errors: {
type: "array"
},
Message: {
type: "string"
},
Content: {
type: "object",
properties: {
MarketingFinalDispositions: {
type: "array",
properties: {
MarketingFinalDispositionKey: int,
Description: string,
Status: string,
Notes: string
}
}
},
UsageKey: {
type: "guid"
}
}
}
List Marketing StagesPOST/AjeraAPI.ashx?{id}
ListMarketingStages returns an array of Marketing Stages, limited by the optional filters detailed below.
Each returned Marketing Stage includes only very basic information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListMarketingStages
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListMarketingStages",
SessionToken: "",
MethodArguments: {
FilterByStatus: ['active']
}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {
FilterByStatus: "string array, optional, (either 'Active' or 'Inactive', case-insensitive)"
}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
MarketingStages: [{
MarketingStageKey: int, 1,
Description: string, "NBD",
LongDescription: string, "New Business Development",
Status: string, "Active"
}]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Errors: {
type: "array"
},
Message: {
type: "string"
},
Content: {
type: "object",
properties: {
MarketingStages: {
type: "array",
properties: {
MarketingStageKey: int,
Description: string,
LongDescription: string,
Status: string
}
}
},
UsageKey: {
type: "guid"
}
}
}
List Overhead GroupsPOST/AjeraAPI.ashx?{id}
ListOverheadGroups returns an array of Overhead Groups, limited by the optional filters detailed below.
Each returned Overhead Group includes only very basic information.
Example URI
- id
string
(required) Example: ew0KICAiRGF0YWJhc2VOYW1lIjogIkFqZXJhX01haW4iDQp9An unique identifier required for api access.
ListOverheadGroups
Headers
Content-Type: application/json
Accept: application/json
Body
{
Method: "ListOverheadGroups",
SessionToken: "",
MethodArguments: {}
}
Schema
{
Method: "string, required",
SessionToken: "string",
MethodArguments: {}
}
200
Headers
Content-Type: application/json
Body
{
ResponseCode: 200,
Message: "Success",
Errors: [],
Content: {
OverheadGroups: [{
OverheadGroupKey: int, 1,
Description: string, "MV Overhead",
Notes: string, ""
}]
},
UsageKey: "6e983af4-946f-4947-9fbd-a233f796f6b4"
}
Schema
{
ResponseCode: {
type: int
},
Errors: {
type: "array"
},
Message: {
type: "string"
},
Content: {
type: "object",
properties: {
OverheadGroups: {
type: "array",
properties: {
OverheadGroupKey: int,
Description: string,
Notes: string
}
}
},
UsageKey: {
type: "guid"
}
}
}