Skip to content
Back to skills

Users And Groups

ASecurity

User groups as the service container (services get/update with its deactivate-what-you-omit semantics), user CRUD including create_many and find_by_address, user aliases, password resets, and user syncs — LDAP/AD source creation, Entra/Google console-only sources, sync schedules, and comparison-type filters.

  • 48 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 2, 2026
ai-agentsgoapi

Works with

  • api

Security analysis

A100/100

Scanned October 2, 2026

npx -y skills add wyre-technology/msp-claude-plugins --skill users-and-groups --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Users And Groups?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Users And Groups
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wyre-technology-users-and-groups/badge)](https://www.skillsdirectory.com/skills/wyre-technology-users-and-groups)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "Mailprotector Users & Groups"
description: >
  User groups as the service container (services get/update with its
  deactivate-what-you-omit semantics), user CRUD including create_many and
  find_by_address, user aliases, password resets, and user syncs — LDAP/AD
  source creation, Entra/Google console-only sources, sync schedules, and
  comparison-type filters.
when_to_use: >-
  When managing Mailprotector user groups, users, aliases, services, or
  directory syncs. Use when: mailprotector user, user group, create users,
  find by address, user alias, reset password, user sync, AD sync, Entra
  sync, LDAP sync, mailprotector services, provision bracket.
---

# Mailprotector Users & Groups

## Overview

Users live in user groups; user groups live under domains and are the
unit of **service provisioning** — which products (CloudFilter, Bracket,
SafeSend, XtraMail, SecureStore, hosting) a set of users gets. Manual
user CRUD and directory sync are alternative population strategies for
the same groups.

## Key Concepts

| Concept | Detail |
|---------|--------|
| User group | `{id, name, domain, user_count}` — created under a domain with just `name` |
| Services | Per user group; split into one `hosting` option plus any number of `addons` |
| `user_type` | `1` User, `2` Alias, `3` Mailing List, `11` Unlicensed User |
| Primary address | Generated as `<name>@<domain>`; one extra address per domain alias |
| User sync | Domain-level directory import into a `destination_user_group` |
| Sync source types | `UserSync::LdapSource` (API-creatable), `UserSync::GoogleSource` and `UserSync::MicrosoftGraphSource` (Entra/O365 — **console-only**) |

## Common Workflows

### User groups and services

1. Create: `POST /domains/{domain_id}/user_groups` `{"name": "..."}`;
   list with `mailprotector_user_groups_list`.
2. Read services: `GET /user_groups/{user_group_id}/services` → array of
   `{id, service_type, user_group, domain}`.
3. Update services: `PUT /user_groups/{user_group_id}/services` with

   ```json
   {"service_types": {"hosting": "other", "addons": ["bracket", "securestore"]}}
   ```

   One `hosting` value, any number of `addons`. **Any currently active
   service not present in the body is deactivated** — always GET the
   current services, merge, then PUT the full desired set.
4. Rename: `PUT /user_groups/{id}`; delete: `DELETE /user_groups/{id}` —
   **deletes every user in the group**. Move users to another group
   first to preserve them.

### Creating users

- Single: `POST /user_groups/{user_group_id}/users` with
  `{"name": "username", "password": "...", "first_name": "...",
  "last_name": "...", "user_type_id": 1, "aliases": ["alias1"]}`.
  Responds 201 with an **array** containing the created user.
- Bulk: `POST /user_groups/{user_group_id}/users/create_many` with
  `{"users": [ {...}, {...} ]}` — same per-user shape.
- Each user gets `<name>@<domain>` plus one address per domain alias.
- Lookup: `mailprotector_users_list` (filterable, e.g.
  `?first_name=Bob`), `mailprotector_users_get`, and
  `mailprotector_users_find_by_address`
  (`POST /users/find_by_address` `{"address": "someone@domain.com"}`) —
  searching an alias address returns the **root** user.

### Maintaining users

- Update: `PUT /users/{user_id}` — `first_name`, `last_name`, `phone`,
  `user_type_id`.
- Reset password: `POST /users/{user_id}/reset_password`
  `{"password": "..."}` — sets it to the supplied value (high-impact;
  confirm with the operator).
- Delete: `DELETE /users/{user_id}` — irreversible.
- Aliases: `GET /users/{user_id}/aliases`;
  `POST /users/{user_id}/aliases` with the **nested** body
  `{"alias": {"name": "alias-username"}}` (unlike the flat `aliases`
  array on user create). The parent must be `user_type` "User" —
  mailing lists and equipment accounts cannot take aliases. An alias
  address is created for the domain and each domain alias.

### Directory sync (AD / Entra)

1. List: `GET /domains/{domain_id}/user_syncs`; single:
   `GET /user_syncs/{user_sync_id}`.
2. Create (LDAP/AD only):
   `POST /domains/{domain_id}/user_syncs` with
   `destination_user_group_id`, `source_type: "UserSync::LdapSource"`,
   `enabled: "true"`, and
   `source: {host, port, use_ssl, username, password, search_base}`.
   New syncs are **disabled by default** unless `enabled` is passed.
   Google Workspace and Microsoft Graph (Entra ID / Office 365) sources
   must be provisioned in the web console — but once they exist, their
   schedule and filters are managed via the API like any other sync.
3. Schedule (per domain, not per sync):
   `GET`/`PUT /domains/{domain_id}/user_sync_schedule` with
   `{"interval": 30, "enabled": true}` — `interval` is minutes between
   runs; the response carries `last_run_at`/`next_run_at`.
4. Filters: `GET`/`POST /user_syncs/{user_sync_id}/filters` with
   `{"field": "Department", "value": "Accounting", "filter_group":
   "all", "comparison_type_id": 1}`; delete via
   `DELETE /user_sync_filters/{id}`. `filter_group` is `all` (AND) or
   `any` (OR). Comparison types:

   | id | Comparison | id | Comparison |
   |----|------------|----|------------|
   | 1 | Equals | 5 | Contains |
   | 2 | Does not equal | 6 | Does not contain |
   | 3 | Greater than | 7 | Matches |
   | 4 | Less than | 8 | Does not match |

## Gotchas

- **The services PUT is declarative, not additive.** Omitting an active
  addon deactivates it. This is the highest-risk write in this skill —
  read-merge-write, always.
- **Sync health**: `alive: false` on a sync means the source stopped
  answering; check host/credentials before touching filters.
- **`enabled` on sync create is the string `"true"`** in the documented
  body; the update accepts a boolean. Send what the endpoint shows.
- **User create returns an array**, even for a single user — index
  `[0]` for the created record.
- **Deleting a user group deletes its users** — the API will not warn.

## Related Skills

- [customers-and-domains](../customers-and-domains/SKILL.md) — the domain must be Active before users receive mail
- [quarantine-and-messages](../quarantine-and-messages/SKILL.md) — per-user quarantine once users exist

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…