- A customer rotates the team that sends from a domain (Alex/Sam left, Jordan/Riley take over).
- A customer rebrands and wants different display names on warmup-aged inboxes.
- The user’s names are wrong, or the generated email username needs a clean fix.
Steps in detail
1. Submit the new name list
1. Submit the new name list
POST /swaps/user_names takes the existing domain_id and a personas[] list. The response is a batch of swp_… rows - one per inbox being renamed - each with the same swap.* event lifecycle as a domain swap. The number of rows in the response equals the number of inboxes on the domain (not the number of personas[] entries you sent).cURL
201 Created
2. Profile pictures
2. Profile pictures
Every persona includes the
profile_picture_url key. Use a public URL, null, or "". A private
or local URL triggers swap.action_required with profile_picture_not_accessible. See Best
practices → Pending actions.3. Track each rename
3. Track each rename
Poll A batch can have some rows complete while others stall on profile-picture issues. Resolve those one inbox at a time.
GET /swaps/{id} for any swp_… row, or listen for its swap.* webhooks. Each row moves through:cURL
4. What stays intact
4. What stays intact
- The domain itself - DNS, MX records, Cloudflare zone, registrar.
- Warmup history on each inbox - the inbox’s reputation isn’t reset by the rename.
- The order, the workspace, and the customer’s link to both.
- Display name on outgoing mail.
- The local-part of the inbox address (e.g.
alex@…→jordan@…) only if the rename changes which local-part Peeker generates. Most renames change the display only.
What’s next
How to implement domain swaps
Replace the domain itself, not just the people on it.
Best practices
Pending actions, webhook hygiene, idempotent retries.