# Thrive (/integrations/thrive)





{/* MANUAL-CONTENT-START:intro */}

Use [Thrive Learning](https://thrivelearning.com/) in Sim to manage learners, audiences, assignments, enrolments, and completion records. Workflows can look up users by ID or ref, manage audience members and managers, and retrieve content and activity data.

{/* MANUAL-CONTENT-END */}

## Use the block [#usage-instructions]

Manage user lifecycle, audiences and their members and managers, content assignments and enrolments, learning completions, content and activity records, CPD, tags, and skills.

## Actions [#actions]

### Thrive Create User [#thrive-create-user]

Create a new user in Thrive.

<ReferenceDetails>
  #### Input [#input]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `ref` | string | Yes | Your organisation's unique identifier for this individual |
  | `firstName` | string | Yes | The given name of the individual |
  | `lastName` | string | Yes | The family name of the individual |
  | `email` | string | No | The email address for the user (required unless loginMethod is 'ref') |
  | `loginMethod` | string | No | How the user logs in: 'email' or 'ref' (defaults to 'email') |
  | `role` | string | No | Role assigned: 'administrator', 'learneradmin', or 'learner' (defaults to 'learner') |
  | `jobTitle` | string | No | Name of this individual's role in your organisation |
  | `managerRef` | string | No | Your organisation's unique identifier for this individual's line manager |
  | `startDate` | string | No | Date this individual started with your organisation (ISO 8601) |
  | `endDate` | string | No | Date this individual left your organisation (ISO 8601) |
  | `timeZone` | string | No | The user's preferred timezone (tenant default if omitted) |
  | `languageCode` | string | No | The user's preferred language (e.g. 'en-gb') |
  | `sso` | boolean | No | Whether the account is managed by an authentication provider |
  | `domain` | string | No | Domain this individual is associated with |
  | `additionalFields` | string | No | JSON object of custom field key-value pairs. Example: \{"department":"Sales"} |

  #### Output [#output]

  | Parameter | Type | Description |
  | - | - | - |
  | `user` | object | The created user |
  | ↳ `id` | string | The user ID |
  | ↳ `loginMethod` | string | How the user logs in |
  | ↳ `ref` | string | Your organisation's unique identifier for the user |
  | ↳ `email` | string | The email address for the user |
  | ↳ `firstName` | string | The given name of the individual |
  | ↳ `lastName` | string | The family name of the individual |
  | ↳ `role` | string | Role assigned to this individual |
  | ↳ `jobTitle` | string | Name of this individual's role |
  | ↳ `managerRef` | string | The line manager's ref |
  | ↳ `startDate` | string | Date started with the organisation |
  | ↳ `endDate` | string | Date left the organisation |
  | ↳ `timeZone` | string | The user's preferred timezone |
  | ↳ `languageCode` | string | The user's preferred language |
  | ↳ `active` | boolean | Whether the account is active or suspended |
  | ↳ `createdAt` | string | Date/time the user was created |
  | ↳ `updatedAt` | string | Date/time the user was last modified |
  | ↳ `sso` | boolean | Whether the account is managed by an auth provider |
  | ↳ `domain` | string | Domain this individual is associated with |
  | ↳ `additionalFields` | json | Custom field values for this user |
</ReferenceDetails>

### Thrive Update User [#thrive-update-user]

Update an existing user in Thrive by ref. Only the fields provided are changed.

<ReferenceDetails>
  #### Input [#input-1]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `ref` | string | Yes | The user ref to update |
  | `firstName` | string | No | The given name of the individual |
  | `lastName` | string | No | The family name of the individual |
  | `email` | string | No | The email address for the user |
  | `loginMethod` | string | No | How the user logs in: 'email' or 'ref' |
  | `role` | string | No | Role assigned: 'administrator', 'learneradmin', or 'learner' |
  | `jobTitle` | string | No | Name of this individual's role in your organisation |
  | `managerRef` | string | No | Your organisation's unique identifier for this individual's line manager |
  | `startDate` | string | No | Date this individual started with your organisation (ISO 8601) |
  | `endDate` | string | No | Date this individual left your organisation (ISO 8601) |
  | `timeZone` | string | No | The user's preferred timezone |
  | `languageCode` | string | No | The user's preferred language (e.g. 'en-gb') |
  | `sso` | boolean | No | Whether the account is managed by an authentication provider |
  | `domain` | string | No | Domain this individual is associated with |
  | `additionalFields` | string | No | JSON object of custom field key-value pairs. Example: \{"department":"Sales"} |

  #### Output [#output-1]

  | Parameter | Type | Description |
  | - | - | - |
  | `user` | object | The updated user |
  | ↳ `id` | string | The user ID |
  | ↳ `loginMethod` | string | How the user logs in |
  | ↳ `ref` | string | Your organisation's unique identifier for the user |
  | ↳ `email` | string | The email address for the user |
  | ↳ `firstName` | string | The given name of the individual |
  | ↳ `lastName` | string | The family name of the individual |
  | ↳ `role` | string | Role assigned to this individual |
  | ↳ `jobTitle` | string | Name of this individual's role |
  | ↳ `managerRef` | string | The line manager's ref |
  | ↳ `startDate` | string | Date started with the organisation |
  | ↳ `endDate` | string | Date left the organisation |
  | ↳ `timeZone` | string | The user's preferred timezone |
  | ↳ `languageCode` | string | The user's preferred language |
  | ↳ `active` | boolean | Whether the account is active or suspended |
  | ↳ `createdAt` | string | Date/time the user was created |
  | ↳ `updatedAt` | string | Date/time the user was last modified |
  | ↳ `sso` | boolean | Whether the account is managed by an auth provider |
  | ↳ `domain` | string | Domain this individual is associated with |
  | ↳ `additionalFields` | json | Custom field values for this user |
</ReferenceDetails>

### Thrive Delete User [#thrive-delete-user]

Permanently delete (obfuscate) a user in Thrive by ref while retaining training history.

<ReferenceDetails>
  #### Input [#input-2]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `ref` | string | Yes | The user ref to delete |

  #### Output [#output-2]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | Whether the user was deleted |
</ReferenceDetails>

### Thrive Suspend User [#thrive-suspend-user]

Suspend a user in Thrive by ref, marking the account inactive.

<ReferenceDetails>
  #### Input [#input-3]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `ref` | string | Yes | The user ref to suspend |
  | `endDate` | string | No | The date this individual left your organisation (ISO 8601) |

  #### Output [#output-3]

  | Parameter | Type | Description |
  | - | - | - |
  | `user` | object | The suspended user |
  | ↳ `id` | string | The user ID |
  | ↳ `loginMethod` | string | How the user logs in |
  | ↳ `ref` | string | Your organisation's unique identifier for the user |
  | ↳ `email` | string | The email address for the user |
  | ↳ `firstName` | string | The given name of the individual |
  | ↳ `lastName` | string | The family name of the individual |
  | ↳ `role` | string | Role assigned to this individual |
  | ↳ `jobTitle` | string | Name of this individual's role |
  | ↳ `managerRef` | string | The line manager's ref |
  | ↳ `startDate` | string | Date started with the organisation |
  | ↳ `endDate` | string | Date left the organisation |
  | ↳ `timeZone` | string | The user's preferred timezone |
  | ↳ `languageCode` | string | The user's preferred language |
  | ↳ `active` | boolean | Whether the account is active or suspended |
  | ↳ `createdAt` | string | Date/time the user was created |
  | ↳ `updatedAt` | string | Date/time the user was last modified |
  | ↳ `sso` | boolean | Whether the account is managed by an auth provider |
  | ↳ `domain` | string | Domain this individual is associated with |
  | ↳ `additionalFields` | json | Custom field values for this user |
</ReferenceDetails>

### Thrive Search Users [#thrive-search-users]

Search users in Thrive and return basic user information with pagination.

<ReferenceDetails>
  #### Input [#input-4]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |
  | `updatedSince` | string | No | Return only users updated on or after this date/time (ISO 8601) |
  | `statuses` | string | No | Comma-separated statuses to include: active, inactive, expired, new |
  | `omitStatuses` | string | No | Comma-separated statuses to exclude: active, inactive, expired, new |
  | `status` | string | No | Filter by a single status: active, inactive, expired, or new |

  #### Output [#output-4]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching users |
  | ↳ `id` | string | The user's ID |
  | ↳ `ref` | string | The user's ref |
  | ↳ `firstName` | string | The user's first name |
  | ↳ `lastName` | string | The user's last name |
  | ↳ `email` | string | The user's email |
  | ↳ `role` | string | The user's role |
  | ↳ `status` | string | The user's status |
  | ↳ `positions` | array | The user's positions |
  | ↳ `id` | string | The user ID |
  | ↳ `manager` | object | Line manager details |
  | ↳ `id` | string | The manager's user ID |
  | ↳ `name` | string | The manager's full name |
  | ↳ `ref` | string | The manager's unique reference |
  | ↳ `ouId` | string | The organisational unit ID |
  | ↳ `isActive` | boolean | Whether the position is active |
  | ↳ `startDate` | string | Start date (ISO 8601) |
  | ↳ `endDate` | string | End date (ISO 8601) |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `additionalFields` | json | Custom field values |
  | ↳ `languageCode` | string | The user's language code |
  | ↳ `deleted` | boolean | Whether the user has been deleted |
  | ↳ `compliance` | number | The user's compliance score |
  | ↳ `level` | number | The user's level |
  | ↳ `firstLogin` | string | First login timestamp (ISO 8601) |
  | ↳ `lastLogin` | string | Last login timestamp (ISO 8601) |
  | ↳ `tags` | json | Tag membership (e.g. skills) |
  | ↳ `usersFollowing` | array | IDs of users this user follows |
  | ↳ `tagsFollowing` | array | Tags this user follows |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `hasPicture` | boolean | Whether the user has a profile picture |
  | ↳ `timeZone` | string | The user's time zone |
  | ↳ `summary` | string | The user's summary |
  | ↳ `relevancy` | number | The user's relevancy score |
  | ↳ `rank` | json | The user's rank details |
  | ↳ `agreedTerms` | boolean | Whether the user agreed to the terms |
  | ↳ `onboarded` | boolean | Whether the user has been onboarded |
  | ↳ `audiences` | array | Audience IDs the user belongs to |
  | ↳ `singleSignOn` | boolean | Whether the user uses single sign-on |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get User by ID [#thrive-get-user-by-id]

Get a single user in Thrive by their ID and return basic user information.

<ReferenceDetails>
  #### Input [#input-5]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `id` | string | Yes | The user ID |

  #### Output [#output-5]

  | Parameter | Type | Description |
  | - | - | - |
  | `user` | object | The user |
  | ↳ `id` | string | The user's ID |
  | ↳ `ref` | string | The user's ref |
  | ↳ `firstName` | string | The user's first name |
  | ↳ `lastName` | string | The user's last name |
  | ↳ `email` | string | The user's email |
  | ↳ `role` | string | The user's role |
  | ↳ `status` | string | The user's status |
  | ↳ `positions` | array | The user's positions |
  | ↳ `id` | string | The user ID |
  | ↳ `manager` | object | Line manager details |
  | ↳ `id` | string | The manager's user ID |
  | ↳ `name` | string | The manager's full name |
  | ↳ `ref` | string | The manager's unique reference |
  | ↳ `ouId` | string | The organisational unit ID |
  | ↳ `isActive` | boolean | Whether the position is active |
  | ↳ `startDate` | string | Start date (ISO 8601) |
  | ↳ `endDate` | string | End date (ISO 8601) |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `additionalFields` | json | Custom field values |
  | ↳ `languageCode` | string | The user's language code |
  | ↳ `deleted` | boolean | Whether the user has been deleted |
  | ↳ `compliance` | number | The user's compliance score |
  | ↳ `level` | number | The user's level |
  | ↳ `firstLogin` | string | First login timestamp (ISO 8601) |
  | ↳ `lastLogin` | string | Last login timestamp (ISO 8601) |
  | ↳ `tags` | json | Tag membership (e.g. skills) |
  | ↳ `usersFollowing` | array | IDs of users this user follows |
  | ↳ `tagsFollowing` | array | Tags this user follows |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `hasPicture` | boolean | Whether the user has a profile picture |
  | ↳ `timeZone` | string | The user's time zone |
  | ↳ `summary` | string | The user's summary |
  | ↳ `relevancy` | number | The user's relevancy score |
  | ↳ `rank` | json | The user's rank details |
  | ↳ `agreedTerms` | boolean | Whether the user agreed to the terms |
  | ↳ `onboarded` | boolean | Whether the user has been onboarded |
  | ↳ `audiences` | array | Audience IDs the user belongs to |
  | ↳ `singleSignOn` | boolean | Whether the user uses single sign-on |
</ReferenceDetails>

### Thrive Get User by Ref [#thrive-get-user-by-ref]

Get a single user in Thrive by their ref and return basic user information.

<ReferenceDetails>
  #### Input [#input-6]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `ref` | string | Yes | The user ref |

  #### Output [#output-6]

  | Parameter | Type | Description |
  | - | - | - |
  | `user` | object | The user (basic information) |
  | ↳ `id` | string | The user's ID |
  | ↳ `ref` | string | The user's ref |
  | ↳ `firstName` | string | The user's first name |
  | ↳ `lastName` | string | The user's last name |
  | ↳ `email` | string | The user's email |
  | ↳ `role` | string | The user's role |
  | ↳ `status` | string | The user's status |
  | ↳ `positions` | array | The user's positions |
  | ↳ `id` | string | The user ID |
  | ↳ `manager` | object | Line manager details |
  | ↳ `id` | string | The manager's user ID |
  | ↳ `name` | string | The manager's full name |
  | ↳ `ref` | string | The manager's unique reference |
  | ↳ `ouId` | string | The organisational unit ID |
  | ↳ `isActive` | boolean | Whether the position is active |
  | ↳ `startDate` | string | Start date (ISO 8601) |
  | ↳ `endDate` | string | End date (ISO 8601) |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `additionalFields` | json | Custom field values |
  | ↳ `languageCode` | string | The user's language code |
</ReferenceDetails>

### Thrive List Audiences [#thrive-list-audiences]

List audiences and structures in Thrive with pagination.

<ReferenceDetails>
  #### Input [#input-7]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `apiControlled` | boolean | No | Filter to only return audiences which are / are not API controlled |
  | `updatedSince` | string | No | Return only audiences updated on or after this date/time (ISO 8601) |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |

  #### Output [#output-7]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching audiences |
  | ↳ `id` | string | The id of the audience |
  | ↳ `name` | string | The name of the audience |
  | ↳ `reference` | string | The external reference for the audience |
  | ↳ `apiControlled` | boolean | Whether the audience is API controlled |
  | ↳ `category` | string | Either "audience" or "structure" |
  | ↳ `type` | string | Either "manual" or "smart" |
  | ↳ `parent` | object | Parent audience/structure information |
  | ↳ `name` | string | The name of the parent audience |
  | ↳ `reference` | string | The external reference for the parent |
  | ↳ `id` | string | The id of the parent audience/structure |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Create Audience [#thrive-create-audience]

Create a new audience or structure in Thrive.

<ReferenceDetails>
  #### Input [#input-8]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `name` | string | No | The name of the audience (max 100 characters) |
  | `reference` | string | No | The external reference for the audience (max 100 characters) |
  | `parentId` | string | No | The id or reference of the parent audience/structure; leave blank for a parent audience/structure |
  | `category` | string | No | The audience category: 'audience' or 'structure' |

  #### Output [#output-8]

  | Parameter | Type | Description |
  | - | - | - |
  | `audience` | object | The created audience |
  | ↳ `id` | string | The id of the audience |
  | ↳ `name` | string | The name of the audience |
  | ↳ `reference` | string | The external reference for the audience |
  | ↳ `apiControlled` | boolean | Whether the audience is API controlled |
  | ↳ `category` | string | Either "audience" or "structure" |
  | ↳ `type` | string | Either "manual" or "smart" |
  | ↳ `parent` | object | Parent audience/structure information |
  | ↳ `name` | string | The name of the parent audience |
  | ↳ `reference` | string | The external reference for the parent |
  | ↳ `id` | string | The id of the parent audience/structure |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Get Audience [#thrive-get-audience]

Get a single audience or structure in Thrive by id or reference.

<ReferenceDetails>
  #### Input [#input-9]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |

  #### Output [#output-9]

  | Parameter | Type | Description |
  | - | - | - |
  | `audience` | object | The audience |
  | ↳ `id` | string | The id of the audience |
  | ↳ `name` | string | The name of the audience |
  | ↳ `reference` | string | The external reference for the audience |
  | ↳ `apiControlled` | boolean | Whether the audience is API controlled |
  | ↳ `category` | string | Either "audience" or "structure" |
  | ↳ `type` | string | Either "manual" or "smart" |
  | ↳ `parent` | object | Parent audience/structure information |
  | ↳ `name` | string | The name of the parent audience |
  | ↳ `reference` | string | The external reference for the parent |
  | ↳ `id` | string | The id of the parent audience/structure |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Update Audience [#thrive-update-audience]

Update an audience in Thrive, optionally moving it to a new parent.

<ReferenceDetails>
  #### Input [#input-10]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `name` | string | No | The name of the audience (max 100 characters) |
  | `reference` | string | No | The external reference for the audience (max 100 characters) |
  | `parentId` | string | No | The id of the parent audience/structure to move the audience to |

  #### Output [#output-10]

  | Parameter | Type | Description |
  | - | - | - |
  | `audience` | object | The updated audience |
  | ↳ `id` | string | The id of the audience |
  | ↳ `name` | string | The name of the audience |
  | ↳ `reference` | string | The external reference for the audience |
  | ↳ `apiControlled` | boolean | Whether the audience is API controlled |
  | ↳ `category` | string | Either "audience" or "structure" |
  | ↳ `type` | string | Either "manual" or "smart" |
  | ↳ `parent` | object | Parent audience/structure information |
  | ↳ `name` | string | The name of the parent audience |
  | ↳ `reference` | string | The external reference for the parent |
  | ↳ `id` | string | The id of the parent audience/structure |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Delete Audience [#thrive-delete-audience]

Delete an audience in Thrive (only if it has no child audiences).

<ReferenceDetails>
  #### Input [#input-11]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |

  #### Output [#output-11]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | Whether the audience was deleted |
</ReferenceDetails>

### Thrive List Audience Members [#thrive-list-audience-members]

List the members of a Thrive audience with pagination.

<ReferenceDetails>
  #### Input [#input-12]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |

  #### Output [#output-12]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The audience members |
  | ↳ `userId` | string | The user's id |
  | ↳ `reference` | string | The user's reference |
  | ↳ `email` | string | The user's email |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Add Audience Members [#thrive-add-audience-members]

Add members to a Thrive audience by email, ref, or id.

<ReferenceDetails>
  #### Input [#input-13]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `users` | string | Yes | JSON array of user emails/refs/ids to add (1-100). Example: \["[user@example.com](mailto:user@example.com)"] |

  #### Output [#output-13]

  | Parameter | Type | Description |
  | - | - | - |
  | `result` | object | The add/replace result, with successfully and unsuccessfully processed entities |
  | ↳ `success` | object | Successfully processed entities |
  | ↳ `count` | number | Number of successfully processed entities |
  | ↳ `entities` | array | The successfully processed entities |
  | ↳ `reference` | string | The entity reference |
  | ↳ `failure` | object | Unsuccessfully processed entities |
  | ↳ `count` | number | Number of unsuccessfully processed entities |
  | ↳ `entities` | array | The unsuccessfully processed entities |
  | ↳ `reason` | string | The reason for the failure |
  | ↳ `reference` | string | The entity reference |
</ReferenceDetails>

### Thrive Replace Audience Members [#thrive-replace-audience-members]

Replace a Thrive audience's entire members list with the given users (does not support an empty array).

<ReferenceDetails>
  #### Input [#input-14]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `users` | string | Yes | JSON array of user emails/refs/ids that replaces the whole members list (1-100, no empty array). Example: \["[user@example.com](mailto:user@example.com)"] |

  #### Output [#output-14]

  | Parameter | Type | Description |
  | - | - | - |
  | `result` | object | The add/replace result, with successfully and unsuccessfully processed entities |
  | ↳ `success` | object | Successfully processed entities |
  | ↳ `count` | number | Number of successfully processed entities |
  | ↳ `entities` | array | The successfully processed entities |
  | ↳ `reference` | string | The entity reference |
  | ↳ `failure` | object | Unsuccessfully processed entities |
  | ↳ `count` | number | Number of unsuccessfully processed entities |
  | ↳ `entities` | array | The unsuccessfully processed entities |
  | ↳ `reason` | string | The reason for the failure |
  | ↳ `reference` | string | The entity reference |
</ReferenceDetails>

### Thrive Remove Audience Member [#thrive-remove-audience-member]

Remove a single member from a Thrive audience.

<ReferenceDetails>
  #### Input [#input-15]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `userRef` | string | Yes | The user email, ref, or id to remove |

  #### Output [#output-15]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | Whether the audience member was removed |
</ReferenceDetails>

### Thrive List Audience Managers [#thrive-list-audience-managers]

List the managers of a Thrive audience.

<ReferenceDetails>
  #### Input [#input-16]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |

  #### Output [#output-16]

  | Parameter | Type | Description |
  | - | - | - |
  | `managers` | array | The audience managers |
  | ↳ `userId` | string | The user's id |
  | ↳ `reference` | string | The user's reference |
  | ↳ `email` | string | The user's email |
  | ↳ `permissions` | object | The manager permissions |
  | ↳ `audienceManager` | json | Audience manager permissions |
  | ↳ `peopleManager` | json | People manager permissions |
  | ↳ `administrator` | json | Administrator permissions (structures only) |
</ReferenceDetails>

### Thrive Add Audience Managers [#thrive-add-audience-managers]

Add managers to a Thrive audience with their permissions.

<ReferenceDetails>
  #### Input [#input-17]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `managers` | string | Yes | JSON array of manager objects (1-100). Each: \{"reference":"[user@example.com](mailto:user@example.com)","permissions":\{"audienceManager":\{"manageContent":true,"assignments":true},"peopleManager":\{"canViewLearnPage":true,"insights":false,"manage":false},"administrator":\{"canAddAudienceManagers":false}}} |

  #### Output [#output-17]

  | Parameter | Type | Description |
  | - | - | - |
  | `result` | object | The add/replace result, with successfully and unsuccessfully processed entities |
  | ↳ `success` | object | Successfully processed entities |
  | ↳ `count` | number | Number of successfully processed entities |
  | ↳ `entities` | array | The successfully processed entities |
  | ↳ `reference` | string | The entity reference |
  | ↳ `failure` | object | Unsuccessfully processed entities |
  | ↳ `count` | number | Number of unsuccessfully processed entities |
  | ↳ `entities` | array | The unsuccessfully processed entities |
  | ↳ `reason` | string | The reason for the failure |
  | ↳ `reference` | string | The entity reference |
</ReferenceDetails>

### Thrive Replace Audience Managers [#thrive-replace-audience-managers]

Replace a Thrive audience's entire manager list with the given managers (does not support an empty array).

<ReferenceDetails>
  #### Input [#input-18]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `managers` | string | Yes | JSON array of manager objects that replaces the whole manager list (1-100, no empty array). Each: \{"reference":"[user@example.com](mailto:user@example.com)","permissions":\{"audienceManager":\{"manageContent":true,"assignments":true},"peopleManager":\{"canViewLearnPage":true,"insights":false,"manage":false},"administrator":\{"canAddAudienceManagers":false}}} |

  #### Output [#output-18]

  | Parameter | Type | Description |
  | - | - | - |
  | `result` | object | The add/replace result, with successfully and unsuccessfully processed entities |
  | ↳ `success` | object | Successfully processed entities |
  | ↳ `count` | number | Number of successfully processed entities |
  | ↳ `entities` | array | The successfully processed entities |
  | ↳ `reference` | string | The entity reference |
  | ↳ `failure` | object | Unsuccessfully processed entities |
  | ↳ `count` | number | Number of unsuccessfully processed entities |
  | ↳ `entities` | array | The unsuccessfully processed entities |
  | ↳ `reason` | string | The reason for the failure |
  | ↳ `reference` | string | The entity reference |
</ReferenceDetails>

### Thrive Remove Audience Manager [#thrive-remove-audience-manager]

Remove a single manager from a Thrive audience.

<ReferenceDetails>
  #### Input [#input-19]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience id or audience reference |
  | `userId` | string | Yes | The user email, ref, or id to remove as a manager |

  #### Output [#output-19]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | Whether the audience manager was removed |
</ReferenceDetails>

### Thrive List Assignments [#thrive-list-assignments]

List compliance assignments in Thrive, optionally filtered by audience.

<ReferenceDetails>
  #### Input [#input-20]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | No | Filter by audience ID or audience reference |
  | `updatedSince` | string | No | Return only items updated on or after this date/time (ISO 8601) |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-100, default 100) |

  #### Output [#output-20]

  | Parameter | Type | Description |
  | - | - | - |
  | `assignments` | array | The matching assignments |
  | ↳ `id` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The content ID for the primary content |
  | ↳ `alternativeContentIds` | array | Content IDs that can also complete the assignment |
  | ↳ `hideAlternativeContent` | boolean | Whether to hide the alternative content |
  | ↳ `completionPeriod` | number | Number of days required to complete the assignment |
  | ↳ `recurrence` | number | Number of days until the assignment reoccurs |
  | ↳ `isActive` | boolean | Whether the assignment is active |
  | ↳ `isDeleted` | boolean | Whether the assignment is deleted |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `deletedAt` | string | Deletion timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Create Assignment [#thrive-create-assignment]

Create a compliance assignment in Thrive for an audience and content item.

<ReferenceDetails>
  #### Input [#input-21]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceId` | string | Yes | The audience ID |
  | `contentId` | string | Yes | The content ID for the primary content |
  | `alternativeContentIds` | string | No | JSON array of content IDs that can also complete the assignment |
  | `hideAlternativeContent` | boolean | No | Whether to hide the alternative content |
  | `completionPeriod` | number | No | The number of days required to complete the assignment (default 30) |
  | `recurrence` | number | No | The number of days until the assignment will reoccur |

  #### Output [#output-21]

  | Parameter | Type | Description |
  | - | - | - |
  | `assignment` | object | The created assignment |
  | ↳ `id` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The content ID for the primary content |
  | ↳ `alternativeContentIds` | array | Content IDs that can also complete the assignment |
  | ↳ `hideAlternativeContent` | boolean | Whether to hide the alternative content |
  | ↳ `completionPeriod` | number | Number of days required to complete the assignment |
  | ↳ `recurrence` | number | Number of days until the assignment reoccurs |
  | ↳ `isActive` | boolean | Whether the assignment is active |
  | ↳ `isDeleted` | boolean | Whether the assignment is deleted |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `deletedAt` | string | Deletion timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Get Assignment [#thrive-get-assignment]

Get a single compliance assignment in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-22]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `assignmentId` | string | Yes | The assignment ID |

  #### Output [#output-22]

  | Parameter | Type | Description |
  | - | - | - |
  | `assignment` | object | The assignment |
  | ↳ `id` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The content ID for the primary content |
  | ↳ `alternativeContentIds` | array | Content IDs that can also complete the assignment |
  | ↳ `hideAlternativeContent` | boolean | Whether to hide the alternative content |
  | ↳ `completionPeriod` | number | Number of days required to complete the assignment |
  | ↳ `recurrence` | number | Number of days until the assignment reoccurs |
  | ↳ `isActive` | boolean | Whether the assignment is active |
  | ↳ `isDeleted` | boolean | Whether the assignment is deleted |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `deletedAt` | string | Deletion timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Update Assignment [#thrive-update-assignment]

Update a compliance assignment in Thrive.

<ReferenceDetails>
  #### Input [#input-23]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `assignmentId` | string | Yes | The assignment ID |
  | `audienceId` | string | Yes | The audience ID |
  | `contentId` | string | No | The content ID for the primary content |
  | `completionPeriod` | number | No | The number of days required to complete the assignment |
  | `recurrence` | number | No | The number of days until the assignment will reoccur |
  | `alternativeContentIds` | string | No | JSON array of content IDs that can also complete the assignment |

  #### Output [#output-23]

  | Parameter | Type | Description |
  | - | - | - |
  | `assignment` | object | The updated assignment |
  | ↳ `id` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The content ID for the primary content |
  | ↳ `alternativeContentIds` | array | Content IDs that can also complete the assignment |
  | ↳ `hideAlternativeContent` | boolean | Whether to hide the alternative content |
  | ↳ `completionPeriod` | number | Number of days required to complete the assignment |
  | ↳ `recurrence` | number | Number of days until the assignment reoccurs |
  | ↳ `isActive` | boolean | Whether the assignment is active |
  | ↳ `isDeleted` | boolean | Whether the assignment is deleted |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `deletedAt` | string | Deletion timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Delete Assignment [#thrive-delete-assignment]

Delete a compliance assignment in Thrive.

<ReferenceDetails>
  #### Input [#input-24]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `assignmentId` | string | Yes | The assignment ID |
  | `audienceId` | string | Yes | The audience ID |

  #### Output [#output-24]

  | Parameter | Type | Description |
  | - | - | - |
  | `success` | boolean | Whether the assignment was deleted |
</ReferenceDetails>

### Thrive List Enrolments [#thrive-list-enrolments]

List enrolments for a compliance assignment in Thrive.

<ReferenceDetails>
  #### Input [#input-25]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `assignmentId` | string | Yes | The assignment ID |
  | `updatedAtFrom` | string | No | Start date to filter enrolments from (ISO 8601) |
  | `updatedAtTo` | string | No | Date to filter enrolments up to (ISO 8601). Requires updatedAtFrom. |
  | `status` | string | No | Filter by enrolment status: archived, complete, open, overdue, scheduled, or unassigned |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-100, default 100) |

  #### Output [#output-25]

  | Parameter | Type | Description |
  | - | - | - |
  | `enrolments` | array | The matching enrolments |
  | ↳ `id` | string | The enrolment ID |
  | ↳ `userId` | string | The assignee user ID |
  | ↳ `assignmentId` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The assigned content ID |
  | ↳ `status` | string | Enrolment status |
  | ↳ `availableDate` | string | Date a scheduled enrolment becomes open |
  | ↳ `dueDate` | string | Date after which a scheduled enrolment is overdue |
  | ↳ `lastCompletedAt` | string | Date a scheduled enrolment was last completed |
  | ↳ `history` | array | Event-log history entries |
  | ↳ `type` | string | The type of the logged event |
  | ↳ `completionId` | string | The completion ID |
  | ↳ `previousStatus` | string | The previous enrolment status |
  | ↳ `nextStatus` | string | The next enrolment status |
  | ↳ `createdAt` | string | Date the event was logged |
  | ↳ `updatedAt` | string | Date the event was last modified |
  | ↳ `updatedAt` | string | Date the enrolment was last updated |
</ReferenceDetails>

### Thrive Get Enrolment [#thrive-get-enrolment]

Get a single enrolment for a compliance assignment in Thrive.

<ReferenceDetails>
  #### Input [#input-26]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `assignmentId` | string | Yes | The assignment ID |
  | `enrolmentId` | string | Yes | The enrolment ID |

  #### Output [#output-26]

  | Parameter | Type | Description |
  | - | - | - |
  | `enrolment` | object | The enrolment |
  | ↳ `id` | string | The enrolment ID |
  | ↳ `userId` | string | The assignee user ID |
  | ↳ `assignmentId` | string | The assignment ID |
  | ↳ `audienceId` | string | The audience ID |
  | ↳ `primaryContentId` | string | The assigned content ID |
  | ↳ `status` | string | Enrolment status |
  | ↳ `availableDate` | string | Date a scheduled enrolment becomes open |
  | ↳ `dueDate` | string | Date after which a scheduled enrolment is overdue |
  | ↳ `lastCompletedAt` | string | Date a scheduled enrolment was last completed |
  | ↳ `history` | array | Event-log history entries |
  | ↳ `type` | string | The type of the logged event |
  | ↳ `completionId` | string | The completion ID |
  | ↳ `previousStatus` | string | The previous enrolment status |
  | ↳ `nextStatus` | string | The next enrolment status |
  | ↳ `createdAt` | string | Date the event was logged |
  | ↳ `updatedAt` | string | Date the event was last modified |
  | ↳ `updatedAt` | string | Date the enrolment was last updated |
</ReferenceDetails>

### Thrive List Completions [#thrive-list-completions]

List learning completion records in Thrive, optionally filtered by user or content.

<ReferenceDetails>
  #### Input [#input-27]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `contentId` | string | No | Filter by content |
  | `isRPL` | boolean | No | Filter by completions imported via Recognition of Prior Learning (RPL) |
  | `userId` | string | No | Filter by user |
  | `completedDateRangeStart` | string | No | Filter by completedDate (completedDate >= this date/date-time) |
  | `completedDateRangeEnd` | string | No | Filter by completedDate (completedDate \<= this date/date-time) |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 1000) |

  #### Output [#output-27]

  | Parameter | Type | Description |
  | - | - | - |
  | `completions` | array | The matching completion records |
  | ↳ `id` | string | The completion ID |
  | ↳ `userId` | string | The user ID |
  | ↳ `contentId` | string | The content ID for the content completed |
  | ↳ `contentVersion` | number | The version of the content |
  | ↳ `skills` | array | The skills acquired by completing this content |
  | ↳ `completionType` | string | The type of completion record |
  | ↳ `hadDueDate` | boolean | Whether the completion had a due date |
  | ↳ `isRPL` | boolean | Whether the completion was imported via RPL |
  | ↳ `completedAt` | string | Timestamp when the completion occurred (ISO 8601) |
  | ↳ `activeUntil` | string | Timestamp the completion is valid until (ISO 8601) |
</ReferenceDetails>

### Thrive Get Completion [#thrive-get-completion]

Get a single learning completion record in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-28]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `id` | string | Yes | The completion ID |

  #### Output [#output-28]

  | Parameter | Type | Description |
  | - | - | - |
  | `completion` | object | The completion record |
  | ↳ `id` | string | The completion ID |
  | ↳ `userId` | string | The user ID |
  | ↳ `contentId` | string | The content ID for the content completed |
  | ↳ `contentVersion` | number | The version of the content |
  | ↳ `skills` | array | The skills acquired by completing this content |
  | ↳ `completionType` | string | The type of completion record |
  | ↳ `hadDueDate` | boolean | Whether the completion had a due date |
  | ↳ `isRPL` | boolean | Whether the completion was imported via RPL |
  | ↳ `completedAt` | string | Timestamp when the completion occurred (ISO 8601) |
  | ↳ `activeUntil` | string | Timestamp the completion is valid until (ISO 8601) |
</ReferenceDetails>

### Thrive Create Completion [#thrive-create-completion]

Record a learning completion in Thrive for a user and content item.

<ReferenceDetails>
  #### Input [#input-29]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `userId` | string | Yes | The user ID |
  | `contentId` | string | Yes | The content ID for the content completed |
  | `completedAt` | string | Yes | ISO8601 timestamp when the completion occurred |

  #### Output [#output-29]

  | Parameter | Type | Description |
  | - | - | - |
  | `statementId` | string | The completion statement ID |
</ReferenceDetails>

### Thrive Get Content [#thrive-get-content]

Get a single content record in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-30]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `id` | string | Yes | Unique identifier of the content item |

  #### Output [#output-30]

  | Parameter | Type | Description |
  | - | - | - |
  | `content` | object | The content record |
  | ↳ `id` | string | Unique identifier for the content |
  | ↳ `title` | string | Title of the content |
  | ↳ `description` | string | Detailed description (may contain HTML) |
  | ↳ `tags` | array | Tags associated with this content |
  | ↳ `type` | string | The kind of artifact associated with this content |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `author` | string | User ID who authored the content |
  | ↳ `isOfficial` | boolean | Whether the content is recognised as official |
  | ↳ `duration` | object | Expected time to complete the content |
  | ↳ `value` | number | Duration value |
  | ↳ `unit` | string | The unit of the duration (always 'minutes') |
  | ↳ `contentHistory` | array | Chronological history of actions on this content |
  | ↳ `action` | string | Type of change or event recorded |
  | ↳ `timestamp` | string | When the action occurred (ISO 8601) |
  | ↳ `performedBy` | object | The actor that performed the action |
  | ↳ `type` | string | Kind of actor (e.g. user or system) |
  | ↳ `value` | string | Identifier or value of the actor |
</ReferenceDetails>

### Thrive Query Content [#thrive-query-content]

Query content records in Thrive with pagination and filtering options.

<ReferenceDetails>
  #### Input [#input-31]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 20) |
  | `types` | string | No | Comma-separated content types (article, assessment, broadcast, cmi5, elearning, event, file, pathway, question, quiz, scorm, url, video, mixed). If both set, omitTypes is ignored. |
  | `omitTypes` | string | No | Comma-separated content types (article, assessment, broadcast, cmi5, elearning, event, file, pathway, question, quiz, scorm, url, video, mixed). If both set, omitTypes is ignored. |
  | `updatedSince` | string | No | Return only items updated on or after this date/time (ISO 8601) |

  #### Output [#output-31]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching content records |
  | ↳ `id` | string | Unique identifier for the content |
  | ↳ `title` | string | Title of the content |
  | ↳ `description` | string | Detailed description (may contain HTML) |
  | ↳ `tags` | array | Tags associated with this content |
  | ↳ `type` | string | The kind of artifact associated with this content |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | ↳ `author` | string | User ID who authored the content |
  | ↳ `isOfficial` | boolean | Whether the content is recognised as official |
  | ↳ `duration` | object | Expected time to complete the content |
  | ↳ `value` | number | Duration value |
  | ↳ `unit` | string | The unit of the duration (always 'minutes') |
  | ↳ `contentHistory` | array | Chronological history of actions on this content |
  | ↳ `action` | string | Type of change or event recorded |
  | ↳ `timestamp` | string | When the action occurred (ISO 8601) |
  | ↳ `performedBy` | object | The actor that performed the action |
  | ↳ `type` | string | Kind of actor (e.g. user or system) |
  | ↳ `value` | string | Identifier or value of the actor |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get Activity [#thrive-get-activity]

Get a single activity record in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-32]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `id` | string | Yes | Unique identifier of the activity |

  #### Output [#output-32]

  | Parameter | Type | Description |
  | - | - | - |
  | `activity` | object | The activity record |
  | ↳ `type` | string | The activity action type |
  | ↳ `name` | string | The name of the activity |
  | ↳ `id` | string | Unique ID for this activity record |
  | ↳ `user` | string | User ID who triggered the activity |
  | ↳ `date` | string | Timestamp when the activity occurred (ISO 8601) |
  | ↳ `contextId` | string | Identifier for the context item |
  | ↳ `contextType` | string | What this activity was in relation to |
  | ↳ `data` | json | Unstructured activity data; shape varies by type |
  | ↳ `with` | json | Additional context information |
</ReferenceDetails>

### Thrive Query Activities [#thrive-query-activities]

Query activity records in Thrive with pagination and filtering options.

<ReferenceDetails>
  #### Input [#input-33]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 20) |
  | `actions` | string | No | comma-separated activity types e.g. viewed,completed |
  | `omitActions` | string | No | comma-separated activity types e.g. viewed,completed |
  | `contentIds` | string | No | comma-separated content IDs |
  | `contentType` | string | No | Filter by content type |
  | `timestampFrom` | string | No | format YYYY-MM-DD hh:mm:ss |
  | `timestampTo` | string | No | format YYYY-MM-DD hh:mm:ss |

  #### Output [#output-33]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching activity records |
  | ↳ `type` | string | The activity action type |
  | ↳ `name` | string | The name of the activity |
  | ↳ `id` | string | Unique ID for this activity record |
  | ↳ `user` | string | User ID who triggered the activity |
  | ↳ `date` | string | Timestamp when the activity occurred (ISO 8601) |
  | ↳ `contextId` | string | Identifier for the context item |
  | ↳ `contextType` | string | What this activity was in relation to |
  | ↳ `data` | json | Unstructured activity data; shape varies by type |
  | ↳ `with` | json | Additional context information |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get CPD Category [#thrive-get-cpd-category]

Get a single CPD category in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-34]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `categoryId` | string | Yes | The CPD category ID |

  #### Output [#output-34]

  | Parameter | Type | Description |
  | - | - | - |
  | `category` | object | The CPD category |
  | ↳ `categoryId` | string | Unique ID for this category record |
  | ↳ `name` | string | Name of the category of CPD activity |
</ReferenceDetails>

### Thrive Query CPD Categories [#thrive-query-cpd-categories]

Query CPD categories in Thrive and return results with pagination.

<ReferenceDetails>
  #### Input [#input-35]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |
  | `updatedSince` | string | No | Return only items updated on or after this date/time (ISO 8601) |

  #### Output [#output-35]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching CPD categories |
  | ↳ `categoryId` | string | Unique ID for this category record |
  | ↳ `name` | string | Name of the category of CPD activity |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get CPD Entry [#thrive-get-cpd-entry]

Get a single CPD log entry in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-36]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `logEntryId` | string | Yes | The CPD log entry ID |

  #### Output [#output-36]

  | Parameter | Type | Description |
  | - | - | - |
  | `entry` | object | The CPD entry |
  | ↳ `logEntryId` | string | Unique ID for this activity record |
  | ↳ `userId` | string | User ID who triggered this activity record |
  | ↳ `activity` | object | The content item associated with the CPD log entry |
  | ↳ `type` | string | The type of content (e.g. file, article, video) |
  | ↳ `name` | string | The name of the content item |
  | ↳ `category` | object | The CPD category |
  | ↳ `categoryId` | string | Unique ID for this category record |
  | ↳ `name` | string | Name of the category of CPD activity |
  | ↳ `entryDate` | string | The date and time the CPD entry was logged (ISO 8601) |
  | ↳ `durationMinutes` | number | Minutes logged as CPD from this activity |
  | ↳ `description` | string | Summary or reflective statement |
  | ↳ `isVerified` | boolean | Whether the activity was generated from verified system activity |
</ReferenceDetails>

### Thrive Query CPD Entries [#thrive-query-cpd-entries]

Query CPD log entries in Thrive and return results with pagination.

<ReferenceDetails>
  #### Input [#input-37]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |
  | `entryDateFrom` | string | No | Filter entries after this date (format YYYY-MM-DD hh:mm:ss) |
  | `entryDateTo` | string | No | Filter entries before this date (format YYYY-MM-DD hh:mm:ss) |

  #### Output [#output-37]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching CPD entries |
  | ↳ `logEntryId` | string | Unique ID for this activity record |
  | ↳ `userId` | string | User ID who triggered this activity record |
  | ↳ `activity` | object | The content item associated with the CPD log entry |
  | ↳ `type` | string | The type of content (e.g. file, article, video) |
  | ↳ `name` | string | The name of the content item |
  | ↳ `category` | object | The CPD category |
  | ↳ `categoryId` | string | Unique ID for this category record |
  | ↳ `name` | string | Name of the category of CPD activity |
  | ↳ `entryDate` | string | The date and time the CPD entry was logged (ISO 8601) |
  | ↳ `durationMinutes` | number | Minutes logged as CPD from this activity |
  | ↳ `description` | string | Summary or reflective statement |
  | ↳ `isVerified` | boolean | Whether the activity was generated from verified system activity |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get CPD Requirement [#thrive-get-cpd-requirement]

Get a single CPD requirement summary in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-38]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `audienceRequirementId` | string | Yes | The CPD requirement ID |

  #### Output [#output-38]

  | Parameter | Type | Description |
  | - | - | - |
  | `requirement` | object | The CPD requirement |
  | ↳ `audienceRequirementId` | string | Unique ID for this requirement record |
  | ↳ `audienceId` | string | ID of the audience this requirement applies to |
  | ↳ `requiredMinutes` | number | Number of minutes required for CPD completion |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
</ReferenceDetails>

### Thrive Query CPD Requirements [#thrive-query-cpd-requirements]

Query CPD requirement summaries in Thrive and return results with pagination.

<ReferenceDetails>
  #### Input [#input-39]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |
  | `updatedSince` | string | No | Return only items updated on or after this date/time (ISO 8601) |

  #### Output [#output-39]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching CPD requirements |
  | ↳ `audienceRequirementId` | string | Unique ID for this requirement record |
  | ↳ `audienceId` | string | ID of the audience this requirement applies to |
  | ↳ `requiredMinutes` | number | Number of minutes required for CPD completion |
  | ↳ `createdAt` | string | Creation timestamp (ISO 8601) |
  | ↳ `updatedAt` | string | Last-update timestamp (ISO 8601) |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Query CPD User Summaries [#thrive-query-cpd-user-summaries]

Query CPD user log summaries in Thrive and return results with pagination.

<ReferenceDetails>
  #### Input [#input-40]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `entryDateFrom` | string | Yes | Filter entries after this date (format YYYY-MM-DDThh:mm:ss) |
  | `entryDateTo` | string | Yes | Filter entries before this date (format YYYY-MM-DDThh:mm:ss) |
  | `userIds` | string | No | Comma-separated user IDs to filter by |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |

  #### Output [#output-40]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The matching CPD user summaries |
  | ↳ `userId` | string | ID of the user this summary is for |
  | ↳ `durationMinutes` | number | Total CPD minutes logged by the user in the period |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive List Tags [#thrive-list-tags]

List tags in Thrive and return tag information with pagination.

<ReferenceDetails>
  #### Input [#input-41]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `page` | number | No | Page number for pagination (default 1) |
  | `perPage` | number | No | Number of results per page (1-1000, default 100) |
  | `updatedSince` | string | No | Return only tags updated on or after this date/time (ISO 8601) |

  #### Output [#output-41]

  | Parameter | Type | Description |
  | - | - | - |
  | `results` | array | The tags |
  | ↳ `tag` | string | The name of the tag |
  | ↳ `id` | string | The ID of the tag |
  | ↳ `contents` | array | IDs of contents using this tag |
  | ↳ `campaigns` | array | IDs of campaigns using this tag |
  | ↳ `interests` | array | IDs of users interested in this tag |
  | ↳ `skills` | array | IDs of users skilled in this tag |
  | `pagination` | object | Pagination details |
  | ↳ `totalResults` | number | Total number of results matching the query |
  | ↳ `totalPages` | number | Total number of pages available |
  | ↳ `page` | number | Current page number |
  | ↳ `perPage` | number | Number of results per page |
</ReferenceDetails>

### Thrive Get Tag [#thrive-get-tag]

Get a single tag in Thrive by its ID.

<ReferenceDetails>
  #### Input [#input-42]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `tagId` | string | Yes | The tag ID |

  #### Output [#output-42]

  | Parameter | Type | Description |
  | - | - | - |
  | `tag` | object | The tag |
  | ↳ `tag` | string | The name of the tag |
  | ↳ `id` | string | The ID of the tag |
  | ↳ `contents` | array | IDs of contents using this tag |
  | ↳ `campaigns` | array | IDs of campaigns using this tag |
  | ↳ `interests` | array | IDs of users interested in this tag |
  | ↳ `skills` | array | IDs of users skilled in this tag |
</ReferenceDetails>

### Thrive Add User Tags [#thrive-add-user-tags]

Add one or more tags to a learner in Thrive.

<ReferenceDetails>
  #### Input [#input-43]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `userId` | string | Yes | The learner ID |
  | `tags` | string | Yes | JSON array of tag names to add (1-100). Example: \["leadership"] |

  #### Output [#output-43]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | The HTTP status code of the operation |
  | `message` | string | A human-readable result message |
</ReferenceDetails>

### Thrive Remove User Tags [#thrive-remove-user-tags]

Remove one or more tags from a learner in Thrive.

<ReferenceDetails>
  #### Input [#input-44]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `userId` | string | Yes | The learner ID |
  | `tags` | string | Yes | JSON array of tag names to remove (1-100). Example: \["leadership"] |

  #### Output [#output-44]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | The HTTP status code of the operation |
  | `message` | string | A human-readable result message |
</ReferenceDetails>

### Thrive Update User Skills [#thrive-update-user-skills]

Update skills and levels for a learner in Thrive.

<ReferenceDetails>
  #### Input [#input-45]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |
  | `userId` | string | Yes | The learner ID |
  | `skills` | string | Yes | JSON array of skill objects (1-100). Each: \{"tagName":"leadership","level":1,"targetLevel":3}. level/targetLevel optional (min -1). |

  #### Output [#output-45]

  | Parameter | Type | Description |
  | - | - | - |
  | `status` | number | The HTTP status code of the operation |
  | `message` | string | A human-readable result message |
</ReferenceDetails>

### Thrive Get Skill Levels [#thrive-get-skill-levels]

Get the available skill levels configured in Thrive.

<ReferenceDetails>
  #### Input [#input-46]

  | Parameter | Type | Required | Description |
  | - | - | - | - |
  | `tenantId` | string | Yes | Thrive Tenant ID (used as the Basic auth username) |
  | `apiKey` | string | Yes | Thrive API key (used as the Basic auth password) |
  | `host` | string | No | Region-specific API host |

  #### Output [#output-46]

  | Parameter | Type | Description |
  | - | - | - |
  | `levels` | array | The available skill levels |
  | ↳ `name` | string | The name of the skill level |
  | ↳ `isEnabled` | boolean | Whether the skill level is enabled |
  | ↳ `value` | number | The numeric value of the skill level |
</ReferenceDetails>
