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 to project (default: name, domain_id, expires_on, renewal_mode, status_tags)
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
  }
}