URL: /mcp/tools/registration

---
title: Registration tools
description: Register and renew domains, read the org balance, and poll pending confirmations.
---

These tools spend money. Every state-changing call routes through the agent confirmation pipeline — when the action exceeds the user's threshold or registers ≥5 domains in one call, the response is `status: "pending_confirmation"` with a token and `approve_url`.

The user must approve out-of-band. Call again with the same `request_id` after approval to execute.

## `register_domains`

Register one or more domains for the org.

Required scope: `domains:write`.

<ParamField path="org_oid" type="string" required />
<ParamField path="domains" type="string[]" required>List of domain names.</ParamField>
<ParamField path="years" type="integer" default="1">1–10.</ParamField>
<ParamField path="request_id" type="string">Client idempotency key. Same id replays the original ActionLog row instead of registering twice.</ParamField>
<ParamField path="intent" type="string">Free-text rationale; logged as a hash for audit.</ParamField>
<ParamField path="funding" type="string" default="balance">`balance` debits the prepaid org balance (auto-tops-up if configured); `card` charges the saved default card directly.</ParamField>

<ResponseField name="status" type="string">`completed`, `pending_confirmation`, `duplicate`, `failed`, `requires_action` (3DS).</ResponseField>
<ResponseField name="confirmation" type="object">Present when `pending_confirmation`: `oid`, `token`, `expires_at`, `amount_cents`, `approve_url`.</ResponseField>
<ResponseField name="result" type="object">Per-domain outcome on success.</ResponseField>
<ResponseField name="error" type="string">Present on `failed`.</ResponseField>

## `renew_domain`

Renew one domain.

Required scope: `domains:write`.

<ParamField path="org_oid" type="string" required />
<ParamField path="domain" type="string" required />
<ParamField path="years" type="integer" default="1">1–10.</ParamField>
<ParamField path="request_id" type="string" />
<ParamField path="intent" type="string" />

Same response shape as `register_domains`. Only `balance` funding is supported.

## `get_balance`

Required scope: `orgs:read`.

<ParamField path="org_oid" type="string" required />

<ResponseField name="balance_cents" type="integer" />
<ResponseField name="balance_aud" type="number" />
<ResponseField name="auto_topup_enabled" type="boolean" />
<ResponseField name="auto_topup_threshold_cents" type="integer" />
<ResponseField name="auto_topup_amount_cents" type="integer" />
<ResponseField name="default_payment_method_id" type="string" />

## `list_my_confirmations`

The caller's pending confirmations. Use after a `pending_confirmation` response to poll for status, or to surface a list of "things waiting on you" to the user.

Required scope: `orgs:read`.

<ResponseField name="oid" type="string" />
<ResponseField name="token" type="string" />
<ResponseField name="action" type="string" />
<ResponseField name="amount_cents" type="integer" />
<ResponseField name="expires_at" type="string" />
<ResponseField name="approve_url" type="string" />
