Pre-launchTallrig is being built in the open and is not yet open for production customers. General availability: late 2026 – 2027.
Tallrig
Colour theme
Sign inRequest access
Guide

Move your domain portfolio

Bring every domain you own across in one move: a free dry run shows what is ready and what it costs, then you confirm under a spend cap you set. From the dashboard, the CLI, an AI agent over MCP, or the API.

1
Connect the registrar you are leaving, or paste your list

In the dashboard, open Domains, then Move, and connect your current registrar with a least-privilege API key (the page shows the exact steps for each registrar). Or skip the connection and paste your domains. A key is stored encrypted and you can erase it at any time; no tool, CLI command or API response ever returns a key or a transfer code.

2
Plan the move

Planning records your domain list and nothing else: no money moves and nothing is lodged. From the CLI that is domains move plan, over MCP tallrig_portfolio_plan, over the API portfolio.plan. You get back a move id.

3
Run the free dry run

domains move dry-run, tallrig_portfolio_dry_run or portfolio.dryRun checks every domain: ready, blocked (with the exact fix, such as turning off DNSSEC) or cannot-tell. It returns a quote for each domain and the move total in US cents. Nothing is lodged, unlocked or charged, so run it as often as you like.

4
Confirm under a spend cap

Confirming spends money, so a spend cap is mandatory: the move is refused if its quote is over your cap, and a call without a cap is refused outright. domains move confirm --max-spend 50 takes US dollars; tallrig_portfolio_confirm and portfolio.confirm take maxSpendCents. The whole batch is reserved up front. A batch over the shared registrar spend ceiling waits for an administrator instead of failing.

5
Watch it, fix what is blocked, retry

domains move status --watch, tallrig_portfolio_status or portfolio.get shows each domain's live state. Where a domain needs you, the status carries the exact action. After you fix it, domains move retry, tallrig_portfolio_retry or portfolio.retryItem resumes that one domain. A cancelled move stops anything not yet lodged; transfers already lodged continue at the registry.

6
Nameservers only move when DNS is proven identical

Your DNS records are copied first and compared with what your current provider serves. A nameserver change is made only for domains you opt in, and only when that comparison shows no difference. If it cannot be proven, the domain is left alone.

CLIbash
# 1. plan: from a connected registrar, a file (one "domain [code]" per line), or the domains themselves
tallrig domains move plan --connection rcn_123
tallrig domains move plan example.com example.org

# 2. dry run: free. Exit code 1 means some domains are blocked.
tallrig domains move dry-run mv_123

# 3. confirm: SPENDS MONEY. --max-spend is US dollars and is required.
tallrig domains move confirm mv_123 --max-spend 50.00 --contact-file contact.json

# 4. watch until it settles (add --json for scripts; exit 0 ok, 1 partial failure, 2 usage error)
tallrig domains move status mv_123 --watch

# fix what blocked a domain, then retry; a new transfer code is read from stdin, never an argument
tallrig domains move retry mv_123 example.com
tallrig domains move cancel mv_123
MCP (AI agents)json
// POST https://api.tallrig.com/api/mcp/platform/call   Authorization: Bearer <your API key>
// Discovery: GET https://api.tallrig.com/api/mcp/platform
// Tools: tallrig_portfolio_connectors, _plan, _dry_run, _confirm, _status, _retry, _cancel

{ "name": "tallrig_portfolio_plan",
  "arguments": { "domains": [{ "domain": "example.com" }, { "domain": "example.org" }] } }

{ "name": "tallrig_portfolio_dry_run", "arguments": { "moveId": "mv_123" } }

// Preview the confirm for free: nothing is reserved or charged.
{ "name": "tallrig_portfolio_confirm",
  "arguments": { "moveId": "mv_123", "maxSpendCents": 5000, "dryRun": true } }

// Confirming spends money; maxSpendCents is required and is a hard cap.
{ "name": "tallrig_portfolio_confirm",
  "arguments": { "moveId": "mv_123", "maxSpendCents": 5000,
                 "contactInfo": { "firstName": "Ada", "lastName": "Lovelace", "address1": "1 Main St",
                                  "city": "Chicago", "state": "IL", "country": "US",
                                  "postalCode": "60601", "phone": "+13125550100", "email": "ada@example.com" } } }

{ "name": "tallrig_portfolio_status", "arguments": { "moveId": "mv_123" } }
APIbash
# Every procedure is on the tRPC endpoint with your API key as the Bearer token.
KEY=your-api-key
API=https://api.tallrig.com/api/trpc

curl -s -X POST $API/portfolio.plan -H "authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"source":"pasted","domains":[{"domain":"example.com"}]}'

curl -s -X POST $API/portfolio.dryRun -H "authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"moveId":"mv_123"}'

# Spends money. maxSpendCents is required.
curl -s -X POST $API/portfolio.confirm -H "authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"moveId":"mv_123","maxSpendCents":5000,"contactInfo":{"firstName":"Ada","lastName":"Lovelace","address1":"1 Main St","city":"Chicago","state":"IL","country":"US","postalCode":"60601","phone":"+13125550100","email":"ada@example.com"}}'

curl -s -G $API/portfolio.get -H "authorization: Bearer $KEY" --data-urlencode 'input={"moveId":"mv_123"}'

# Also: portfolio.connectors, portfolio.listConnections, portfolio.list, portfolio.retryItem,
# portfolio.cancel, portfolio.receipt
← All guides

Ready to build?

Signups are invite-only right now — request access and we'll follow up.

Request accessRead the docs