> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getaptly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> A record of notable changes to the Aptly API, grouped by date.

## October 8, 2026

* **New Endpoint:** `POST /api/board/{boardId}/configuration/automations` — Create an Automation on a board: a `stage`, `segment` (conditions) or `reply` trigger, a timing, and one or more actions (`email`, `sms`, `task`, `assign`, `update_fields`, `stage`, `due_date`, `notify`, `archive`, `archive_convos`, `webhook`). Requires `update` permission and the key's separate "Automations" access toggle (off by default, independent of "Edit Boards"). Automations are **always created paused**. Every stage, field, template, inbox, user, team and condition in the request is checked against your board and organization, and the request is rejected with a message naming the problem rather than creating an automation that wouldn't work.
* **Breaking Change:** `GET /api/board/{boardId}/configuration/automations` now lists a board's Automations (previously it returned the older create-card rules). Those rules are now at `GET /api/board/{boardId}/configuration/card-rules`, with the same response shape the old `automations` endpoint returned. Update any integration that read create-card rules from `.../automations`.
* **Deprecated:** `GET /api/board/{boardId}/configuration/workflows` — use `GET .../configuration/automations`, which returns the same data. The old path still works.
* **Note:** `GET /api/board/{boardId}/configuration` is unchanged: its `automations` key still holds the older create-card rules and its `workflows` key holds the board's Automations.

## October 6, 2026

* **New Endpoint:** `POST /api/board/{boardId}/configuration/fields` — Add a custom field to a board. Same field shape and allowed field types as `POST /api/boards`.
* **New Endpoint:** `PUT /api/board/{boardId}/configuration/fields/{fieldUuid}` — Update a field's `name`, `optional`, `pinned`, `defaultValue`, or (select-type fields) option list. A field's `type` and `uuid` never change.
* **New Endpoint:** `DELETE /api/board/{boardId}/configuration/fields/{fieldUuid}` — Delete a field. Standard, locked, mirror and integration-managed fields can't be deleted, and a field used by a saved filter (or a workflow/automation that runs off one) returns `409 CONFLICT` listing what uses it.
* **New Endpoint:** `PATCH /api/board/{boardId}/configuration/theme` — Update a board's `name`, `cardName`, `color`, `icon`, `description` and `shortCode`.
* **New Endpoint:** `DELETE /api/board/{boardId}` — Archive a board: its cards, saved filters and templates are archived and the cards' open tasks closed. There is no un-archive endpoint.
* **New Endpoint:** `POST /api/board/{boardId}/configuration/mirror-fields` — Add a field that mirrors a field of another board (`targetBoardUuid` + `targetFieldUuid`, optional `name`, `readOnly`). Requires the same "Edit Boards" access; the target board must also be inside the key's board allowlist and API-enabled.
* **Enhancement:** These five endpoints require `update` permission plus a new "Edit Boards" access toggle on the API key (Setup → Developer; off by default). An archived board no longer resolves through the Board API (`404`), so it stops accepting card reads and writes.
* **Fix:** `checkboxlist` (Task List) fields no longer require a `data` option list when created via `POST /api/boards` or the new add-field endpoint - a task list holds checklist items, not options. Only `singleselect` and `multiselect` need `data`.

## October 1, 2026

* **New Endpoint:** `POST /api/boards` — Create a new board. Accepts `name`, an optional
  `boardType` (`ticket` or `deal`, defaults to `ticket`), and an optional `fields` array of
  custom fields. A `stage` field with a type-appropriate default pipeline is always added
  automatically. Requires the key's "Create Boards" access toggle to be explicitly enabled
  in Setup → Developer, in addition to `insert` permission.
* **New Endpoint:** `DELETE /api/board/{boardId}/{cardId}` — Archives a card (soft delete;
  the card is never removed, only marked `archived`).
* **New Endpoint:** `DELETE /api/board/{boardId}/webhook` — Removes a board's webhook.
  Idempotent: returns 200 even when no webhook is currently set. `POST
  /api/board/{boardId}/webhook` already handled add/update (re-pointing an existing webhook
  rotates its signing key); this closes out the set with a way to remove one.

## September 30, 2026

* **New Endpoint:** `POST /api/board/{boardId}/list` — Paginated, filterable card listing driven by saved segments or ad hoc rule sets; replaces query-based listing on `GET /api/board/{boardId}`, which is now deprecated for that purpose.

## September 29, 2026

* **Enhancement:** `GET /api/inboxes/{channelId}/messages` accepts a new `unreadOnly` query param to return only unread threads, applied before paging so `count` reflects the filtered total.

## September 28, 2026

* **New Endpoint:** `POST /api/contacts/conversations` — Find a batch of contacts' real email, SMS, and call conversations across accessible inboxes, without requiring a helpdesk ticket.
* **New Endpoint:** `GET /api/contacts/{contactId}/conversations` — Same lookup for a single contact.

## September 25, 2026

* **Fix:** `POST /api/board/{boardId}` updates now seed stage/tasksection/task workflow triggers the same way the Meteor app does — previously only newly created cards got them, so an update made through the API could silently skip automations a stage or task workflow should have started.

## September 24, 2026

* **New Endpoint:** `GET /api/tours/feedback` — List post-tour feedback surveys for the company.
* **New Endpoint:** `GET /api/tours/{showingId}/feedback` — Get one showing's tour feedback survey.
* **Enhancement:** `GET /api/knowledge/tree` now accepts the same filters as `GET /api/knowledge/list` (board, card, conversation, search, archived, owner, date range, unlinked) and prunes the tree to matches plus their ancestors/descendants, with each node reporting a `matched` flag. `GET /api/knowledge/{id}/children` gains an `archived` param so an archived folder found via the filtered tree can be expanded.
* **Fix:** Creating a knowledge document under a parent that belongs to a board now inherits that board automatically, instead of leaving the new document invisible on the board's own Docs tab.

## September 23, 2026

* **New Endpoint:** `POST /api/board/{boardId}/webhook` — Sets or updates a board's webhook URL for the API integration.
* **Enhancement:** Every `/api/*` response now includes an `X-Api-Version` header reporting the API's request-contract version, and a new `GET /version` endpoint returns the same value.

## September 18, 2026

* **New Endpoint:** `GET /api/board/{boardId}/merge-fields` — Returns the merge-field catalog available for a board, grouped by recipient/board/sender/etc., for building `{{...}}` merge placeholders in templates.

## September 17, 2026

* **New Endpoint:** `POST /api/templates` — Create a communication template (`sms`/`email`/`form`/`eSignature`/`pdf`), with merge-placeholder shape validation and attachment resolution.
* **New Endpoint:** `PUT /api/templates/{id}` — Update an existing communication template, sharing the same validation rules as create.
* **Enhancement:** `GET /api/knowledge/{id}` now returns a fully enriched document — folder path, shares, children, links, and metadata — instead of just `{ _id, name, html }`, and enforces per-user access when called with a delegate token (a document you don't have access to now 404s rather than exposing that it exists).
* **New Endpoint:** `GET /api/knowledge/list` — List knowledge documents, with filters for folder, owner, created/updated date range, archived state, and unlinked documents.
* **New Endpoint:** `GET /api/knowledge/tree` — Browse the knowledge base as a folder tree.
* **New Endpoint:** `GET /api/knowledge/{id}/children` — List a knowledge document's child documents and folders.
* **Fix:** `PUT /api/knowledge/{id}` switching a document's access to `private` now automatically grants a share to the acting user (or the document's original creator) when it has none, instead of leaving it with no one able to access it.

## September 16, 2026

* **Enhancement:** `GET /api/inboxes/{channelId}/messages` thread `status` and a new `isJunk` field now report the stream's own state instead of inferring it from `closedAt` — `status` is one of `closed`/`new`/`open`/`sent` (previously only `open`/`closed`), and `isJunk` is `archived`/`not_junk`/`junk`; either is `null` when the thread has no recorded value. A new `unread` boolean is also returned. Breaking: the thread's `assignee` field is renamed to `assigneeId`.
* **New Endpoint:** `POST /api/phone/send-sms` — Sends an SMS from a Twilio channel as a user of the company: one message enqueued per recipient rather than sent inline. Accepts a partner token, an API key, or a delegate token with `phone:*` write scope.

## September 14, 2026

* **Fix:** `POST /api/board/{boardId}` no longer overwrites a card's original `createdAt`/`createdBy` when updating an existing card — both were previously reset to the update's time and actor.

## September 10, 2026

* **Fix:** Presigned download links returned for card `file`/`files` fields now report an `expiresAt` that reflects when the link actually stops working, instead of always advertising a full hour — a link signed near the end of the server's AWS session could previously fail immediately with `ExpiredToken` despite claiming an hour of remaining validity.

## September 9, 2026

* **Enhancement:** `GET /api/board/{boardId}` and `GET /api/board/{boardId}/{cardId}` now resolve `file`/`files` field values into file objects — `{ fileId, name, size, type, url, expiresAt }` — carrying a presigned S3 download link, instead of returning bare file ids. An id with no readable file record degrades to `{ fileId }` with no `url`.

## September 8, 2026

* **Enhancement:** `POST /api/board/{boardId}` now defaults a new card's `stage` to the board's first stage option when the request omits one, instead of leaving the card with no stage.

## September 4, 2026

* **New Endpoint:** `GET /api/contacts/{contactId}/sentiment` — Returns a contact's conversation sentiment over the last 30 days, merged across every channel in the company into one daily series, plus a recency-weighted overall score and distinct conversation count.

## September 2, 2026

* **Enhancement:** `POST /api/board/{boardId}` now computes and stores initial workflow triggers on newly inserted cards, so board automations that fire on stage/task changes apply the same way to API-created cards as to cards created in the app.

## August 24, 2026

* **Enhancement:** `POST /api/web-forms/{formId}` can now link a submission to a contact with no Configuration-tab setup — reserved submission keys (`contactFirstName`, `contactLastName`, `contactFullName`, `contactEmail`, `contactPhone`) create or match a contact automatically when the form's board has exactly one person/persons field. An explicit Configuration-tab contact mapping still takes precedence, field by field, over these reserved keys.

## August 20, 2026

* **Enhancement:** `POST /api/web-forms/{formId}` now supports linking a submission to a contact — when the form has contact mapping configured, it looks up an existing person by normalized email/phone (or creates one) and writes the resulting contact reference onto the board's configured field.

## August 18, 2026

* **Enhancement:** `GET /api/inboxes/{channelId}/messages` threads now include a `labels` array (`{ id, name }`) listing the folder labels applied to the thread. Only real folder labels are returned — the encoded scoping ids also stored on a thread (channel, assignee, mention, person type, category) are omitted.

## August 16, 2026

* **New Endpoint:** `POST /api/web-forms/{formId}` — Public submission endpoint for Aptly Web Forms. Maps the submitted data onto the form's board, creating a new card or updating a matching existing one (depending on the form's configured match mode), and records the submission. The API key must be the exact token minted for the form — a board-scoped insert key can only submit to the one form it was created for.

## August 13, 2026

* **Enhancement:** Board API keys (`x-token`) can now be scoped to specific boards and to a subset of read/insert/update permissions, configurable from Setup → Developer → Board API Tokens. Requests outside a key's allowed boards or permissions now receive a `403 FORBIDDEN`. Existing keys are unaffected — an absent `boardIds`/`permissions` on a key means full access to all boards, as before.

## July 31, 2026

* **New Endpoint:** `GET /api/inboxes` — Lists the email and phone/SMS inboxes your credential can query. With a delegate token (`inboxes:*` scope) results are limited to inboxes the authenticated user can reach and each carries `access: owned` or `monitored`; `?scope=` filters on that. API keys and partner tokens are company-scoped, so they return every inbox in the company and reject `?scope=`.
* **New Endpoint:** `GET /api/inboxes/{channelId}/messages` — Threads on an inbox, newest activity first, each with its messages and per-thread metrics (first/average response time, response count, reopen flag, touch counts). Filter by `dateFrom`/`dateTo` (exclusive, max 400 days) and `direction`; page over threads with `page`/`pageSize` (max 200). Automated/junk threads are excluded unless `includeJunk=true`.
* **Enhancement:** `GET /api/inboxes/{channelId}/analytics` now returns `sentiment` and `topics`. `sentiment` gives the average AI sentiment score for the window plus the `coverage` it was computed from (`scoredThreads` / `threadCount` / `pct`) and an `enabled` flag reporting whether scoring is currently on for that inbox — scores exist only for threads the pipeline actually scored, so the coverage tells you how much of the window the average describes. `topics` lists the categories applied to threads in the window with their thread counts. Both are also broken out per group when `groupBy` is used (without the inbox-level `enabled` flag). Qualitative tone summaries are still not included.
* **New Endpoint:** `GET /api/inboxes/{channelId}/health` — Scores an inbox's message volume for the requested window against its own recent baseline, for health and risk surfaces. The baseline is a trailing average of the `baselinePeriods` same-length windows before `dateFrom` (default 3, max 12). Returns `volumeVsBaselinePct`, a `trend` comparing the two halves of the window, a `severityScore` (0–100, tracking decline magnitude — growth scores 0), a `severityLabel` (`critical` 75+, `high` 50–74, `moderate` 25–49, `low` 1–24, `none`) and tags such as `Usage down`, `No activity` and `Still falling`. When there is no baseline volume to compare against, `volumeVsBaselinePct` and `severityScore` are `null` and `severityLabel` is `insufficient_history` rather than reporting a misleading −100%.
* **New Endpoint:** `GET /api/inboxes/{channelId}/trends` — A gap-free volume and response-time time series for an inbox, rolled up server-side by `day`, `week`, `month` or `quarter`. `dateFrom` and `dateTo` are both required (`dateTo` exclusive, max 400 days), and periods with no activity are returned with zero volume rather than omitted so the series can be charted directly. Bucketing is UTC and weeks start Monday. Note the two bucketing bases: `volume` counts messages during the period, while `threadCount` and the response/rate figures describe threads whose last activity fell in the period — don't divide one by the other.
* **New Endpoint:** `GET /api/inboxes/{channelId}/analytics` — Aggregated conversation metrics for one inbox: average first and overall response time with the `responseCount` behind them, one-touch and reopen rates, inbound/outbound volume, distinct contact count, plus first-party `noCustomerResponseCount` (outbound that never got a reply) and `awaitingOurReplyCount` (open threads where the contact spoke last). `groupBy=assignee` or `groupBy=contactType` breaks the same metrics out per group. Response times are business-hours aware, using your configured business hours and holidays, so they reconcile with in-app reports. Averages and rates are `null` rather than `0` when a window has nothing to measure.

## July 29, 2026

* **Fix:** `GET /api/board/{boardId}` and `GET /api/board/{boardId}/{cardId}` now return Aptly's standard card fields (`name`, `stage`, `dueAt`, `assignee`, and the rest of the built-in field set) alongside your board's custom fields. Previously only fields explicitly defined on the board were returned, so standard fields came back missing. Where a custom field shares a `uuid` with a standard one, your board's definition wins.
* **Enhancement:** Card responses now include a `lastActivity` object describing the most recent conversation on the card — `content` (message preview), `type` (`email`, `sms`, `voice`), `direction` (`in` or `out`), `publishedAt`, and `conversationUrl`, a deep link to the conversation thread in Aptly. It is `null` when the card has no activity, and `conversationUrl` is `null` when the activity isn't attached to a thread.
* **Fix:** `GET /api/board/{boardId}/{cardId}` now returns `assignee` as the assigned user's display name, matching the list endpoint. It previously returned the raw user id.

## July 20, 2026

* **Enhancement:** `POST /api/knowledge/create` and `PUT /api/knowledge/{id}` now accept an optional `markdown` field as an alternative to `html` for the document body — provide one or the other, not both (a `400` is returned if both are set). Knowledge doc HTML retrieval (`GET /api/knowledge/{id}`) also now renders through an upgraded conversion engine with table support, with an automatic fallback for documents created before this change.

## July 17, 2026

* **New Endpoint:** `GET /api/docs/openapi` — Returns the raw contents of this OpenAPI spec (`docs/openapi.yaml`) as `text/yaml`. No authentication required.

## July 9, 2026

* **Enhancement:** `POST /api/email/create-draft` and `POST /api/email/send` now accept an optional `discussionId` to reply into an existing thread instead of starting a new one. On `send`, supplying `discussionId` without `uuid` appends the new draft as a reply to that thread; the thread's own subject is kept. The thread must belong to the same company and channel.

## June 26, 2026

* **New Endpoint:** `POST /api/files/upload-url` — Request a presigned upload for a file. Returns a `fileId` plus the `url` and form `fields` for uploading the file directly to storage. The file is attached to a `channel`, `aptlet`, or `knowledge` doc (which must exist in your company), with content-type and 1 byte–50 MB size validation.

* **New Endpoint:** `POST /api/files/upload-complete` — Finalize a direct upload after the file has been sent to storage. Records the file and returns its `fileId` and download `url`.

  Both endpoints accept an API key (`x-token`) or a delegate token with the `files:*` scope.

* **Enhancement:** `POST /api/email/create-draft` and `POST /api/email/send` now accept `attachmentIds` to include uploaded files as attachments, and auto-detect inline images embedded in the HTML `body` via their file download URL (tagged and registered automatically — don't also list them in `attachmentIds`). Upload each file first with the direct upload flow (`POST /api/files/upload-url` → S3 → `POST /api/files/upload-complete`), then pass the returned `fileId`s.

## June 15, 2026

* **New Endpoint:** `GET /api/routing-groups` — List all active routing groups for the authenticated company. Accepts an API key (`x-token`) or a delegate token with `routing-groups` read scope.
* **New Endpoint:** `POST /api/routing-groups/create` — Create a routing group with a name, ring type (`simultaneous` or `sequential`), destination configuration, and optional caller experience and overflow settings. Returns the new group's `_id`.
* **New Endpoint:** `PUT /api/routing-groups/{id}` — Update an existing routing group. All fields are optional — only provided fields are changed. Pass `null` to clear a field.
* **New Endpoint:** `POST /api/routing-groups/{id}/archive` — Archive (soft-delete) a routing group. Archived groups are excluded from list results and cannot be updated.

## June 9, 2026

* **New Endpoint:** `POST /api/tasks/search` — Query tasks for your company with optional filters (assignee, completion/pinned state, priority, board/card, stream/channel, and `dueAt`/`checkedAt`/`updatedAt` date ranges). Returns the matching tasks, or a count when `useCount` is set.
* **New Endpoint:** `POST /api/tasks` — Create a task. When `aptletInstanceId` is provided, the task is also mirrored as a checklist entry on that card.
* **New Endpoint:** `GET /api/tasks/{taskId}` — Fetch a single task with related card/board context and resolved attachments; pass `includeMetadata=true` for display labels and the resolved assignee.
* **New Endpoint:** `PUT /api/tasks/{taskId}` — Update a task and keep its card-checklist mirror entry in sync.

  All task endpoints accept an API key (`x-token`) or a delegate token with the `tasks:*` scope.

## June 3, 2026

* **New:** Embedded iframe apps can now trigger Aptly UI interactions via a postMessage action system or the Aptly SDK. Nine actions are available: open a card pane, open a card in fullscreen, start the dialer, open the email/SMS composer, create a calendar event, create a card, create a task, create a contact, and navigate to a contact. Actions must be explicitly enabled per embed by an admin. See [Embed App Actions](/embed-actions).
* **New SDK methods:** `aptly.openCardPane()`, `aptly.openCardView()`, `aptly.startDialer()`, `aptly.openEmailComposer()`, `aptly.createEvent()`, `aptly.createCard()`, `aptly.createTask()`, `aptly.createContact()`, `aptly.navigateToContact()`, and `aptly.action()` — each returns `Promise<{ success, error? }>` and times out after 3 seconds.
* **New SDK property:** `aptly.actions` — array of action IDs the current embed has been granted, for runtime capability checks.
* **Enhancement:** `POST /api/email/create-draft` and `POST /api/email/send` now accept an optional `aptletInstanceId` in the request body. When set, the outbound is linked to that card — the email is logged as an activity on the card and the discussion is tagged with it. Works whether the draft is pre-created or created on-the-fly.

## May 26, 2026

* **New Endpoint:** `GET /api/app/me` — Returns identity information for the credential used in the request. Delegate tokens return user identity (and embedded-app context when an `appClientId` is present); API keys return company identity; partner tokens return their permission list.
* **New Endpoint:** `GET /api/board/{boardId}/configuration` — Returns all board configuration sections in one call: fields, automations, options, tabViews, workflows, groups, shares, theme, and filters. Accepts an API key or a partner token with `board-admin` permission (delegate tokens are not supported for board configuration endpoints).
* **New Endpoint:** `GET /api/board/{boardId}/configuration/automations` — List the automations configured on a board.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/options` — Get the current board-level option flags.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/fields` — List all fields defined on a board, including archived ones.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/workflows` — List the workflows (sequences) configured on a board.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/groups` — List the field groups (sections) configured on a board.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/shares` — Get a board's access type (`public`/`private`) and its ACL entries.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/theme` — Get a board's display name, card name, color, icon, description, and short code.
* **New Endpoint:** `GET /api/board/{boardId}/configuration/filters` — List saved filters for a board. Company-scoped filters are always included; private (user-scoped) filters are included when authenticating with a delegate token that carries a `userId`.
* **New Endpoint:** `GET /api/templates` — List communication templates for your company, with optional filters for `templateType`, `aptletUuid`, and `archived`. Accepts an API key, a delegate token with `templates` scope, or a partner token with `templates` permission (pass `companyId` as a query param with partner auth).
* **New Endpoint:** `GET /api/templates/{id}` — Get a single communication template by ID.
* **Enhancement:** `POST /api/board/{boardId}/tabView` is now also available at `POST /api/board/{boardId}/configuration/tabViews`. The original path remains active as a legacy alias.
* **Enhancement:** `GET /api/boards` now accepts delegate tokens with `boards` read scope in addition to API keys. The `endpoints` array in each board entry now includes all board configuration endpoints.

## May 25, 2026

* **New Endpoint:** `GET /api/inboxes/{channelId}/drafts` — List the unsent drafts on a given email inbox. Each item is the raw draft entry with the parent `streamId` attached; drafts currently being sent are excluded. Accepts the same dual-auth as the rest of the email endpoints (API key, delegate token with `email:*` read scope, or partner bearer token with `inboxes`/`internal-admin`).

## May 21, 2026

* **New Endpoint:** `POST /api/email/create-draft` — Create a new outbound email draft discussion from recipient and content fields (`to`, `cc`, `bcc`, `subject`, `body`, `channelId`). Returns `streamId` and `draftUuid` for use with `POST /api/email/send`.
* **New Endpoint:** `POST /api/email/send` — Send an outbound email, either from an existing draft (`discussionId` + `uuid`) or on-the-fly from bare email fields. Auto-assignment is always applied when the draft is finalized.
* **New Endpoint:** `GET /api/users/{userId}/inboxes` — List the email inboxes (Hermes/Nylas channels) accessible to a user, including both personal channels and team-shared channels. Each inbox is tagged `kind: "personal"` or `kind: "shared"`.
* **Enhancement:** Delegate tokens now support an `email:*` scope. When granted (read or write), the token can call `POST /api/email/create-draft`, `POST /api/email/send`, and `GET /api/users/{userId}/inboxes` on behalf of the user.

## May 4, 2026

* **Fix:** Card objects in board responses now consistently include both `_id` and `cardId` fields.

## April 24, 2026 — Delegate Token Authentication

* **New Endpoint:** `POST /api/app/verify` — Verify a short-lived delegate token and retrieve user identity without an API key. For use by embedded apps and plugins that receive a token from the Aptly platform.
* **New Endpoint:** `POST /api/board/verify-user` — Verify a delegate token scoped to board access and retrieve the associated user context.
* **New Endpoint:** `GET /api/board/{boardId}/{cardId}/comments` — List all comments on a card in chronological order.
* **New Endpoint:** `GET /api/board/{boardId}/{cardId}/contacts` — List person contacts linked to a card via its person fields.
* **New Endpoint:** `POST /api/board/{boardId}/{cardId}/comment` — Add or update a comment on a card.
* **New Endpoint:** `POST /api/board/{boardId}/{cardId}/file` — Upload a file attachment to a card (multipart/form-data, max 50 MB).
* **New Endpoint:** `POST /api/board/{boardId}/tabView` — Embed a tab view on a board.
* **Enhancement:** Board, Contacts, and Knowledge endpoints now accept delegate token authentication (`Authorization: DelegateToken <token>`) in addition to API keys. Tokens carry explicit read and write scopes per resource.
* **Enhancement:** `GET /api/board/{boardId}` now supports an `assignee` query parameter to filter cards by assigned user.
* **Enhancement:** Cards created or updated via a delegate token now record the authenticated user as `createdBy` / `updatedBy` rather than attributing changes to "aptly".

## April 20, 2026

* **New Endpoint:** `GET /api/company/info` — Retrieve your company's profile including name, address, contact details, and logo URL.

## April 16, 2026

* **New Endpoint:** `GET /api/users` — List all non-archived users in your company.

## April 14, 2026

* **New Endpoint:** `GET /api/boards` — Discover all API-enabled boards for your account, including their UUIDs and ready-to-use endpoint URLs for card operations.

## April 7, 2026

* **Enhancement:** `GET /api/contacts` now supports `updated_after` and `updated_before` query parameters to filter contacts by last-updated timestamp.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.