Portfolios
25 Endpunkte. Basis-URL: https://xapi.ambertech.cloud/api/v1
List portfolios#
GET
/portfoliosTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
status | Query | string | Werte: |
search | Query | string | – |
include_archived | Query | boolean | – |
page | Query | number | – |
pageSize | Query | number | – |
Antworten
- 200Portfolio list with pagination metadata.
- 403Portfolio module disabled or insufficient permissions.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios" \
-H "Authorization: Bearer $XISUITE_TOKEN"Create a portfolio#
POST
/portfoliosTokenRequest-Body
| Name | Typ | Beschreibung |
|---|---|---|
namePflicht | string | – |
description | object | – |
status | string | Werte: |
color | object | – |
owner_id | object | – |
Antworten
- 201Portfolio created.
- 400Invalid portfolio payload.
- 403Portfolio module disabled or insufficient permissions.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"…"}'Get a portfolio by ID#
GET
/portfolios/{portfolioId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Antworten
- 200Portfolio row.
- 404Portfolio not found.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}" \
-H "Authorization: Bearer $XISUITE_TOKEN"Update a portfolio#
PATCH
/portfolios/{portfolioId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
name | string | – |
description | object | – |
status | string | Werte: |
color | object | – |
owner_id | object | – |
is_archived | boolean | – |
sort_order | number | – |
Antworten
- 200Portfolio updated.
- 400Invalid update payload.
- 404Portfolio not found.
Beispiel (cURL)
curl -X PATCH "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"…","description":{},"status":"draft"}'Archive or hard-delete a portfolio#
DELETE
/portfolios/{portfolioId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
hard | Query | boolean | – |
Antworten
- 200Portfolio archived or hard deleted.
Beispiel (cURL)
curl -X DELETE "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}" \
-H "Authorization: Bearer $XISUITE_TOKEN"Get portfolio KPI dashboard data#
GET
/portfolios/{portfolioId}/dashboardTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Antworten
- 200Portfolio KPI summary.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/dashboard" \
-H "Authorization: Bearer $XISUITE_TOKEN"Get portfolio Gantt tree#
GET
/portfolios/{portfolioId}/ganttTokenReturns a hierarchical { portfolio, spaces: [{ space, plans: [...] }] } tree. Each plan row includes owner, budget, CPI/SPI, last-letter status, custom field values, and archive flag.
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Antworten
- 200Portfolio Gantt tree grouped by space, with archived plans included (flagged via is_archived).
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/gantt" \
-H "Authorization: Bearer $XISUITE_TOKEN"List management letters for a portfolio#
GET
/portfolios/{portfolioId}/lettersTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
status | Query | string | Werte: |
Antworten
- 200Management letters visible to the current user.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters" \
-H "Authorization: Bearer $XISUITE_TOKEN"Create a portfolio management letter#
POST
/portfolios/{portfolioId}/lettersTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
plan_idPflicht | string | – |
reporting_period_startPflicht | string | |
reporting_period_endPflicht | string | |
due_date | object | |
rag_schedule | string | Werte: |
rag_budget | string | Werte: |
rag_quality | string | Werte: |
key_message | object | – |
assigned_to_user_id | object | Explicit assignee for this letter. Falls back to plan owner when omitted. |
Antworten
- 201Management letter created and linked task created.
- 400Invalid period, duplicate period, or plan is not in portfolio.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"plan_id":"…","reporting_period_start":"2026-05-01","reporting_period_end":"2026-05-31"}'Get a portfolio management letter#
GET
/portfolios/{portfolioId}/letters/{letterId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 200OK
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}" \
-H "Authorization: Bearer $XISUITE_TOKEN"Update a portfolio management letter#
PATCH
/portfolios/{portfolioId}/letters/{letterId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
rag_schedule | string | Werte: |
rag_budget | string | Werte: |
rag_quality | string | Werte: |
key_message | object | – |
milestones_achieved | string[] | – |
success_factors | object | – |
planned_vs_actual | object | – |
next_steps | string[] | – |
budget_consumption_percent | object | – |
resource_availability | object | – |
identified_risks | string[] | – |
blockers | string[] | – |
due_date | object | – |
assigned_to_user_id | object | Reassign this letter to another user. Managers only; must always resolve to a non-null user. |
Antworten
- 200Management letter updated.
Beispiel (cURL)
curl -X PATCH "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"rag_schedule":"green","rag_budget":"green","rag_quality":"green"}'Delete a portfolio management letter#
DELETE
/portfolios/{portfolioId}/letters/{letterId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 200OK
Beispiel (cURL)
curl -X DELETE "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}" \
-H "Authorization: Bearer $XISUITE_TOKEN"Approve a portfolio management letter#
POST
/portfolios/{portfolioId}/letters/{letterId}/approveTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter approved.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/approve" \
-H "Authorization: Bearer $XISUITE_TOKEN"Recompute a letter's budget_consumption_percent from tasks active during the reporting period#
POST
/portfolios/{portfolioId}/letters/{letterId}/recompute-budget-consumptionTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter budget consumption percent refreshed from the linked plan tasks.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/recompute-budget-consumption" \
-H "Authorization: Bearer $XISUITE_TOKEN"Recompute a letter's achieved milestones from plan milestones completed in the reporting period#
POST
/portfolios/{portfolioId}/letters/{letterId}/recompute-milestonesTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter milestones recomputed from the plan.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/recompute-milestones" \
-H "Authorization: Bearer $XISUITE_TOKEN"Recompute a letter's RAG fields from the plan baseline EVM#
POST
/portfolios/{portfolioId}/letters/{letterId}/recompute-ragTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter RAG recomputed from baseline EVM.
- 400No active baseline for this plan.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/recompute-rag" \
-H "Authorization: Bearer $XISUITE_TOKEN"Recompute a letter's risks_snapshot from the linked plan's plan_risks (draft letters only)#
POST
/portfolios/{portfolioId}/letters/{letterId}/recompute-risksTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter risks snapshot refreshed from the plan.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/recompute-risks" \
-H "Authorization: Bearer $XISUITE_TOKEN"Reject a portfolio management letter#
POST
/portfolios/{portfolioId}/letters/{letterId}/rejectTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
reasonPflicht | string | – |
Antworten
- 201Letter rejected back to draft.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/reject" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason":"…"}'Submit a portfolio management letter#
POST
/portfolios/{portfolioId}/letters/{letterId}/submitTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
letterIdPflicht | Pfad | string | – |
Antworten
- 201Letter submitted for review.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/letters/{letterId}/submit" \
-H "Authorization: Bearer $XISUITE_TOKEN"List plans included in a portfolio#
GET
/portfolios/{portfolioId}/plansTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Antworten
- 200Plans visible to the current user.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/plans" \
-H "Authorization: Bearer $XISUITE_TOKEN"Add a plan to a portfolio#
POST
/portfolios/{portfolioId}/plansTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
plan_idPflicht | string | – |
Antworten
- 201Plan added to portfolio.
- 409Plan already exists in portfolio.
Beispiel (cURL)
curl -X POST "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/plans" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"plan_id":"…"}'Remove a plan from a portfolio#
DELETE
/portfolios/{portfolioId}/plans/{planId}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
planIdPflicht | Pfad | string | – |
Antworten
- 200Plan removed from portfolio.
Beispiel (cURL)
curl -X DELETE "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/plans/{planId}" \
-H "Authorization: Bearer $XISUITE_TOKEN"Get portfolio management-letter schedule config#
GET
/portfolios/{portfolioId}/scheduleTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Antworten
- 200Portfolio letter schedule.
- 404Schedule feature flag is disabled.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/schedule" \
-H "Authorization: Bearer $XISUITE_TOKEN"Set portfolio management-letter schedule config#
PATCH
/portfolios/{portfolioId}/scheduleTokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
portfolioIdPflicht | Pfad | string | – |
Request-Body
| Name | Typ | Beschreibung |
|---|---|---|
enabledPflicht | boolean | – |
cadencePflicht | string | Werte: |
day_of_periodPflicht | number | – |
reporting_period_anchorPflicht | string | Werte: |
Antworten
- 200Schedule updated.
Beispiel (cURL)
curl -X PATCH "https://xapi.ambertech.cloud/api/v1/portfolios/{portfolioId}/schedule" \
-H "Authorization: Bearer $XISUITE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"cadence":"weekly","day_of_period":0,"reporting_period_anchor":"period_start"}'Get a portfolio by friendly key#
GET
/portfolios/by-key/{key}TokenParameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
keyPflicht | Pfad | string | – |
Antworten
- 200Portfolio row.
- 404Portfolio not found.
Beispiel (cURL)
curl -X GET "https://xapi.ambertech.cloud/api/v1/portfolios/by-key/{key}" \
-H "Authorization: Bearer $XISUITE_TOKEN"