Portfolio tools

Two reads shaped for large portfolios. portfolio_summary is a single small payload of totals and breakdowns; portfolio_query lists domains but projects only the fields you ask for, so a few thousand domains do not flood the model's context.

portfolio_summary

Summarize the domain portfolio — approval required: no

Return the account domain summary: total counts and breakdowns by status, TLD, and expiry window. Tiny payload — use this before listing individual domains.

When to use it. The cheapest way to answer "how many domains do I have, and what is expiring". Call it before listing individual domains.

Parameter Type Required Description
organizationId string no act on this sub-organization instead of your own, e.g. organization_01h45ytscbebyvny4gc8cr8ma2. It must be a sub-organization of the signed-in account; find its id with the organizations list operation

Unknown parameters are rejected.

  • Read-only: never changes anything in your account.
  • Repeating the same call has the same effect.
  • Calls the OpusDNS API.

Example call.

{}

Example result.

{
  "status": "ok",
  "operationId": "get_domain_summary_v1_domains_summary_get",
  "httpStatus": 200,
  "headers": {
    "content-type": "application/json"
  },
  "data": {
    "organization_id": "organization_01h45ytscbebyvny4gc8cr8ma2",
    "domains": {
      "total_count": 1284,
      "by_status": {
        "ok": 1275,
        "pendingDelete": 9
      },
      "by_tld": {
        "com": 612,
        "de": 388,
        "net": 154,
        "org": 92,
        "io": 38
      },
      "by_organization": {
        "Acme Labs": 1284
      },
      "expiring_soon": {
        "next_30_days": 41,
        "next_60_days": 96,
        "next_90_days": 155
      }
    }
  },
  "truncated": false
}

portfolio_query

Query the domain portfolio — approval required: no

List domains matching a selector, projecting only the requested fields so large portfolios do not flood the context. Returns projected results plus pagination metadata.

When to use it. Use it instead of call_operation on the domains endpoint whenever you only need a few fields per domain. Ask for the narrowest field list that answers the question.

Parameter Type Required Description
fields array of string no which domain fields of the domain record to project (default: name, domain_id, expires_on, renewal_mode, status_tags). Any field of the domain record can be named, so ask for the ones the question needs — e.g. is_premium, transfer_lock, registry_statuses, tags, nameservers, sld, tld, renewal_price, created_on, registered_on. A field the record does not carry is dropped silently rather than reported
organizationId string no act on this sub-organization instead of your own, e.g. organization_01h45ytscbebyvny4gc8cr8ma2. It must be a sub-organization of the signed-in account; find its id with the organizations list operation
page integer no 1-based page number (default 1)
pageSize integer no results per page (capped server-side)
selector object (any keys) no GET /v1/domains filters (tag_ids, tld, search, expires_in_30_days, ...). tag_ids takes tag IDs like tag_01..., NOT labels — resolve a label to its ID via the /v1/tags list operation first. tag_ids, tld and status_tags take lists, e.g. tld: ["com", "org"]

Unknown parameters are rejected.

  • Read-only: never changes anything in your account.
  • Repeating the same call has the same effect.
  • Calls the OpusDNS API.

Example call.

{
  "selector": {
    "tld": [
      "com"
    ],
    "expires_in_30_days": true
  },
  "fields": [
    "name",
    "expires_on",
    "renewal_mode"
  ],
  "pageSize": 3
}

Example result.

{
  "status": "ok",
  "fields": [
    "name",
    "expires_on",
    "renewal_mode"
  ],
  "results": [
    {
      "name": "acme-labs.com",
      "expires_on": "2026-09-03T21:25:00Z",
      "renewal_mode": "expire"
    },
    {
      "name": "acme-shop.com",
      "expires_on": "2026-09-11T08:00:00Z",
      "renewal_mode": "renew"
    },
    {
      "name": "spring-sale-2026.com",
      "expires_on": "2026-09-18T12:30:00Z",
      "renewal_mode": "renew"
    }
  ],
  "pagination": {
    "current_page": 1,
    "page_size": 3,
    "total_items": 41,
    "total_pages": 14,
    "has_next_page": true,
    "has_previous_page": false
  }
}