<!--
Audience
  External consumers of the Aerion backend API — browserclient, monorepo
  clients (Chrome/Firefox/Jira/Electron), the Zapier plugin, the HubSpot
  plugin, and custom customer integrations. Treat this as the public release
  feed of the API: do not mention internals, frameworks, file paths, or repo
  plumbing.

Forbidden words / leaks
  Do not name implementation details: "Sails", "Waterline", "Lifecycle
  hook", "beforeCreateExtended", "beforeUpdateExtended", "blueprint",
  "TypeBox", "Typescript", "Node 24", "MySQL", "Redis", "Lambda" (as
  internal infra), "DataDog", controller / service / model class names
  (e.g. `ApprovalController`, `WorktimeSyncService`, `AccountIntegration`),
  file paths, commit SHAs, Linear ticket IDs (DEV-*, DEBT-*, MCP-*),
  internal branch names (`epic/*`).

  Rephrase as user-visible / consumer-visible outcomes. "Time-entry locking
  is faster on weeks with many entries" beats "Bulk Approval with Cache
  promoted to production."

Style
  Terse and outcome-focused. Describe the API consumer's observation, not
  the mechanism. Calibrate to a single short sentence, optionally one
  parallel clause for a distinct improvement. When in doubt, your bullet is
  probably already too long.

Vantage point
  Write from the consumer's POV — what they observe in API responses,
  error payloads, OpenAPI documentation, or behavior — not from the
  backend implementer's POV (the rule that produces the observation).

Surface (do mention)
  - New endpoints, new fields, new query parameters.
  - Behavior changes consumers will notice (faster responses, different
    error codes, new validation, response-shape adjustments that are
    backwards-compatible).
  - Bug fixes that resolve consumer-visible breakage.
  - Notable OpenAPI / documentation improvements that affect MCP / LLM
    consumers.

Don't surface
  - Refactors, file moves, type-only changes, dependency bumps, runtime
    upgrades (Node, AWS SDK, etc.).
  - Migration internals.
  - Internal observability, build, or test infrastructure.
  - Lifecycle-hook or service-layer mechanism details.
  - Linear ticket IDs.

Standing intro
  Keep the single standing intro paragraph directly under the top-level
  heading — it exists for SEO / meta-description reasons (the page picks up
  stray text otherwise). Don't add any further preamble, and don't add
  per-release meta-prose ("release notes for X"); the version headings are
  sufficient below the intro.

Unreleased
  - Unreleased work done without a version tag is drafted inside an HTML comment so it doesn't surface
to customers until the next backend release tag is cut.
-->

# Aerion API Release Notes

Release notes for the Aerion API encompass functional adjustments to API behavior, new additions, and documentation adjustments. Features mentioned in this changelog are not necessarily available via the web UI, or they may be restricted to the Early Access preview experience.

## v2.1.7 — 2026-07-30

- Time entries now expose a settable, filterable `importId` field linking an entry to its source record from an external import.

## v2.1.6 — 2026-07-27

- Adds the option to remove upcoming planner assignments when completing or archiving a project or client, or when unassigning a user from a project.
- Archiving a client or super project will no longer mark child projects as completed; pass `complete=true` to also complete them.
- Reactivating a project now also reactivates its parent project and client.

## v2.1.5 — 2026-07-24

- Fixes an issue where overtime for users with flexible working time could accumulate/decrease when worktime was tracked by these users. In practice, this was primarily an issue for users that were subsequently changed to use fixed hours.

## v2.1.4 — 2026-07-23

- Fixes a field permission issue that led to account-specific overrides not being readable by all users. In practice, this was resulting in the max number of Project Leads property not being available to PMs, and the restriction not being enforced.
- Refreshed public holiday data to the latest available, adding support for several more countries, including India, Kazakhstan, Sri Lanka, Pakistan, Saudi Arabia, and Thailand.

## v2.1.3 — 2026-07-21

- Fixes a server error when submitting time entries for periods where the user does not have an active employment entry.
- Deleting a super project now correctly checks the entire cascade chain of its sub-projects, preventing deletion of the super project if any of its sub-projects cannot be deleted, and cleaning up after the sub-projects that are successfully deleted.

## v2.1.2 — 2026-07-17

- Re-adds the `isTeamLead` property to Team Assignments - it grants no additional permissions, but can be used for display, filtering, and exporting.
- Adjusted the HTTP status code of errors returned from the save-worktime feed; error body remains the same.

## v2.1.1 — 2026-07-13

- Relaxed time entry creation rules for projects on days where the user has already submitted time. Time entry creation is now allowed regardless of other entries' submission or approval status, up until the project day for the respective project is locked (or time-based locking is in place).
- Skill Management is now documented in the API reference: skills, skill sets, skill categories, and user skill assignments.

## v2.1.0 — 2026-06-18

- Overhauled error response body - responses now carry stable codes plus localized title and description payloads. Consumers can switch on the error code and surface the localized message directly. This is a backwards-compatible change; existing error strings remain at their old location in the response payload and are supplemented with additional information.
- Fixes an issue that prevented the desktop client startup feed from loading when a task assignment existed for a deleted task

## v2.0.2 — 2026-05-29

- Fixes a 504 that should have been a 400 when posting PlannerAssignments with an invalid post body

## v2.0.1 — 2026-05-18

- New fields added to invoices (and planned invoices) to support internal/external designation and effective date.

## v2.0.0 — 2026-05-09

Despite the major version bump, this is a non-breaking, backwards-compatible change; URLs and paths remain on the /v1/ namespace.

- Overhauled OpenAPI spec from the ground up, includes full/fixed schemas, model attribute descriptions, analytics-feed documentation, sorting hints, usage notes
- All routes in OpenAPI spec switched to kebab-case names (legacy URLs are aliased and include a deprecation header)
- Fixed a race condition that could create duplicate work time entries under concurrent writes.

## v1.23.12 — 2026-05-02

- The default Project Manager role for new accounts now grants Planner View permission by default.

## v1.23.11 — 2026-04-23

- New skill-assignment permissions added to Role, for more fine-grained access

## v1.23.10 — 2026-02-18

- Adds deal probability and deal amount fields to Projects, and introduces Deal project state
- Fixes an issue in the SevDesk integration when importing multiple projects with the same name

## v1.23.9 — 2026-02-13

- Improves performance of locking and unlocking project weeks, especially when many time entries are included.
- Improves load time of overtime-related items on the individual User Analytics page and on the User Edit page.
- Fixes an issue on Time Entry Analytics where filters for either References or Super Projects were not accounted for when performing bulk lock/unlock operations via the Lock icon in the table header.

## v1.23.8 — 2026-01-23

- Fixes an issue where not-yet-added-to-an-invoice recurring expenses would count as effort in some project analytics displays.
- Fixes an issue where the "Total" label at the end of PDF Time Entry exports could overlap totals values depending on the order of columns.
- Setup for HRIS Worktime Sync.
- Adds `projectLead` property to `UserAssignment`.
- Adds `canArchiveOwnProjects` to Role.

## v1.23.7 — 2025-12-03

- Fix time entry resubmit link in emails.
