Update Portfolio Budget Curves
PUT /ws/rest/service/v2/cashflow/data
Available From: 26.10
Purpose
Use PUT to replace the time-phased distribution of an existing Portfolio Budget curve. The request body follows the Cash Flow payload structure.
Prerequisites
Ensure you have Update permissions for CashFlow Services.
Request Format
Request parameters are specified as a JSON map.
| Field | Required? | Use | Description |
|---|---|---|---|
project_number
|
Yes | NA | Project or shell number for the Cash Flow |
filter.name
|
Yes | NA | Cash Flow name. Supply it in the JSON filter parameter. |
Type
|
No | Identifies the curve type | Use Portfolio Budget. |
Name
|
No | Identifies the curve | Use the existing Portfolio Budget curve name. |
details.Number and details.Name |
No | Identifies the level record | Use the values returned by GET for the project, CBS, summary CBS, or commitment record. |
| From Date and To Date | No | Sets the curve period range | Use dates that are valid for the curve. The service validates the distribution against the period range. |
| M YYYY | No | Stores a period value | For example, "1 2026": "1000.00". Include the full set of period values that defines the replacement distribution. |
| Total, Unassigned, Profile | No | Informational/calculated fields | For Portfolio Budget curves, Profile and supplied Total do not affect the update. Total is recalculated from the distribution. Unassigned amount is not used. |
Sample Request
{
"options": {
"project_number":"P0001",
"setup": "yes",
"distribution": "yes" },
},
"data": [{
"Name": "<cash_flow_name>",
"curves": [{
"Type": "Portfolio Budget",
"Name": "<budget_curve_name>",
"details": [{
"Number": "{project_number}",
"Name": "<detail_name>",
"From Date": "01/01/2026",
"To Date": "12/01/2026",
"1 2026": "1000.00",
"2 2026": "1000.00"
}]
}]
}]
}
Processing Rules
- The service recalculates Total from the distribution values. Values supplied for Profile and Total do not affect Portfolio Budget curves.
- There is no unassigned amount for Portfolio Budget curves. The distribution must be valid.
- The service supports bulk updates: include multiple curve objects in the curves array when updating multiple existing curves in one request.
- Cash Flow shows Portfolio Budget curve data as read-only. Use the REST service to make programmatic changes.
Response Format
A successful response has status 200. On failure, inspect message and status. No changes are made for validation, authorization, or not-found failures.
Sample Success Response
{
"data": [],
"message": ["success"],
"status": 200,
"rest_audit_id": 123456
}
Common Outcomes
| Situation | Expected Result |
|---|---|
| Valid request from an authorized user | The API returns success, updates the curve distribution, and records an audit entry. |
| Curve does not exist or identifier is invalid | The API returns a not-found error. No changes occur. |
| Dates or distribution are invalid | The API returns a validation error. No changes occur. |
| Integration user lacks permission | The API returns an unauthorized or forbidden error. No changes occur. |
Use rest_audit_id to correlate the request with the REST audit log entry. The audit information records the integration user, curve name, hierarchy level, timestamp, and status.
Supported Validation Messages and Status Codes
The following validation messages and status codes display in the response when incorrect values are provided in the request.
| Use-case Scenario | Status Code | Message or Result |
|---|---|---|
| Invalid curve identifier | Invalid Budget Curve | |
| Curve not found | [Budget Curve] not found | |
| Invalid distribution | Invalid curve distribution data |