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
}
}

