Skip to main content

Actions

The ballerinax/microsoft.dynamics365.finance.project package exposes the following clients:

ClientPurpose
ClientProvides CRUD access to Microsoft Dynamics 365 Finance and Operations project entities via the OData REST API.

Client​

Provides CRUD access to Microsoft Dynamics 365 Finance and Operations project entities via the OData REST API.

Configuration​

FieldTypeDefaultDescription
authOAuth2ClientCredentialsGrantConfigRequiredOAuth 2.0 client credentials grant configuration (tokenUrl, clientId, clientSecret, scopes) used to authenticate with Microsoft Entra ID.
httpVersionhttp:HttpVersion"2.0"HTTP protocol version to use for outbound requests.
http1Settingshttp:ClientHttp1Settings{}HTTP/1.x client settings including keep-alive, chunking, and proxy configuration.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration for secure connections.
proxyhttp:ProxyConfig()Proxy server configuration.

Initializing the client​

import ballerinax/microsoft.dynamics365.finance.project;

configurable string tokenUrl = ?;
configurable string clientId = ?;
configurable string clientSecret = ?;
configurable string serviceUrl = ?;

project:Client fo = check new (
{
auth: {
tokenUrl,
clientId,
clientSecret
}
},
serviceUrl
);

Operations​

CDS Projects​

listCDSProjects

Lists CDS project records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListCDSProjectsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: CDSProjectsCollection|error

Sample code:

project:CDSProjectsCollection result = check fo->listCDSProjects(
queries = {
filter: "ProjectType eq 'TimeMaterial'",
top: 20,
'select: "ProjectID,ProjectName,CustomerAccount"
}
);
createCDSProjects

Creates a CDS project record.

Parameters:

NameTypeRequiredDescription
payloadCDSProjectYesCDS project fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: CDSProject|error

Sample code:

project:CDSProject created = check fo->createCDSProjects({
dataAreaId: "usmf",
projectID: "CDS-1001",
projectName: "Warehouse Expansion",
customerAccount: "CUST-4021",
projectType: "TimeMaterial",
startDate: "2026-09-01"
});
getCDSProjects

Gets a CDS project record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetCDSProjectsQueriesNoQuery parameters: expand, 'select.

Returns: CDSProject|error

Sample code:

project:CDSProject cdsProject = check fo->getCDSProjects("usmf", "CDS-1001");
deleteCDSProjects

Deletes a CDS project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersDeleteCDSProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteCDSProjects("usmf", "CDS-1001");
updateCDSProjects

Updates a CDS project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
payloadCDSProjectYesFields to update.
headersUpdateCDSProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: CDSProject|error

Sample code:

project:CDSProject updated = check fo->updateCDSProjects(
"usmf",
"CDS-1001",
{description: "Warehouse Expansion - Phase 2"}
);

PSA Actuals​

listPSAActuals

Lists posted project actual transactions.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListPSAActualsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: PSAActualsCollection|error

Sample code:

project:PSAActualsCollection result = check fo->listPSAActuals(
queries = {
filter: "ProjId eq 'PROJ-100'",
top: 50
}
);
createPSAActuals

Creates a project actual transaction record.

Parameters:

NameTypeRequiredDescription
payloadPSAActualYesProject actual transaction fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: PSAActual|error

Sample code:

project:PSAActual created = check fo->createPSAActuals({
dataAreaId: "usmf",
projId: "PROJ-100",
transId: "TRX-9001",
categoryId: "CONSULT",
projTransType: "Hour",
qty: 8,
amountMst: 640.00d
});
getPSAActuals

Gets a project actual transaction record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetPSAActualsQueriesNoQuery parameters: expand, 'select.

Returns: PSAActual|error

Sample code:

project:PSAActual actual = check fo->getPSAActuals("usmf", "TRX-9001");
deletePSAActuals

Deletes a project actual transaction record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersDeletePSAActualsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deletePSAActuals("usmf", "TRX-9001");
updatePSAActuals

Updates a project actual transaction record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
payloadPSAActualYesFields to update.
headersUpdatePSAActualsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: PSAActual|error

Sample code:

project:PSAActual updated = check fo->updatePSAActuals(
"usmf",
"TRX-9001",
{qty: 7.5d}
);

PSA Forecasts​

listPSAForecasts

Lists forecasted project amounts.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListPSAForecastsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: PSAForecastsCollection|error

Sample code:

project:PSAForecastsCollection result = check fo->listPSAForecasts(
queries = {
filter: "ProjId eq 'PROJ-100'"
}
);
createPSAForecasts

Creates a project forecast record.

Parameters:

NameTypeRequiredDescription
payloadPSAForecastYesProject forecast fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: PSAForecast|error

Sample code:

project:PSAForecast created = check fo->createPSAForecasts({
dataAreaId: "usmf",
projId: "PROJ-100",
transId: "FCST-2001",
categoryId: "CONSULT",
projType: "TimeMaterial",
qty: 40,
amountMst: 3200.00d
});
getPSAForecasts

Gets a project forecast record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetPSAForecastsQueriesNoQuery parameters: expand, 'select.

Returns: PSAForecast|error

Sample code:

project:PSAForecast forecast = check fo->getPSAForecasts("usmf", "FCST-2001");
deletePSAForecasts

Deletes a project forecast record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersDeletePSAForecastsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deletePSAForecasts("usmf", "FCST-2001");
updatePSAForecasts

Updates a project forecast record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
payloadPSAForecastYesFields to update.
headersUpdatePSAForecastsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: PSAForecast|error

Sample code:

project:PSAForecast updated = check fo->updatePSAForecasts(
"usmf",
"FCST-2001",
{qty: 45}
);

Proj Grants​

listProjGrants

Lists project grant records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjGrantsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjGrantsCollection|error

Sample code:

project:ProjGrantsCollection result = check fo->listProjGrants(
queries = {
filter: "GrantStatus eq 'Active'"
}
);
createProjGrants

Creates a project grant record.

Parameters:

NameTypeRequiredDescription
payloadProjGrantYesProject grant fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjGrant|error

Sample code:

project:ProjGrant created = check fo->createProjGrants({
dataAreaId: "usmf",
grantId: "GRANT-500",
grantName: "Community Infrastructure Grant",
custAccount: "CUST-4021",
grantStatus: "Submitted",
matchingPercentage: 20.0d
});
getProjGrants

Gets a project grant record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjGrantsQueriesNoQuery parameters: expand, 'select.

Returns: ProjGrant|error

Sample code:

project:ProjGrant grant = check fo->getProjGrants("usmf", "GRANT-500");
deleteProjGrants

Deletes a project grant record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersDeleteProjGrantsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjGrants("usmf", "GRANT-500");
updateProjGrants

Updates a project grant record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
payloadProjGrantYesFields to update.
headersUpdateProjGrantsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjGrant|error

Sample code:

project:ProjGrant updated = check fo->updateProjGrants(
"usmf",
"GRANT-500",
{grantStatus: "Approved"}
);

Proj Grants V2​

listProjGrantsV2

Lists project grant records (V2).

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjGrantsV2QueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjGrantsV2Collection|error

Sample code:

project:ProjGrantsV2Collection result = check fo->listProjGrantsV2(
queries = {
filter: "GrantStatus eq 'Awarded'",
top: 10
}
);
createProjGrantsV2

Creates a project grant record (V2).

Parameters:

NameTypeRequiredDescription
payloadProjGrantV2YesProject grant fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 created = check fo->createProjGrantsV2({
dataAreaId: "usmf",
grantId: "GRANT-V2-500",
grantName: "Rural Broadband Grant",
custAccount: "CUST-4021",
grantorAgency: "State Development Fund",
requestedAmount: 150000.00d,
matchingAmount: 30000.00d
});
getProjGrantsV2

Gets a project grant record (V2) by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjGrantsV2QueriesNoQuery parameters: expand, 'select.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 grant = check fo->getProjGrantsV2("usmf", "GRANT-V2-500");
deleteProjGrantsV2

Deletes a project grant record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersDeleteProjGrantsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjGrantsV2("usmf", "GRANT-V2-500");
updateProjGrantsV2

Updates a project grant record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
payloadProjGrantV2YesFields to update.
headersUpdateProjGrantsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 updated = check fo->updateProjGrantsV2(
"usmf",
"GRANT-V2-500",
{grantStatus: "Awarded"}
);

Project Groups​

listProjectGroups

Lists project group records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectGroupsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectGroupsCollection|error

Sample code:

project:ProjectGroupsCollection result = check fo->listProjectGroups(
queries = {
filter: "ProjectType eq 'TimeMaterial'"
}
);
createProjectGroups

Creates a project group record.

Parameters:

NameTypeRequiredDescription
payloadProjectGroupYesProject group fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup created = check fo->createProjectGroups({
dataAreaId: "usmf",
projectGroup: "TM-CONSULT",
name: "Time and Material Consulting",
projectType: "TimeMaterial",
postCostsHour: "Operations"
});
getProjectGroups

Gets a project group record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectGroupsQueriesNoQuery parameters: expand, 'select.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup group = check fo->getProjectGroups("usmf", "TM-CONSULT");
deleteProjectGroups

Deletes a project group record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
headersDeleteProjectGroupsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectGroups("usmf", "TM-CONSULT");
updateProjectGroups

Updates a project group record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
payloadProjectGroupYesFields to update.
headersUpdateProjectGroupsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup updated = check fo->updateProjectGroups(
"usmf",
"TM-CONSULT",
{name: "Time and Material Consulting - Revised"}
);

Project Stages​

listProjectStages

Lists project stage records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectStagesQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectStagesCollection|error

Sample code:

project:ProjectStagesCollection result = check fo->listProjectStages(
queries = {
filter: "Status eq 'InProcess'"
}
);
createProjectStages

Creates a project stage record.

Parameters:

NameTypeRequiredDescription
payloadProjectStageYesProject stage fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectStage|error

Sample code:

project:ProjectStage created = check fo->createProjectStages({
dataAreaId: "usmf",
language: "en-us",
status: "InProcess",
stage: "Execution"
});
getProjectStages

Gets a project stage record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectStagesQueriesNoQuery parameters: expand, 'select.

Returns: ProjectStage|error

Sample code:

project:ProjectStage stage = check fo->getProjectStages("usmf", "en-us", "InProcess");
deleteProjectStages

Deletes a project stage record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
headersDeleteProjectStagesHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectStages("usmf", "en-us", "InProcess");
updateProjectStages

Updates a project stage record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
payloadProjectStageYesFields to update.
headersUpdateProjectStagesHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectStage|error

Sample code:

project:ProjectStage updated = check fo->updateProjectStages(
"usmf",
"en-us",
"InProcess",
{stage: "Execution - Milestone 2"}
);

Project Tasks​

listProjectTasks

Lists project task records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectTasksQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectTasksCollection|error

Sample code:

project:ProjectTasksCollection result = check fo->listProjectTasks(
queries = {
filter: "ProjectId eq 'PROJ-100'",
orderby: "TaskDisplaySequence"
}
);
createProjectTasks

Creates a project task record.

Parameters:

NameTypeRequiredDescription
payloadProjectTaskYesProject task fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectTask|error

Sample code:

project:ProjectTask created = check fo->createProjectTasks({
dataAreaId: "usmf",
projectId: "PROJ-100",
taskId: "TASK-010",
taskName: "Site survey",
taskOutlineLevel: 1,
taskDisplaySequence: 10
});
getProjectTasks

Gets a project task record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectTasksQueriesNoQuery parameters: expand, 'select.

Returns: ProjectTask|error

Sample code:

project:ProjectTask task = check fo->getProjectTasks("usmf", "PROJ-100", "TASK-010");
deleteProjectTasks

Deletes a project task record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
headersDeleteProjectTasksHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectTasks("usmf", "PROJ-100", "TASK-010");
updateProjectTasks

Updates a project task record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
payloadProjectTaskYesFields to update.
headersUpdateProjectTasksHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectTask|error

Sample code:

project:ProjectTask updated = check fo->updateProjectTasks(
"usmf",
"PROJ-100",
"TASK-010",
{taskName: "Site survey and inspection"}
);

Projects​

listProjects

Lists project records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectsCollection|error

Sample code:

project:ProjectsCollection result = check fo->listProjects(
queries = {
filter: "ProjectGroup eq 'TM-CONSULT'",
top: 25,
'select: "ProjectID,ProjectName,Status,CustomerAccount"
}
);
createProjects

Creates a project record.

Parameters:

NameTypeRequiredDescription
payloadProjectYesProject fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: Project|error

Sample code:

project:Project created = check fo->createProjects({
dataAreaId: "usmf",
projectID: "PROJ-100",
projectName: "Client Portal Upgrade",
projectGroup: "TM-CONSULT",
projectType: "TimeMaterial",
customerAccount: "CUST-4021",
startDate1: "2026-09-01"
});
getProjects

Gets a project record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectsQueriesNoQuery parameters: expand, 'select.

Returns: Project|error

Sample code:

project:Project proj = check fo->getProjects("usmf", "PROJ-100");
deleteProjects

Deletes a project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersDeleteProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjects("usmf", "PROJ-100");
updateProjects

Updates a project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
payloadProjectYesFields to update.
headersUpdateProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: Project|error

Sample code:

project:Project updated = check fo->updateProjects(
"usmf",
"PROJ-100",
{status: "InProcess"}
);

Projects V2​

listProjectsV2

Lists project records (V2).

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectsV2QueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectsV2Collection|error

Sample code:

project:ProjectsV2Collection result = check fo->listProjectsV2(
queries = {
filter: "ProjectGroupId eq 'TM-CONSULT'",
top: 25
}
);
createProjectsV2

Creates a project record (V2).

Parameters:

NameTypeRequiredDescription
payloadProjectV2YesProject fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 created = check fo->createProjectsV2({
dataAreaId: "usmf",
projectId: "PROJ-200",
projectName: "Data Center Migration",
projectGroupId: "TM-CONSULT",
customerAccountNumber: "CUST-4021",
scheduleStartDate: "2026-10-01"
});
getProjectsV2

Gets a project record (V2) by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectsV2QueriesNoQuery parameters: expand, 'select.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 proj = check fo->getProjectsV2("usmf", "PROJ-200");
deleteProjectsV2

Deletes a project record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
headersDeleteProjectsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectsV2("usmf", "PROJ-200");
updateProjectsV2

Updates a project record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
payloadProjectV2YesFields to update.
headersUpdateProjectsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 updated = check fo->updateProjectsV2(
"usmf",
"PROJ-200",
{scheduleEndDate: "2027-03-31"}
);