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

# API and Webhook updates

> Subscribe to receive updates whenever there are changes to Plains API, or there is a new webhook version

<Update label="August 19, 2026" tags={["API"]}>
  Discussion `status` is now `OPEN` or `RESOLVED`. Agent activity moved to `agentStatus` (`UNKNOWN`, `IDLE`, and related values). If you filter or switch on the old discussion status values (`IDLE`, `IN_PROGRESS`, `APPROVAL_REQUESTED`), update those clients.

  [Discussions](/docs/graphql/discussions)
</Update>

<Update label="August 18, 2026" tags={["API"]}>
  Added `isCustomAgent` on `MachineUser`. `true` when the machine user is an agent the workspace built itself, rather than an ordinary API integration.

  [Machine users](/docs/agents/machine-users)
</Update>

<Update label="July 14, 2026" tags={["Webhooks"]} description="2026-07-14">
  * Added `thread.note_mention_created` when a note mentions a machine user (for example an [agent](/docs/agents)). Payload includes `thread`, `note`, and `mentions` (an array of `machineUser`).
  * Added `attio` and `email_domain` to `tenant.source` on `thread.tenant_updated`.

  [Webhook versions](/docs/webhooks/versions) · [JSON schema](https://core-api.uk.plain.com/webhooks/schema/2026-07-14.json)
</Update>

<Update label="July 9, 2026" tags={["API"]}>
  Added `createTenant`. It fails if a tenant already exists with the given `externalId`. Use [`upsertTenant`](/docs/graphql/tenants/upsert) when you want create-or-update. Requires `tenant:create`.
</Update>

<Update label="July 2, 2026" tags={["API"]}>
  * Added `threadsByExternalId` to list every thread with a given `externalId`, across customers. `threadByExternalId` still returns a single thread for one customer.
  * Added `knowledgeSourceCitationsByThread` for the knowledge sources cited by AI replies on a thread.

  [Fetch threads](/docs/graphql/threads/get) · [Searching knowledge](/docs/agents/searching-knowledge)
</Update>

<Update label="June 23, 2026" tags={["API"]}>
  Added `updateThreadExternalId`. Pass `externalId: null` to clear it. Requires `thread:edit`.

  [Updating threads](/docs/graphql/threads/update)
</Update>

<Update label="June 15, 2026" tags={["Webhooks"]} description="2026-06-15">
  * Added `WAITING_INDEFINITELY` to `statusDetail.type` on `thread` (snoozed with no duration). The same value is available on the thread type in the API.
  * `componentUser.user` may be a `machineUser` as well as a `user` when a [UI component](/docs/ui-components) references a machine user.

  [Webhook versions](/docs/webhooks/versions) · [JSON schema](https://core-api.uk.plain.com/webhooks/schema/2026-06-15.json)
</Update>

<Update label="May 22, 2026" tags={["API"]}>
  Added `importThread` and `importThreadMessages` for backfilling historical threads without firing SLAs or autoresponders. Each `externalId` is idempotent (`NOOP` on replay). Requires `thread:import`.

  [Importing threads](/docs/graphql/threads/import)
</Update>

<Update label="May 6, 2026" tags={["Webhooks"]} description="2026-05-06">
  * Added `numberValue` on `threadField`.
  * Added `NUMBER` to `threadField.type`.

  [Webhook versions](/docs/webhooks/versions) · [JSON schema](https://core-api.uk.plain.com/webhooks/schema/2026-05-06.json)
</Update>

<Update label="May 4, 2026" tags={["API"]}>
  Added a paginated `discussions` query with filters for user and discussion type.

  [Fetch discussions](/docs/graphql/discussions/get)
</Update>

<Update label="April 5, 2026" tags={["API"]}>
  Added `webhookDeliveryAttempts` so you can inspect delivery attempts, including response status and body, without leaving the API.

  [Delivery attempts](/docs/graphql/webhook-targets/delivery-attempts)
</Update>

<Update label="March 30, 2026" tags={["API"]}>
  Added `createDiscussion`, `sendDiscussionMessage`, and the single `discussion` query, so you can open a side-conversation on a thread and post into it programmatically.

  [Create a discussion](/docs/graphql/discussions/create) · [Send a message](/docs/graphql/discussions/send-message)
</Update>

<Update label="March 25, 2026" tags={["API"]}>
  Added `importCustomers`, `importTenants`, and `importTenantFieldSchemas` for bulk backfills from another system. Each is idempotent on `externalId` and returns added, updated, and skipped counts.
</Update>

<Update label="February 11, 2026" tags={["API"]}>
  Added `updateNote` for editing an existing note on a thread.

  [Notes](/docs/graphql/notes)
</Update>

<Update label="February 10, 2026" tags={["API"]}>
  Added `lockThread` to freeze a thread so non-admin users cannot reply or make changes.
</Update>

<Update label="January 13, 2026" tags={["API"]}>
  Added `updateThreadAgentStatus` to set a thread's AI agent status to `IN_PROGRESS`, `HANDED_OFF`, or `HANDLED`.

  [Building agents](/docs/agents)
</Update>

<Update label="December 19, 2025" tags={["API"]}>
  Tasks are now available over the API: `createTask`, `updateTask`, `deleteTask`, plus `task`, `taskByRef`, and a filterable `tasks` query.

  [Tasks](/docs/graphql/tasks)
</Update>

<Update label="November 21, 2025" tags={["API"]}>
  Added `labelTypeByExternalId`, so you can look up a label type by the ID it has in your own system.

  [Label types](/docs/graphql/labels/label-types)
</Update>

<Update label="October 8, 2025" tags={["API"]}>
  Added `deleteThread` for permanently deleting a thread.

  [Deleting threads](/docs/graphql/threads/delete)
</Update>

<Update label="September 22, 2025" tags={["API"]}>
  Added `searchKnowledgeSources` to search the knowledge your agents draw on.

  [Searching knowledge](/docs/agents/searching-knowledge)
</Update>

<Update label="September 8, 2025" tags={["API"]}>
  Added `upsertTenantField`, `deleteTenantField`, and `deleteTenantFieldSchema`, completing tenant field management over the API.

  [Tenant fields](/docs/graphql/tenants/tenant-fields)
</Update>

<Update label="August 28, 2025" tags={["API"]}>
  Added the `tenantFieldSchemas` query and `upsertTenantFieldSchema` mutation, including field visibility.

  [Tenant fields](/docs/graphql/tenants/tenant-fields)
</Update>

<Update label="August 11, 2025" tags={["API"]}>
  Added `deleteTenant`. Deleting a tenant unlinks it from all customers and removes its fields.

  [Deleting tenants](/docs/graphql/tenants/delete)
</Update>

<Update label="August 8, 2025" tags={["API"]}>
  Added the `knowledgeSources` query and `deleteKnowledgeSource` mutation.

  [Searching knowledge](/docs/agents/searching-knowledge)
</Update>

<Update label="August 6, 2025" tags={["Webhooks"]} description="2025-08-06">
  * Added `additionalAssignees` on `thread`.
  * Added `externalId` and `isExcludedFromAi` on `labelType`.

  [Webhook versions](/docs/webhooks/versions) · [JSON schema](https://core-api.uk.plain.com/webhooks/schema/2025-08-06.json)
</Update>
