skills/c8y-client-breaking-changelog/SKILL.md
# Skill: REST API Breaking Changes (API CHANGE log) ## Overview Source: https://cumulocity.com/docs/change-logs/?component=.component-rest-api Only entries tagged **API CHANGE** are listed — these are breaking or behaviour-altering changes. Entries are newest-first. --- ### `history` field removed from the Alarm API **Date:** December 4, 2025 The deprecated `history` field has been permanently removed from the Alarm API. It previously always returned an empty list and is no longer inclu
npx skillsauth add cumulocity-iot/cumulocity-skills skills/c8y-client-breaking-changelogInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Source: https://cumulocity.com/docs/change-logs/?component=.component-rest-api
Only entries tagged API CHANGE are listed — these are breaking or behaviour-altering changes. Entries are newest-first.
history field removed from the Alarm APIDate: December 4, 2025
The deprecated history field has been permanently removed from the Alarm API.
It previously always returned an empty list and is no longer included in any response.
Affected client methods:
AlarmService.detail(id) → IAlarm.history property no longer present in responseAlarmService.list(filter?) → sameAction required: Remove any code that reads alarm.history. The field is now available as a custom fragment if needed.
Date: October 30, 2025 (enabled by default; first announced April 3, 2025)
The secure-tenant-options feature is now enabled by default for all tenants. Encrypted tenant options with the credentials. prefix can only be decrypted by system/microservice users that own the option category (determined by settingsCategory in the manifest, then context path, then microservice name). Non-owning callers receive <<Encrypted>> as the value.
Affected client methods:
TenantOptionsService.detail({ category, key }) → may return <<Encrypted>> if the caller does not own the categoryTenantOptionsService.list(filter?) → sameAction required: Ensure microservices only read credentials.* options in categories they own (matching their settingsCategory or context path).
withChildren default changed from true to falseDate: September 18, 2025
GET /inventory/managedObjects and GET /inventory/managedObjects/{id} no longer include child references (childAssets, childDevices, childAdditions) in the response by default. Controlled by feature toggle core.inventory.without.children (enabled for all tenants).
Affected client methods:
InventoryService.list(filter?) → pass { withChildren: true } to restore previous behaviourInventoryService.detail(id, filter?) → pass { withChildren: true } to restore previous behaviourInventoryService.listQuery(query, filter?) → same second argumentInventoryService.listQueryDevices(query, filter?) → sameAction required: Audit all inventoryService.list() and inventoryService.detail() call sites. Add withChildren: true explicitly where child references are needed.
withParents=true now returns all ancestors (not just 3 levels)Date: September 11, 2025
Using withParents=true now returns basic information (ID, type, name) for all ancestor managed objects up the hierarchy, not just the previous 3-level limit. Inventory roles are not considered when collecting ancestor info.
Affected client methods:
InventoryService.detail(id, { withParents: true }) → response shape expandedInventoryService.list({ withParents: true }) → sameAction required: If code assumed a maximum depth of 3 for parent arrays, update accordingly. No action needed if the depth was unbounded.
revert default → true)Date: September 4, 2025
For time series measurements (not legacy), the default value of the revert parameter has changed from false to true. Results are now newest-first by default.
Legacy measurement persistence is not affected (still oldest-first by default).
Affected client methods:
MeasurementService.list(filter?) → time series results now come newest-first unless revert: false is explicitly setMeasurementService.listSeries(params) → sameAction required: Add revert: false to IMeasurementFilter wherever ascending (oldest-first) order is required for time series data.
c8y_PreviousMeasurements is now a restricted propertyDate: July 3, 2025
The c8y_PreviousMeasurements fragment is now reserved for internal platform use. Any request body that includes this fragment will have it silently ignored — it will not be saved.
Affected client methods:
InventoryService.create(mo) → c8y_PreviousMeasurements in the body will be ignoredInventoryService.update(mo) → sameAction required: Remove c8y_PreviousMeasurements from any managed object create/update payloads.
Date: June 26, 2025
Query language wildcard searches (e.g. name eq 'my-device*') are now case-insensitive. Exact-match queries (no wildcard) remain case-sensitive for performance.
Affected client methods:
InventoryService.listQuery(query, filter?) — any query using * wildcards on string fieldsInventoryService.listQueryDevices(query, filter?) — samequery= parameter passed to InventoryService.list() with wildcard valuesAction required: If code relied on case-sensitive wildcard filtering, results may now include unexpected additional objects. Review queries and add explicit casing constraints if needed.
Date: January 30, 2025 (effective; announced December 6, 2023)
Tenant context subscriptions using the wildcard API selector ("apis": ["*"] or omitting the field) now also deliver operations updates in addition to alarms, events, and measurements.
Affected client methods:
@c8y/client service method, but any Realtime/Notifications 2.0 integration using Client or a custom fetch to POST /notification2/subscriptions with a wildcard selector.Action required: Ensure subscribers handle operation update payloads or switch from the wildcard to an explicit list of APIs.
Date: December 6, 2023 (enforced)
Bulk delete operations without at least one limiting parameter now fail. Minimum required parameters:
DELETE /alarm/alarms → requires one of: source, dateFrom, dateTo, createdFrom, createdToDELETE /event/events → requires one of: source, dateFrom, dateTo, createdFrom, createdToDELETE /measurement/measurements → requires one of: source, dateFrom, dateToAffected client methods: Any custom delete calls made via FetchClient or lower-level HTTP wrappers targeting these endpoints without filter params. The typed service classes (AlarmService, EventService, MeasurementService) do not expose a bulk-delete method in the SDK, so this primarily affects raw API consumers.
Action required: Ensure all bulk delete calls include at least one scope-limiting parameter.
text search restricted to id/name/type/owner/externalIdDate: Announced December 6, 2023 (exact enforcement date TBD, at least 3 months after announcement)
The text query parameter on GET /inventory/managedObjects will only search within id, name, type, owner, and external id. Currently it searches all properties.
Affected client methods:
InventoryService.list({ text: '...' }) → results will be narrower once enforcedAction required: If text search is used to locate objects by custom fragment values, migrate to listQuery() with explicit field predicates instead.
tools
Scaffold a new Cumulocity application using the @c8y/websdk Angular schematic without human interaction. Covers Angular CLI installation, app generation, schematic setup, AI tools configuration, dev server, and build commands. Triggers: new app, scaffold, create application, ng add websdk, setup cumulocity app, new cumulocity project.
tools
Step-by-step guide to migrate a Cumulocity Web SDK application to a target version. Detects breaking changes with the ui-breaking-changes-cli, scaffolds a reference app at the target version with the new-app skill, compares key configuration files (app.ts, bootstrap.ts, angular.json, etc.), and finishes with a code-quality-analysis review. Triggers: migrate app, upgrade version, breaking changes, sdk upgrade, migrate cumulocity, upgrade websdk.
development
Complete guide to internationalizing a Cumulocity Web SDK application. Covers all approaches to annotating and translating text (gettext, translate pipe, translate directive, TranslateService), extracting strings, creating and updating .po files, overriding existing translations, and adding brand-new languages. Triggers: i18n, internationalization, add language, translate, translation, localization, l10n, new language, po file, gettext, TranslateService, language switcher.
development
Analyze Angular / Cumulocity Web SDK code for anti-patterns, bugs, and quality issues. Use when reviewing components, services, or modules for code quality, maintainability, performance, and correctness. Covers TypeScript best practices, Angular idioms, C8Y SDK usage patterns, and project-specific conventions. Triggers: code review, anti-pattern, quality check, refactor suggestion, style guide, bug analysis.