Skip to content
Development
Skill

/customers-and-domains

Customer lifecycle (create/edit/delete under the reseller), domain creation with the Pending → Active verification flow and verification_token, domain aliases, moving domains between customers, address discovery, and mail routing via email destinations and email sources.

From plugin
msp-claude-plugins
46200 skills146 agents200 commands4 MCP
Install
$ npx -y skills add wyre-technology/msp-claude-plugins --skill customers-and-domains --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/customers-and-domains

Context preview

The summary Claude sees to decide when to auto-load this skill.

Customer lifecycle (create/edit/delete under the reseller), domain creation with the Pending → Active verification flow and verification_token, domain aliases, moving domains between customers, address discovery, and mail routing via email destinations and email sources.

SKILL.md

customers-and-domains.SKILL.md
name: "Mailprotector Customers & Domains"
description: >
  Customer lifecycle (create/edit/delete under the reseller), domain
  creation with the Pending → Active verification flow and
  verification_token, domain aliases, moving domains between customers,
  address discovery, and mail routing via email destinations and email
  sources.
when_to_use: >-
  When creating or managing Mailprotector customers, domains, domain
  aliases, or mail routing. Use when: mailprotector customer, mailprotector
  domain, domain verification, verification token, domain alias, move
  domain, email destination, email source, mailprotector onboarding.

Mailprotector Customers & Domains

Overview

Customers are the client organizations under the MSP's reseller; domains hang off customers and carry the actual mail routing. Onboarding a client is: create the customer, create the domain, verify it, then point mail flow at it (destinations for inbound delivery, sources for outbound authorization).

Key Concepts

| Concept | Detail | |---------|--------| | Customer | `{id, name, provider, reseller, created_at, updated_at}` — created with just `name` and contact `email` | | Domain status | `domain_status`: `{id: 1, name: "Pending"}` or `{id: 2, name: "Active"}` | | `verification_token` | Returned on domain create while Pending; `null` once Active | | Domain alias | A domain with `parent` set to the primary domain; goes through its own Pending/verification | | `address_discovery_enabled` | Domain flag; auto-discovers addresses from mail flow (defaults on for new domains) | | Email destination | Where filtered inbound mail is delivered — domain, hostname, or IP, with `priority` ordering | | Email source | An IP authorized to relay outbound mail through Mailprotector |

Common Workflows

Customer lifecycle

1. Create: `POST /resellers/{reseller_id}/customers` with `{"name": "...", "email": "contact@..."}` → 201 with the new `id` (tool: `mailprotector_customers_create`). 2. Read: `mailprotector_customers_list` (from the bound reseller) and `mailprotector_customers_get`. 3. Edit: `PUT /customers/{customer_id}` with `name`/`email` (via `mailprotector_execute_tool`). 4. Delete: `DELETE /customers/{customer_id}` — **removes all domains and users under the customer**. Irreversible; confirm explicitly.

Domain creation and verification

1. `POST /customers/{customer_id}/domains` with `{"name": "domain.com"}` (tool: `mailprotector_domains_create`). 2. The response is 201 with `domain_status` **Pending** and a `verification_token`. Mail is **not filtered** for a Pending domain. 3. Surface the `verification_token` to the operator — ownership is proven with it before Mailprotector activates the domain. Re-fetch the domain (`mailprotector_domains_get`) to watch for `domain_status` id 2 (Active) / `verification_token: null`. 4. After activation, add email destinations and sources (below), then repoint MX records.

Domain aliases

`POST /domains/{domain_id}/aliases` with `{"name": "domain-alias.com"}`. The alias appears in `GET /domains/{domain_id}/aliases` with `parent` set to the primary domain and its own Pending status + token. Every user under the primary domain automatically accepts mail at the alias domain (user `email_addresses` extend to each alias), so create aliases before bulk-creating users when you want alias addresses generated.

Moving a domain between customers

`POST /domains/{domain_id}/move` with `{"customer_id": 16998}` — only within the **same reseller**. User groups, users, and rules travel with the domain. Use this to fix a domain created under the wrong customer instead of delete + recreate (which would destroy users).

Mail routing

  • Destinations: `GET`/`POST /domains/{domain_id}/email_destinations`

with `{"address": "mail.domain.com"}` — address may be a domain, hostname, or IP. `priority` is assigned in creation order (0 first); lower priority is tried first.

  • Sources: `GET`/`POST /domains/{domain_id}/email_sources` with

`{"address": "192.0.2.1"}` — the IPs allowed to relay outbound.

  • Both also exist at user-group scope

(`/user_groups/{id}/email_destinations` and `_sources`) for groups that deliver somewhere other than the domain default — the MCP tool takes `scope: domain|user_group`.

Gotchas

  • **Pending domains silently drop the onboarding.** Everything after

domain creation (groups, users, MX cutover) can proceed, but no mail is filtered until the domain is verified. Always report the verification state, and never call an onboarding done while `domain_status` is Pending.

  • **Customer delete cascades.** Domains and users go with it. Prefer

domain move or user-group edits for restructuring.

  • **`PUT /domains/{domain_id}`** is for flags like

`address_discovery_enabled` — you cannot rename a domain; create the correct one and move users.

  • **Customer managers** (`POST /customers/{customer_id}/managers`)

create console logins, but **roles cannot be assigned via the API** — a new manager has an empty `roles` array until someone assigns the role in the console. Listing customer managers excludes reseller-level managers.

  • **Statements** (`GET /resellers/{id}/statements`,

`GET /customers/{id}/statements`) are billing history (`amount`, `currency`, `statement_status`, billing/due dates) — read them for reconciliation, not for provisioning state.

Related Skills

  • [users-and-groups](../users-and-groups/SKILL.md) — the next onboarding step after the domain is Active
  • [api-patterns](../api-patterns/SKILL.md) — hierarchy, auth, and error handling
Read more
Ships withmsp-claude-plugins

One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai

Get the whole plugin

Other skills on msp-claude-plugins.