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

# Search ProposedActions

> Search and list ProposedAction records with filtering, sorting, and pagination.

A ProposedAction is an AI-generated recommendation waiting in the operator AI Inbox, produced when one of the proactive agents spots an opportunity such as an overdue invoice, an expiring contract, a run of support tickets, a spike in one issue category or a gap in the FAQ. Each one carries a drafted message or an internal alert, a confidence score and a review deadline. Records are created by the proactive agents, never by hand, and cannot be deleted. Fields such as the drafted subject and body, the delivery channel and the review notes may be edited before the action goes out. Its lifecycle, however, is driven by the review operations: use the approve and reject commands (PROPOSEDACTION\_APPROVE, PROPOSEDACTION\_REJECT), which also deliver the message, rather than writing Status directly — setting Status by hand marks an action as handled without ever sending it. Which agents run and how they behave is configured through ProactiveActionConfig.

## Authentication

<Note>
  This endpoint requires OAuth2 authentication. Include a valid bearer token in the `Authorization` header.
  The authenticated user must be a full unrestricted administrator or have the **`ProposedAction-List`** role.
</Note>

## Enums

<Accordion title="eProposedActionType — ActionType values">
  | Value | Name          |
  | ----- | ------------- |
  | 1     | DraftMessage  |
  | 2     | VoiceOutreach |
  | 3     | InternalNote  |
  | 4     | TaskReminder  |
</Accordion>

<Accordion title="eOutboundChannel — Channel values">
  | Value | Name            |
  | ----- | --------------- |
  | 1     | Email           |
  | 2     | Voice           |
  | 3     | CoworkerMessage |
  | 4     | HelpDesk        |
  | 5     | WhatsApp        |
</Accordion>

<Accordion title="eProposedActionPriority — Priority values">
  | Value | Name     |
  | ----- | -------- |
  | 1     | Low      |
  | 2     | Medium   |
  | 3     | High     |
  | 4     | Critical |
</Accordion>

<Accordion title="eProposedActionStatus — Status values">
  | Value | Name          |
  | ----- | ------------- |
  | 1     | Pending       |
  | 2     | Approved      |
  | 3     | Rejected      |
  | 4     | Expired       |
  | 5     | AutoExecuted  |
  | 6     | Snoozed       |
  | 7     | Deferred      |
  | 8     | AwaitingReply |
</Accordion>

<Accordion title="eHelpDeskMessagePriority">
  | Value | Name     |
  | ----- | -------- |
  | 1     | Low      |
  | 2     | Normal   |
  | 3     | High     |
  | 4     | Critical |
</Accordion>

## Query Parameters

### Pagination & Sorting

<ParamField query="page" type="integer" default="1">
  The page number to retrieve.
</ParamField>

<ParamField query="size" type="integer" default="25">
  The number of records per page.
</ParamField>

<ParamField query="orderBy" type="string">
  The property name to sort results by (e.g. `Name`, `CreatedOn`).
</ParamField>

<ParamField query="dir" type="integer">
  Sort direction. `0` for ascending, `1` for descending.
</ParamField>

### Filters

<ParamField query="ProposedAction_Business" type="integer">
  Filter by iD of the location that owns this proposed action. Set from the location whose agents produced it..
</ParamField>

<ParamField query="ProposedAction_Coworker" type="integer">
  Filter by iD of the customer this action targets. Empty for internal alerts and for leads that have no customer record yet..
</ParamField>

<ParamField query="ProposedAction_Coworker_FullName" type="string">
  Filter by display value for Coworker.FullName..
</ParamField>

<ParamField query="ProposedAction_Coworker_Email" type="string">
  Filter by display value for Coworker.Email..
</ParamField>

<ParamField query="ProposedAction_Coworker_CoworkerType" type="string">
  Filter by display value for Coworker.CoworkerType..
</ParamField>

<ParamField query="ProposedAction_Coworker_CompanyName" type="string">
  Filter by display value for Coworker.CompanyName..
</ParamField>

<ParamField query="ProposedAction_Coworker_BillingName" type="string">
  Filter by display value for Coworker.BillingName..
</ParamField>

<ParamField query="ProposedAction_AiChannelSession" type="integer">
  Filter by iD of the AI conversation that triggered this action. Only set for criteria that evaluate conversations, such as unanswered-question and dormant-lead detection..
</ParamField>

<ParamField query="ProposedAction_CriteriaType" type="string">
  Filter by identifier of the agent that produced this action, matching a criteria evaluator name such as DueInvoiceCriteria, ContractExpiryCriteria, SupportPatternCriteria, SupportIssueCategoryCriteria or MissingFaqCriteria. Behaviour for each is configured through ProactiveActionConfig..
</ParamField>

<ParamField query="ProposedAction_CriteriaPayload" type="string">
  Filter by read-only JSON snapshot of the evidence the criteria evaluator collected (for example invoice amounts and due dates, contract dates, support ticket summaries, or a drafted FAQ article). Shape varies per criteria type; returned by the detail operation only..
</ParamField>

<ParamField query="ProposedAction_ActionType" type="integer">
  Filter by what the action does once approved: DraftMessage sends a composed message to the customer, VoiceOutreach places an AI call, InternalNote raises an operator-only alert with no customer contact, TaskReminder records a follow-up. InternalNote actions have no customer target and no delivery channel..
</ParamField>

<ParamField query="ProposedAction_Channel" type="integer">
  Filter by how an approved action reaches the customer: Email for an AI-tracked email conversation, Voice for an outbound AI call, CoworkerMessage for a message sent from a connected email account, HelpDesk to raise a ticket, or WhatsApp. Operators can change the channel at approval time. Ignored for InternalNote actions..
</ParamField>

<ParamField query="ProposedAction_DraftSubject" type="string">
  Filter by aI-composed subject line for the proposed message. Operators may edit it before approving; for internal alerts it doubles as the alert headline..
</ParamField>

<ParamField query="ProposedAction_DraftBody" type="string">
  Filter by aI-composed message body, call script, or — for internal alerts — the alert text itself. Operators may edit it before approving..
</ParamField>

<ParamField query="ProposedAction_Confidence" type="number">
  Filter by aI confidence in this recommendation, on a 0.0–1.0 scale (not a percentage). When the matching ProactiveActionConfig enables auto-execution, an action at or above its AutoExecuteMinConfidence skips the review inbox..
</ParamField>

<ParamField query="ProposedAction_Priority" type="integer">
  Filter by urgency assigned by the agent that raised the action: Low, Medium, High or Critical. Drives inbox ordering and the urgency indicator; it does not change delivery behaviour..
</ParamField>

<ParamField query="ProposedAction_Status" type="integer">
  Filter by where the action sits in its lifecycle: Pending awaits review; Snoozed is hidden until its wake time; Approved has been accepted for delivery; AutoExecuted was sent without review because confidence cleared the configured threshold; Deferred is approved but waiting for the recipient's next calling window; AwaitingReply has sent a WhatsApp opt-in template and is waiting on the customer; Rejected was dismissed; Expired passed its review deadline unattended. Change it through the approve, reject and snooze operations rather than by writing this field..
</ParamField>

<ParamField query="ProposedAction_ReviewedBy" type="integer">
  Filter by iD of the operator who last reviewed this action. Empty while it is still awaiting review or when the system expired it unattended..
</ParamField>

<ParamField query="ProposedAction_ReviewedBy_FullName" type="string">
  Filter by display value for ReviewedBy.FullName..
</ParamField>

<ParamField query="ProposedAction_ReviewedBy_Email" type="string">
  Filter by display value for ReviewedBy.Email..
</ParamField>

<ParamField query="ProposedAction_ReviewedOn" type="string">
  Filter by uTC time an operator last approved, rejected or snoozed this action..
</ParamField>

<ParamField query="ProposedAction_ReviewNotes" type="string">
  Filter by notes recorded when an operator approves, rejects or snoozes the action. The system also appends here when it expires an action, for example because no calling window was available..
</ParamField>

<ParamField query="ProposedAction_ExecutedOn" type="string">
  Filter by uTC time the approved action was actually delivered or the outbound call placed. Empty while the action is still queued or deferred..
</ParamField>

<ParamField query="ProposedAction_OutcomeSession" type="integer">
  Filter by iD of the AI conversation created when this action was delivered. Use it to follow the reply thread, escalated tickets and messages that came out of the outreach..
</ParamField>

<ParamField query="ProposedAction_ExpiresOn" type="string">
  Filter by uTC review deadline, defaulting to three days after the action is created. A Pending action past this point is moved to Expired; for a Snoozed action this instead holds the wake time set by the snooze duration..
</ParamField>

<ParamField query="ProposedAction_DeduplicationKey" type="string">
  Filter by read-only key that prevents duplicate proposals for the same trigger, shaped as "criteria-type:\{identifier}:\{tier}" (for example "invoice:123:reminder:1"). A new proposal is suppressed while a non-expired action with the same key exists inside the criteria's cooldown window\..
</ParamField>

<ParamField query="ProposedAction_ScheduledExecutionTime" type="string">
  Filter by uTC time a Deferred action becomes due, set automatically to the recipient's next calling window when approval lands outside permitted outbound hours..
</ParamField>

<ParamField query="ProposedAction_DeferralReason" type="string">
  Filter by system-written explanation of why delivery was postponed, recorded when an approved action falls outside the recipient's permitted calling hours..
</ParamField>

<ParamField query="ProposedAction_DeferralCount" type="integer">
  Filter by number of times delivery has been postponed for calling hours. Counts up from zero and helps spot actions that keep missing their window\..
</ParamField>

<ParamField query="ProposedAction_EmailAccount" type="integer">
  Filter by iD of the connected email account used as the sender when an approved action goes out over the CoworkerMessage channel. Empty means the location's default outgoing mail settings are used and customer replies are not tracked back into the AI conversation..
</ParamField>

<ParamField query="ProposedAction_EmailAccount_DisplayName" type="string">
  Filter by display value for EmailAccount.DisplayName..
</ParamField>

<ParamField query="ProposedAction_EmailAccount_EmailAddress" type="string">
  Filter by display value for EmailAccount.EmailAddress..
</ParamField>

<ParamField query="ProposedAction_InternalNotes" type="string">
  Filter by internal context carried onto the help desk ticket created when a HelpDesk-channel action is approved. Visible to operators only, never to the customer..
</ParamField>

<ParamField query="ProposedAction_HelpDeskDepartment" type="integer">
  Filter by iD of the help desk department the ticket is filed under when a HelpDesk-channel action is approved. Empty leaves the ticket unassigned..
</ParamField>

<ParamField query="ProposedAction_HelpDeskDepartment_Name" type="string">
  Filter by display value for HelpDeskDepartment.Name..
</ParamField>

<ParamField query="ProposedAction_HelpDeskPriority" type="integer">
  Filter by priority applied to the help desk ticket created when a HelpDesk-channel action is approved (Low, Normal, High, Critical). Empty for actions on any other channel..
</ParamField>

### Range Filters

<ParamField query="from_ProposedAction_Confidence" type="number">
  Filter by aI confidence in this recommendation, on a 0.0–1.0 scale (not a percentage). When the matching ProactiveActionConfig enables auto-execution, an action at or above its AutoExecuteMinConfidence skips the review inbox. greater than or equal to this value.
</ParamField>

<ParamField query="to_ProposedAction_Confidence" type="number">
  Filter by aI confidence in this recommendation, on a 0.0–1.0 scale (not a percentage). When the matching ProactiveActionConfig enables auto-execution, an action at or above its AutoExecuteMinConfidence skips the review inbox. less than or equal to this value.
</ParamField>

<ParamField query="from_ProposedAction_ReviewedOn" type="string">
  Filter by uTC time an operator last approved, rejected or snoozed this action. greater than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_ReviewedOn" type="string">
  Filter by uTC time an operator last approved, rejected or snoozed this action. less than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_ProposedAction_ExecutedOn" type="string">
  Filter by uTC time the approved action was actually delivered or the outbound call placed. Empty while the action is still queued or deferred. greater than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_ExecutedOn" type="string">
  Filter by uTC time the approved action was actually delivered or the outbound call placed. Empty while the action is still queued or deferred. less than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_ProposedAction_ExpiresOn" type="string">
  Filter by uTC review deadline, defaulting to three days after the action is created. A Pending action past this point is moved to Expired; for a Snoozed action this instead holds the wake time set by the snooze duration. greater than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_ExpiresOn" type="string">
  Filter by uTC review deadline, defaulting to three days after the action is created. A Pending action past this point is moved to Expired; for a Snoozed action this instead holds the wake time set by the snooze duration. less than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_ProposedAction_ScheduledExecutionTime" type="string">
  Filter by uTC time a Deferred action becomes due, set automatically to the recipient's next calling window when approval lands outside permitted outbound hours. greater than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_ScheduledExecutionTime" type="string">
  Filter by uTC time a Deferred action becomes due, set automatically to the recipient's next calling window when approval lands outside permitted outbound hours. less than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_ProposedAction_DeferralCount" type="integer">
  Filter by number of times delivery has been postponed for calling hours. Counts up from zero and helps spot actions that keep missing their window. greater than or equal to this value.
</ParamField>

<ParamField query="to_ProposedAction_DeferralCount" type="integer">
  Filter by number of times delivery has been postponed for calling hours. Counts up from zero and helps spot actions that keep missing their window. less than or equal to this value.
</ParamField>

<ParamField query="from_ProposedAction_CreatedOn" type="string">
  Filter records created on or after this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_CreatedOn" type="string">
  Filter records created on or before this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_ProposedAction_UpdatedOn" type="string">
  Filter records updated on or after this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_ProposedAction_UpdatedOn" type="string">
  Filter records updated on or before this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

## Code Examples

### Simple listing

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/proposedactions?page=1&size=15&orderBy=CriteriaType&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/proposedactions?' + new URLSearchParams({
      page: 1,
      size: 15,
      orderBy: 'CriteriaType',
      dir: 1 // Ascending
    }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/proposedactions',
      params={
          'page': 1,
          'size': 15,
          'orderBy': 'CriteriaType',
          'dir': 0 // Ascending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

### Filtering by CriteriaType

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/proposedactions?ProposedAction_CriteriaType=example-value&orderBy=CriteriaType&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/proposedactions?' + new URLSearchParams({
      ProposedAction_CriteriaType: 'example-value',
      orderBy: 'CriteriaType',
      dir: 1
    }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/proposedactions',
      params={
          'ProposedAction_CriteriaType': 'example-value',
          'orderBy': 'CriteriaType',
          'dir': 0 // Ascending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

### Range filters

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/proposedactions?from_ProposedAction_UpdatedOn=2025-01-01T00:00&to_ProposedAction_UpdatedOn=2025-12-31T23:59&orderBy=UpdatedOn&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/proposedactions?' + new URLSearchParams({
      from_ProposedAction_UpdatedOn: '2025-01-01T00:00',
      to_ProposedAction_UpdatedOn: '2025-12-31T23:59',
      orderBy: 'UpdatedOn',
      dir: 1 // Descending
     }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/proposedactions',
      params={
          'from_ProposedAction_UpdatedOn': '2025-01-01T00:00',
          'to_ProposedAction_UpdatedOn': '2025-12-31T23:59',
          'orderBy': 'UpdatedOn',
          'dir': 1 // Descending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

## Response

### 200

<ResponseField name="Records" type="ProposedAction[]">
  The list of ProposedAction records matching the query. See the [Get one ProposedAction](/rest-api/sys/get-proposedactions-by-id) endpoint for the full list of properties returned for each record.
</ResponseField>

<Warning>
  **Partial records** — The listing endpoint returns a summary representation of each ProposedAction. The following fields are **not populated** in the `Records[]` response: `DraftBody`, `ReviewNotes`, `DeduplicationKey`, `DeferralReason`, `InternalNotes`.

  To get all fields, fetch the full record using the [Get one ProposedAction](/rest-api/sys/get-proposedactions-by-id) endpoint.

  **Important for updates:** When updating a record via `PUT`, always retrieve the full record with a `GET` request first, apply your changes to that complete data, and then send the updated record. Do not use data from a listing response as the base for a `PUT` request, as missing fields may be unintentionally cleared.
</Warning>

<ResponseField name="CurrentPage" type="integer">
  Current page number.
</ResponseField>

<ResponseField name="CurrentPageSize" type="integer">
  Number of records per page.
</ResponseField>

<ResponseField name="CurrentOrderField" type="string">
  The field used for sorting.
</ResponseField>

<ResponseField name="CurrentSortDirection" type="integer">
  The sort direction (`0` = ascending, `1` = descending).
</ResponseField>

<ResponseField name="FirstItem" type="integer">
  Index of the first item on the current page.
</ResponseField>

<ResponseField name="LastItem" type="integer">
  Index of the last item on the current page.
</ResponseField>

<ResponseField name="TotalItems" type="integer">
  Total number of matching records across all pages.
</ResponseField>

<ResponseField name="TotalPages" type="integer">
  Total number of pages.
</ResponseField>

<ResponseField name="HasNextPage" type="boolean">
  Whether there is a next page of results.
</ResponseField>

<ResponseField name="HasPreviousPage" type="boolean">
  Whether there is a previous page of results.
</ResponseField>

```json Example Response theme={null}
{
  "Records": [
    {
      "BusinessId": 0,
      "CoworkerId": null,
      "CoworkerFullName": null,
      "CoworkerEmail": null,
      "CoworkerCoworkerType": null,
      "CoworkerCompanyName": null,
      "CoworkerBillingName": null,
      "AiChannelSessionId": null,
      "CriteriaType": "",
      "CriteriaPayload": null,
      "ActionType": 0,
      "Channel": 0,
      "DraftSubject": null,
      "Confidence": 0,
      "Priority": 0,
      "Status": 0,
      "ReviewedById": null,
      "ReviewedByFullName": null,
      "ReviewedByEmail": null,
      "ReviewedOn": null,
      "ExecutedOn": null,
      "OutcomeSessionId": null,
      "ExpiresOn": null,
      "ScheduledExecutionTime": null,
      "DeferralCount": 0,
      "EmailAccountId": null,
      "EmailAccountDisplayName": null,
      "EmailAccountEmailAddress": null,
      "HelpDeskDepartmentId": null,
      "HelpDeskDepartmentName": null,
      "HelpDeskPriority": 0,
      "Id": 87654321,
      "UpdatedOn": "2025-01-15T10:30:00Z",
      "CreatedOn": "2025-01-10T08:00:00Z",
      "UniqueId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "UpdatedBy": "admin@example.com",
      "IsNew": false,
      "SystemId": null,
      "ToStringText": "ProposedAction Example",
      "LocalizationDetails": null,
      "CustomFields": null
    }
  ],
  "CurrentPageSize": 15,
  "CurrentPage": 1,
  "CurrentOrderField": "CriteriaType",
  "CurrentSortDirection": 1,
  "FirstItem": 1,
  "HasNextPage": false,
  "HasPreviousPage": false,
  "LastItem": 1,
  "PageNumber": 1,
  "PageSize": 15,
  "TotalItems": 1,
  "TotalPages": 1
}
```
