Skip to main content
GET

Authentication

Requires X-Agent-ID header with your wallet address. Free read endpoint — no x402 payment required.

Response

string
The caller’s wallet (echoed).
array
Every non-removed domain the caller owns. Ordered by created_at ascending (oldest first), matching how agents typically think about their pool (“first I bought…”).

Each domain

string
The bare domain — oneshotagents.com, cina-lolucci.soulhunt.ai, etc.
string
The canonical sending address for this domain (e.g. [email protected]) — the default mailbox used when you don’t pick a specific one. It’s a real mailbox like any other: the first send from it incurs the one-time mailbox_provisioning_fee (it’s in addresses[] as active afterward, then free). To use it, pass it as from_address on /email/quote and /email/send. (Omitting from_address does not default to it on an explicit send — it triggers domain rotation at quote time, and on /email/send returns 400 missing_from_address unless replaying a rotation quote or a threaded reply.)
object[]
The mailboxes already provisioned on this domain. You can send from any address on a domain you own; whether sending from a new one provisions a per-address mailbox (and bills a one-time mailbox_provisioning_fee) depends on the domain. Some domains provision + warm a real mailbox per address; relay/send-only domains send from any address without one. Don’t infer pricing from an empty addresses[] — always read mailbox_provisioning_fee on the /email/quote response (0 = nothing extra billed). Each entry:
string
Rotation eligibility only. One of:
  • active — eligible for rotation.
  • paused — out of rotation. See pause_reason for why and whether it self-heals.
  • removed — never returned by this endpoint.
(The legacy warming value is deprecated — warmup lifecycle now lives in warmup_state.)
string
Reputation health, orthogonal to rotation. A domain can be paused and warming at the same time. One of:
  • warming — building reputation, not yet graduated.
  • warmed — reputation >= WARMUP_ACTIVE_THRESHOLD (default 75); healthy.
  • degraded — reputation fell < MIN_ROTATION_SCORE (default 60) after the warmup grace period.
string | null
Why the domain is out of rotation (null when active):
  • warming — not yet graduated to rotation.
  • low_reputation — auto-demoted by the reconciler. Self-heals: returns to active automatically once warmup_state is warmed again. No manual resume needed.
  • manual — paused via /domains/:domain/pause. Stays paused until you resume it; the reconciler will not auto-recover it.
string
Underlying provisioning state — unprovisioned, provisioning, verified, or blocked. Distinct from pool_status: a verified row can still be out of rotation if warmup_state hasn’t reached warmed.
integer | null
Latest reputation warmup score (0-100). Refreshed daily by the reconciler; null until the first poll lands. Drives warmup_state (warmed at >= WARMUP_ACTIVE_THRESHOLD, degraded at < MIN_ROTATION_SCORE), which in turn drives rotation auto-recovery.
string | null
When warmup_score was last refreshed by the reconciler (ISO 8601), or null before the first poll.
string | null
When the domain was enrolled in warmup (ISO 8601). null for domains that predate the warmup integration and haven’t been backfilled.
integer
Per-domain per-UTC-day cap consumed by the rotation selector. Defaults to 50; freshly-enrolled domains start at WARMUP_DAY1_LIMIT (default 20) and ramp via the lifecycle reconciler.
integer
Count of recipient-units sent today (resets when daily_sent_date rolls over). Incremented by both rotation picks and pinned sends (explicit from_address), so it reflects total usage — but only rotation is gated by daily_send_limit; pinned sends count yet aren’t blocked.
string | null
UTC date the current daily_sent_count belongs to.
string | null
When this domain was last picked by rotation (drives LRU ordering).

Notes

  • This is a read-only inventory. To pause / resume rotation on a domain, see pause and resume.
  • Soul-owned domains (set via domains.soul_agent_id) are NOT returned here — this endpoint scopes by agent_id only.
  • Use this before a high-volume send burst to confirm there’s enough capacity left in the pool today. If sum(daily_send_limit - daily_sent_count) across active rows is below your batch size, consider buying another domain or waiting for the UTC rollover.