Lifecycle Manager API – Hardware Assets, Budget Forecasting, Contacts, PSA Linking, Roadmap Exports & Strategic Planning Expansion
Summary
This release substantially expands the Lifecycle Manager API, adding 52 new endpoints and 139 new schemas across several new areas: Hardware Assets (listing, dashboard, overview, replacement settings), Budget forecasting (summary, contracts, initiatives, IT debt, availabilities, and CSV/PDF exports), Contacts, Clients listing and lookups, PSA linking for initiatives (opportunities and tickets), Roadmap exports (CSV/PDF/spreadsheet), Insights, Warranty pricing, and user/session utilities. Many existing endpoints also gained richer filtering, cursor pagination, response examples, and documented 402 Payment Required (subscription-required) responses.
The API major version remains v1. Most changes are additive and backward compatible — but this release also includes a set of backward-incompatible changes you should review before upgrading. Twelve relationship attach/detach/unassign endpoints changed HTTP method or path, a few request/response contracts were tightened, and two areas were deprecated. See Changed and Deprecated below.
Changes
New endpoints
Clients
-
GET
/lifecycle-manager/v1/clients- N/A → Available
- Type: addition
- Notes: Returns a paginated, searchable list of client summaries.
-
GET
/lifecycle-manager/v1/clients/lookup- N/A → Available
- Type: addition
- Notes: Search clients by name for picker UIs, returning id/label pairs scoped to the caller's client-group access (or recently visited clients when no search term is provided).
-
GET
/lifecycle-manager/v1/clients/{client_id}/contacts/lookup- N/A → Available
- Type: addition
- Notes: Search a client's PSA contacts by name for opportunity picker fields (minimum two characters), returning id/name/email tuples.
-
GET
/lifecycle-manager/v1/clients/{client_id}/members/lookup- N/A → Available
- Type: addition
- Notes: Search a client's PSA members by name for opportunity picker fields (minimum two characters), returning id/name/email tuples.
Contacts
-
GET
/lifecycle-manager/v1/contacts- N/A → Available
- Type: addition
- Notes: List Lifecycle Manager contacts across accessible clients, with optional client and hidden-status filters, cursor pagination, Core record lineage, and license/MFA posture details.
-
GET
/lifecycle-manager/v1/contacts/{contact_id}- N/A → Available
- Type: addition
- Notes: Retrieve a single contact by Core API or temporary Lifecycle Manager contact ID, including hidden contacts.
-
PUT
/lifecycle-manager/v1/contacts/{contact_id}/hidden-status- N/A → Available
- Type: addition
- Notes: Update whether a contact is hidden from standard contact views.
Contracts
-
PUT
/lifecycle-manager/v1/contracts/{contract_id}/assets- N/A → Available
- Type: addition
- Notes: Attach one or more hardware assets to a contract by hardware identifier.
-
POST
/lifecycle-manager/v1/contracts/{contract_id}/assets/delete- N/A → Available
- Type: addition
- Notes: Detach one or more hardware assets from a contract without deleting either entity.
Hardware Assets
-
GET
/lifecycle-manager/v1/assets/hardware- N/A → Available
- Type: addition
- Notes: List hardware assets with client ownership and basic device fields, with query filters, free-text search, pagination, and sorting.
-
GET
/lifecycle-manager/v1/assets/hardware-replacement/settings- N/A → Available
- Type: addition
- Notes: Retrieve hardware-replacement budget defaults by report asset type for a client, or account-wide defaults.
-
POST
/lifecycle-manager/v1/assets/hardware/attached-agreements/lookup- N/A → Available
- Type: addition
- Notes: Look up the agreements attached to a hardware asset identified by its unique key.
-
GET
/lifecycle-manager/v1/assets/hardware/dashboard- N/A → Available
- Type: addition
- Notes: Retrieve account- or client-scoped hardware dashboard totals, including replacement-due/soon and warranty expired/soon counts.
-
POST
/lifecycle-manager/v1/assets/hardware/overview- N/A → Available
- Type: addition
- Notes: Fetch a hardware asset overview by unique identifier, including summary, warranty context, integrations, and navigation hints.
-
GET
/lifecycle-manager/v1/warranty/pricing- N/A → Available
- Type: addition
- Notes: List renewable warranty assets and their available monthly pricing options (Server device types return estimates).
Budget
-
GET
/lifecycle-manager/v1/budget/{client_id}/availabilities- N/A → Available
- Type: addition
- Notes: Retrieve the option lists used to construct Budget API queries for a single client.
-
GET
/lifecycle-manager/v1/budget/{client_id}/contracts- N/A → Available
- Type: addition
- Notes: List a client's contracts with per-period forecast amounts, sorted and paginated.
-
GET
/lifecycle-manager/v1/budget/{client_id}/initiatives- N/A → Available
- Type: addition
- Notes: List a client's initiatives with per-period forecast amounts, sorted and paginated.
-
GET
/lifecycle-manager/v1/budget/{client_id}/it-debt- N/A → Available
- Type: addition
- Notes: List a client's IT Debt assets with per-period forecast amounts, sorted and paginated.
-
GET
/lifecycle-manager/v1/budget/{client_id}/summary- N/A → Available
- Type: addition
- Notes: Retrieve aggregate per-type totals for a client's budget forecast across the requested period window.
-
GET
/lifecycle-manager/v1/budget/{client_id}/forecast/csv- N/A → Available
- Type: addition
- Notes: Generate a CSV export of a client's budget forecast.
-
GET
/lifecycle-manager/v1/budget/{client_id}/forecast/pdf- N/A → Available
- Type: addition
- Notes: Generate an overview PDF of a client's budget forecast.
-
GET
/lifecycle-manager/v1/budget/{client_id}/forecast/detail/pdf- N/A → Available
- Type: addition
- Notes: Generate a detailed PDF of a client's budget forecast.
Initiatives
-
GET
/lifecycle-manager/v2/initiatives- N/A → Available
- Type: addition
- Notes: List strategic initiatives with filtering and cursor-pagination options.
-
POST
/lifecycle-manager/v1/initiative-templates/{initiative_template_id}/duplicate- N/A → Available
- Type: addition
- Notes: Duplicate an initiative template into a new editable account-scoped copy.
-
PUT
/lifecycle-manager/v1/initiatives/{initiative_id}/assigned-user- N/A → Available
- Type: addition
- Notes: Update the user assigned to an initiative.
-
GET
/lifecycle-manager/v1/initiatives/{initiative_id}/pdf- N/A → Available
- Type: addition
- Notes: Download a formatted PDF of an initiative, including its executive summary, budget, recurring costs, and action items.
-
GET
/lifecycle-manager/v1/initiatives/{initiative_id}/quotes- N/A → Available
- Type: addition
- Notes: List all quotes linked to an initiative, with status display metadata and whether the account has Quoter enabled.
-
GET
/lifecycle-manager/v1/initiatives/{initiative_id}/opportunity- N/A → Available
- Type: addition
- Notes: Get the PSA opportunity linked to an initiative, including a Pending state while asynchronous creation is in progress.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/opportunity- N/A → Available
- Type: addition
- Notes: Create a PSA opportunity for an initiative and link it; returns
202 Acceptedwhile creation is queued in the external PSA.
-
DELETE
/lifecycle-manager/v1/initiatives/{initiative_id}/opportunity- N/A → Available
- Type: addition
- Notes: Detach the PSA opportunity linked to an initiative; the opportunity itself is not deleted.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/opportunities/{opportunity_id}- N/A → Available
- Type: addition
- Notes: Attach an existing PSA opportunity to an initiative so the roadmap item is connected to revenue work already tracked in the PSA.
-
GET
/lifecycle-manager/v1/initiatives/{initiative_id}/ticket- N/A → Available
- Type: addition
- Notes: Get the current state of the PSA ticket linked to an initiative (Pending, Created, or Error).
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/ticket- N/A → Available
- Type: addition
- Notes: Create a PSA ticket and link it to an initiative; returns
202 Acceptedwhile creation is queued in the external PSA.
-
DELETE
/lifecycle-manager/v1/initiatives/{initiative_id}/ticket- N/A → Available
- Type: addition
- Notes: Detach the PSA ticket linked to an initiative without deleting it from the external PSA.
Opportunities
-
GET
/lifecycle-manager/v1/opportunities- N/A → Available
- Type: addition
- Notes: List PSA opportunities for a client so an existing opportunity can be linked to an initiative.
-
GET
/lifecycle-manager/v1/opportunities/create-fields- N/A → Available
- Type: addition
- Notes: Retrieve PSA opportunity create-field metadata for a client, including integration availability and validation rules.
Goals & Action Items
-
PUT
/lifecycle-manager/v1/action-items/{id}/pin- N/A → Available
- Type: addition
- Notes: Pin or unpin an action item so it appears above other open action items in task lists.
-
POST
/lifecycle-manager/v1/action-items/{id}/reposition- N/A → Available
- Type: addition
- Notes: Reposition an action item within the account's manual sort order by placing it relative to neighboring items (
before_id/after_id).
-
GET
/lifecycle-manager/v1/goals/{goal_id}/action-items- N/A → Available
- Type: addition
- Notes: List all action items linked to a goal.
-
POST
/lifecycle-manager/v1/goals/{goal_id}/action-items/{action_item_id}- N/A → Available
- Type: addition
- Notes: Attach an existing action item to a goal to track tasks that contribute toward the goal's progress.
-
DELETE
/lifecycle-manager/v1/goals/{goal_id}/action-items/{action_item_id}- N/A → Available
- Type: addition
- Notes: Detach an action item from a goal without deleting either entity.
Deliverables
- GET
/lifecycle-manager/v1/deliverables- N/A → Available
- Type: addition
- Notes: List deliverables across your account with optional client-scoped filtering, sorting, and cursor pagination. (Replaces the now-deprecated client-scoped list — see Deprecated.)
Roadmaps & Exports
-
POST
/lifecycle-manager/v1/roadmap/csv- N/A → Available
- Type: addition
- Notes: Generate a CSV export of a client roadmap from the selected filters.
-
POST
/lifecycle-manager/v1/roadmap/pdf- N/A → Available
- Type: addition
- Notes: Generate a PDF export of a client roadmap from the selected sections.
-
POST
/lifecycle-manager/v1/roadmap/spreadsheet- N/A → Available
- Type: addition
- Notes: Generate a spreadsheet export of a client roadmap from the selected filters.
Insights, Tickets & Platform
-
GET
/lifecycle-manager/v1/insights- N/A → Available
- Type: addition
- Notes: Return all insights for the caller's account, including affected-asset counts, risk level, category metadata, asset scope, and 30-day trend where available.
-
GET
/lifecycle-manager/v1/tickets/create-fields- N/A → Available
- Type: addition
- Notes: Return PSA ticket-create field definitions, valid values, validation rules, and dependent fields to drive a create-ticket form.
-
GET
/lifecycle-manager/v1/active-users- N/A → Available
- Type: addition
- Notes: List the active users that belong to the authenticated account.
-
GET
/lifecycle-manager/v1/user/identity- N/A → Available
- Type: addition
- Notes: Return the authenticated user together with feature-access and permission flags.
-
GET
/lifecycle-manager/v1/user-ui-states/{state_key}- N/A → Available
- Type: addition
- Notes: Retrieve persisted UI preferences for the authenticated user in the current account.
-
PUT
/lifecycle-manager/v1/user-ui-states/{state_key}- N/A → Available
- Type: addition
- Notes: Save UI preferences for the authenticated user, replacing any prior payload for the same key.
Changed
Relationship endpoints moved to a new method or path (action required)
These attach / detach / unassign operations changed their HTTP method or path. The previous forms are no longer available — update integrations to call the new form.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/action-items/{action_item_id}PUT→POST- Type: breaking change
- Notes: Attaching an action item to an initiative moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/goals/{goal_id}PUT→POST- Type: breaking change
- Notes: Attaching a goal to an initiative moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/template/{initiative_template_id}/applyPUT→POST- Type: breaking change
- Notes: Applying an initiative template moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/initiatives/{initiative_id}/assets/detach- replaces
DELETE /lifecycle-manager/v1/initiatives/{initiative_id}/assets - Type: breaking change
- Notes: Detaching assets from an initiative moved from
DELETEon the collection toPOSTon…/assets/detachwith a request body.
- replaces
-
POST
/lifecycle-manager/v1/goals/{goal_id}/initiatives/{initiative_id}PUT→POST- Type: breaking change
- Notes: Attaching an initiative to a goal moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/goals/{goal_id}/meetings/{meeting_id}PUT→POST- Type: breaking change
- Notes: Attaching a meeting to a goal moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/meetings/{meeting_id}/action-items/{action_item_id}PUT→POST- Type: breaking change
- Notes: Attaching an action item to a meeting moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/meetings/{meeting_id}/goals/{goal_id}PUT→POST- Type: breaking change
- Notes: Attaching a goal to a meeting moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/meetings/{meeting_id}/initiatives/{initiative_id}PUT→POST- Type: breaking change
- Notes: Attaching an initiative to a meeting moved from
PUTtoPOST.
-
POST
/lifecycle-manager/v1/meetings/{id}/attendees/contacts/delete- replaces
DELETE /lifecycle-manager/v1/meetings/{id}/attendees/contacts - Type: breaking change
- Notes: Removing contact attendees moved from
DELETEtoPOSTon…/attendees/contacts/delete.
- replaces
-
POST
/lifecycle-manager/v1/meetings/{id}/attendees/users/delete- replaces
DELETE /lifecycle-manager/v1/meetings/{id}/attendees/users - Type: breaking change
- Notes: Removing user attendees moved from
DELETEtoPOSTon…/attendees/users/delete.
- replaces
-
POST
/lifecycle-manager/v1/client-groups/{client_group_id}/assignments/unassign- replaces
DELETE /lifecycle-manager/v1/client-groups/{client_group_id}/assignments - Type: breaking change
- Notes: Unassigning clients/users from a client group moved from
DELETEon the collection toPOSTon…/assignments/unassign.
- replaces
Other contract changes
-
GET
/lifecycle-manager/v1/initiative-templates- Type: breaking change
- Notes: The
200response shape changed. It previously returned a bespoke object with separatetemplates_accountandtemplates_applicationarrays; it now returns the standard cursor-paginated envelope (data,next_cursor,total_count). Update response parsing accordingly.
-
POST
/lifecycle-manager/v1/client-groups/{client_group_id}/assignments- Type: breaking change
- Notes: The documented success response is now
204 No Contentonly — the prior201 Createdresponse with a JSON body was removed — and the request body is now required.
-
Filter operator prefix required on
GET/lifecycle-manager/v1/meetings,GET/lifecycle-manager/v1/contracts, andGET/lifecycle-manager/v1/assets/hardware/lifecycles- Type: change
- Notes: Filter query values are now documented to require an explicit operator prefix (for example
filter[client.id]=eq:<id>andfilter[expiry_status]=eq:<status>). Update any callers passing bare filter values.
-
Request body now required on several write endpoints
- Type: change
- Notes:
POST/PUT/lifecycle-manager/v1/meetings,PUT/lifecycle-manager/v1/meetings/{id}, the meeting attendee-add and completion-status endpoints,POST/PUT/lifecycle-manager/v1/meeting-types,POST/PUT/lifecycle-manager/v2/meetings, andPOST/lifecycle-manager/v1/assets/hardware/attached-initiatives/lookupnow declare their request body as required where it was previously documented as optional.
-
next_cursoralways present in list responses onGET/lifecycle-manager/v1/initiativesandGET/lifecycle-manager/v1/assets/hardware/lifecycles- Type: improvement
- Notes:
next_cursoris now a required response field (nullable on the final page). Strict response validators should expect it on every page.
Deprecated
-
GET
/lifecycle-manager/v1/clients/{client-id}/deliverables- Available → Deprecated
- Type: deprecation
- Notes: Use
GET/lifecycle-manager/v1/deliverableswithfilter[client.id]instead.
-
Plain-text
descriptiononPUT/lifecycle-manager/v1/goals/{id}andPUT/lifecycle-manager/v1/action-items/{id}- Available → Deprecated
- Type: deprecation
- Notes: The plain-text
descriptionfield is deprecated in favor of rich-textdescription_json. Sending plain-textdescriptionon update overwrites any stored rich-text document with a plain-text projection and drops formatting — usedescription_jsonto preserve formatting.
Dates
- Effective: [2026-06-15]
