@opusdns/api 1.12.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/openapi.yaml CHANGED
@@ -2125,6 +2125,16 @@ components:
2125
2125
  type: object
2126
2126
  CreateReportReq:
2127
2127
  properties:
2128
+ registrar_credential_id:
2129
+ anyOf:
2130
+ - examples:
2131
+ - registrar_credential_01h45ytscbebyvny4gc8cr8ma2
2132
+ format: typeid
2133
+ pattern: ^registrar_credential_[0-7][0-9a-hjkmnpq-tv-z]{25}$
2134
+ type: string
2135
+ x-typeid-prefix: registrar_credential
2136
+ - type: 'null'
2137
+ title: Registrar Credential Id
2128
2138
  report_type:
2129
2139
  $ref: '#/components/schemas/ReportType'
2130
2140
  default: domain_inventory
@@ -6436,6 +6446,113 @@ components:
6436
6446
  - licensee
6437
6447
  title: HolderEntitlement
6438
6448
  type: string
6449
+ HostCreate:
6450
+ properties:
6451
+ hostname:
6452
+ description: Hostname of the host object
6453
+ examples:
6454
+ - ns1.example.com
6455
+ title: Hostname
6456
+ type: string
6457
+ ip_addresses:
6458
+ description: List of IP addresses for the host object
6459
+ examples:
6460
+ - - 192.0.2.53
6461
+ - 2001:db8::53
6462
+ items:
6463
+ format: ipvanyaddress
6464
+ type: string
6465
+ minItems: 1
6466
+ title: Ip Addresses
6467
+ type: array
6468
+ required:
6469
+ - hostname
6470
+ - ip_addresses
6471
+ title: HostCreate
6472
+ type: object
6473
+ HostIpSchema:
6474
+ properties:
6475
+ address:
6476
+ description: IP address of the host object
6477
+ format: ipvanyaddress
6478
+ title: Address
6479
+ type: string
6480
+ created_on:
6481
+ description: The date/time the entry was created on
6482
+ format: date-time
6483
+ title: Created On
6484
+ type: string
6485
+ host_id:
6486
+ default: None
6487
+ examples:
6488
+ - host_01h45ytscbebyvny4gc8cr8ma2
6489
+ format: typeid
6490
+ pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
6491
+ title: Host Id
6492
+ type: string
6493
+ x-typeid-prefix: host
6494
+ host_ip_id:
6495
+ examples:
6496
+ - host_ip_01h45ytscbebyvny4gc8cr8ma2
6497
+ format: typeid
6498
+ pattern: ^host_ip_[0-7][0-9a-hjkmnpq-tv-z]{25}$
6499
+ title: Host Ip Id
6500
+ type: string
6501
+ x-typeid-prefix: host_ip
6502
+ type:
6503
+ $ref: '#/components/schemas/IPAddressType'
6504
+ description: IP address type
6505
+ updated_on:
6506
+ description: The date/time the entry was last updated on
6507
+ format: date-time
6508
+ title: Updated On
6509
+ type: string
6510
+ required:
6511
+ - address
6512
+ - type
6513
+ title: HostIpSchema
6514
+ type: object
6515
+ HostResponse:
6516
+ properties:
6517
+ created_on:
6518
+ description: Timestamp when the host was created
6519
+ format: date-time
6520
+ title: Created On
6521
+ type: string
6522
+ host_id:
6523
+ description: Unique identifier of the host object
6524
+ examples:
6525
+ - host_01h45ytscbebyvny4gc8cr8ma2
6526
+ format: typeid
6527
+ pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
6528
+ title: Host Id
6529
+ type: string
6530
+ x-typeid-prefix: host
6531
+ hostname:
6532
+ description: Hostname of the host object
6533
+ examples:
6534
+ - ns1.example.com
6535
+ title: Hostname
6536
+ type: string
6537
+ ip_addresses:
6538
+ description: The ip addresses of the Host Object
6539
+ items:
6540
+ format: ipvanyaddress
6541
+ type: string
6542
+ title: Ip Addresses
6543
+ type: array
6544
+ updated_on:
6545
+ description: Timestamp when the host was last updated
6546
+ format: date-time
6547
+ title: Updated On
6548
+ type: string
6549
+ required:
6550
+ - host_id
6551
+ - hostname
6552
+ - created_on
6553
+ - updated_on
6554
+ title: HostResponse
6555
+ type: object
6439
6556
  HostSchema:
6440
6557
  properties:
6441
6558
  created_on:
@@ -6498,6 +6615,23 @@ components:
6498
6615
  - pending_delete
6499
6616
  title: HostStatus
6500
6617
  type: string
6618
+ HostUpdate:
6619
+ properties:
6620
+ ip_addresses:
6621
+ description: List of IP addresses for the host object
6622
+ examples:
6623
+ - - 192.0.2.53
6624
+ - 2001:db8::53
6625
+ items:
6626
+ format: ipvanyaddress
6627
+ type: string
6628
+ minItems: 1
6629
+ title: Ip Addresses
6630
+ type: array
6631
+ required:
6632
+ - ip_addresses
6633
+ title: HostUpdate
6634
+ type: object
6501
6635
  HttpProtocol:
6502
6636
  enum:
6503
6637
  - http
@@ -6622,6 +6756,12 @@ components:
6622
6756
  - request_hostname
6623
6757
  title: HttpRedirectUpsert
6624
6758
  type: object
6759
+ IPAddressType:
6760
+ enum:
6761
+ - v4
6762
+ - v6
6763
+ title: IPAddressType
6764
+ type: string
6625
6765
  IdnBase:
6626
6766
  properties:
6627
6767
  idn_capable:
@@ -9989,6 +10129,7 @@ components:
9989
10129
  - domain_forwards
9990
10130
  - expiring_domains
9991
10131
  - email_forwards
10132
+ - registrar_portfolio_pdf
9992
10133
  - billing_transactions
9993
10134
  - billing_transactions_monthly
9994
10135
  title: ReportType
@@ -12001,7 +12142,7 @@ info:
12001
12142
  \n\n"
12002
12143
  summary: OpusDNS - your gateway to a seamless domain management experience.
12003
12144
  title: OpusDNS API
12004
- version: 2026-06-11-173831
12145
+ version: 2026-06-12-181220
12005
12146
  x-logo:
12006
12147
  altText: OpusDNS API Reference
12007
12148
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -21938,6 +22079,346 @@ paths:
21938
22079
  - event
21939
22080
  x-required-permissions:
21940
22081
  - events:manage
22082
+ /v1/hosts:
22083
+ post:
22084
+ description: Create a new host object
22085
+ operationId: create_host_v1_hosts_post
22086
+ requestBody:
22087
+ content:
22088
+ application/json:
22089
+ schema:
22090
+ $ref: '#/components/schemas/HostCreate'
22091
+ required: true
22092
+ responses:
22093
+ '201':
22094
+ content:
22095
+ application/json:
22096
+ schema:
22097
+ $ref: '#/components/schemas/HostResponse'
22098
+ description: Successful Response
22099
+ '401':
22100
+ content:
22101
+ application/problem+json:
22102
+ example:
22103
+ code: ERROR_AUTHENTICATION
22104
+ detail: Additional error context.
22105
+ status: 401
22106
+ title: Authentication Error
22107
+ type: authentication
22108
+ schema:
22109
+ $ref: '#/components/schemas/Problem'
22110
+ description: Unauthorized
22111
+ '403':
22112
+ content:
22113
+ application/problem+json:
22114
+ example:
22115
+ code: ERROR_PERMISSION_DENIED
22116
+ detail: Additional error context.
22117
+ status: 403
22118
+ title: Permission Denied
22119
+ type: permission-denied
22120
+ schema:
22121
+ $ref: '#/components/schemas/Problem'
22122
+ description: Forbidden
22123
+ '404':
22124
+ content:
22125
+ application/problem+json:
22126
+ example:
22127
+ code: ERROR_PARENT_DOMAIN_NOT_FOUND
22128
+ detail: Parent domain not found for host 'Additional error context.'
22129
+ hostname: Additional error context.
22130
+ parent_domain: ''
22131
+ status: 404
22132
+ title: Host Management Error
22133
+ type: parent-domain-not-found
22134
+ schema:
22135
+ $ref: '#/components/schemas/Problem'
22136
+ description: Not Found
22137
+ '409':
22138
+ content:
22139
+ application/problem+json:
22140
+ example:
22141
+ code: ERROR_HOST_ALREADY_EXISTS
22142
+ detail: Host already exists
22143
+ hostname: Additional error context.
22144
+ status: 409
22145
+ title: Host Management Error
22146
+ type: host-already-exists
22147
+ schema:
22148
+ $ref: '#/components/schemas/Problem'
22149
+ description: Conflict
22150
+ '422':
22151
+ content:
22152
+ application/problem+json:
22153
+ example:
22154
+ code: ERROR_HOST_OBJECTS_NOT_SUPPORTED
22155
+ detail: Host objects are not supported for this tld
22156
+ status: 422
22157
+ title: Host Management Error
22158
+ tld: Additional error context.
22159
+ type: host-object-not-supported
22160
+ schema:
22161
+ $ref: '#/components/schemas/Problem'
22162
+ description: Unprocessable Content
22163
+ security:
22164
+ - OAuth2PasswordBearer: []
22165
+ - APIKeyHeader: []
22166
+ summary: Create a Host Object
22167
+ tags:
22168
+ - host
22169
+ x-required-permissions:
22170
+ - hosts:manage
22171
+ /v1/hosts/{host_reference}:
22172
+ delete:
22173
+ description: Deletes a host object; only possible if the host is not in use
22174
+ operationId: delete_host_v1_hosts__host_reference__delete
22175
+ parameters:
22176
+ - in: path
22177
+ name: host_reference
22178
+ required: true
22179
+ schema:
22180
+ anyOf:
22181
+ - examples:
22182
+ - host_01h45ytscbebyvny4gc8cr8ma2
22183
+ format: typeid
22184
+ pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
22185
+ type: string
22186
+ x-typeid-prefix: host
22187
+ - type: string
22188
+ title: Host Reference
22189
+ responses:
22190
+ '204':
22191
+ description: Successful Response
22192
+ '401':
22193
+ content:
22194
+ application/problem+json:
22195
+ example:
22196
+ code: ERROR_AUTHENTICATION
22197
+ detail: Additional error context.
22198
+ status: 401
22199
+ title: Authentication Error
22200
+ type: authentication
22201
+ schema:
22202
+ $ref: '#/components/schemas/Problem'
22203
+ description: Unauthorized
22204
+ '403':
22205
+ content:
22206
+ application/problem+json:
22207
+ example:
22208
+ code: ERROR_PERMISSION_DENIED
22209
+ detail: Additional error context.
22210
+ status: 403
22211
+ title: Permission Denied
22212
+ type: permission-denied
22213
+ schema:
22214
+ $ref: '#/components/schemas/Problem'
22215
+ description: Forbidden
22216
+ '404':
22217
+ content:
22218
+ application/problem+json:
22219
+ examples:
22220
+ Host Management Error:
22221
+ value:
22222
+ code: ERROR_PARENT_DOMAIN_NOT_FOUND
22223
+ detail: Parent domain not found for host 'Additional error context.'
22224
+ hostname: Additional error context.
22225
+ parent_domain: ''
22226
+ status: 404
22227
+ title: Host Management Error
22228
+ type: parent-domain-not-found
22229
+ schema:
22230
+ $ref: '#/components/schemas/Problem'
22231
+ description: Not Found
22232
+ '409':
22233
+ content:
22234
+ application/problem+json:
22235
+ example:
22236
+ code: ERROR_HOST_IN_USE
22237
+ detail: Host is linked to one or more domains
22238
+ host_reference: Additional error context.
22239
+ status: 409
22240
+ title: Host Management Error
22241
+ type: host-in-use
22242
+ schema:
22243
+ $ref: '#/components/schemas/Problem'
22244
+ description: Conflict
22245
+ '422':
22246
+ content:
22247
+ application/problem+json:
22248
+ schema:
22249
+ $ref: '#/components/schemas/HTTPValidationError'
22250
+ description: Validation Error
22251
+ security:
22252
+ - OAuth2PasswordBearer: []
22253
+ - APIKeyHeader: []
22254
+ summary: Delete a Host Object
22255
+ tags:
22256
+ - host
22257
+ x-required-permissions:
22258
+ - hosts:delete
22259
+ get:
22260
+ description: Retrieves a host object by either its ID or hostname
22261
+ operationId: get_host_v1_hosts__host_reference__get
22262
+ parameters:
22263
+ - in: path
22264
+ name: host_reference
22265
+ required: true
22266
+ schema:
22267
+ anyOf:
22268
+ - examples:
22269
+ - host_01h45ytscbebyvny4gc8cr8ma2
22270
+ format: typeid
22271
+ pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
22272
+ type: string
22273
+ x-typeid-prefix: host
22274
+ - type: string
22275
+ title: Host Reference
22276
+ responses:
22277
+ '200':
22278
+ content:
22279
+ application/json:
22280
+ schema:
22281
+ $ref: '#/components/schemas/HostResponse'
22282
+ description: Successful Response
22283
+ '401':
22284
+ content:
22285
+ application/problem+json:
22286
+ example:
22287
+ code: ERROR_AUTHENTICATION
22288
+ detail: Additional error context.
22289
+ status: 401
22290
+ title: Authentication Error
22291
+ type: authentication
22292
+ schema:
22293
+ $ref: '#/components/schemas/Problem'
22294
+ description: Unauthorized
22295
+ '403':
22296
+ content:
22297
+ application/problem+json:
22298
+ example:
22299
+ code: ERROR_PERMISSION_DENIED
22300
+ detail: Additional error context.
22301
+ status: 403
22302
+ title: Permission Denied
22303
+ type: permission-denied
22304
+ schema:
22305
+ $ref: '#/components/schemas/Problem'
22306
+ description: Forbidden
22307
+ '404':
22308
+ content:
22309
+ application/problem+json:
22310
+ examples:
22311
+ Host Management Error:
22312
+ value:
22313
+ code: ERROR_PARENT_DOMAIN_NOT_FOUND
22314
+ detail: Parent domain not found for host 'Additional error context.'
22315
+ hostname: Additional error context.
22316
+ parent_domain: ''
22317
+ status: 404
22318
+ title: Host Management Error
22319
+ type: parent-domain-not-found
22320
+ schema:
22321
+ $ref: '#/components/schemas/Problem'
22322
+ description: Not Found
22323
+ '422':
22324
+ content:
22325
+ application/problem+json:
22326
+ schema:
22327
+ $ref: '#/components/schemas/HTTPValidationError'
22328
+ description: Validation Error
22329
+ security:
22330
+ - OAuth2PasswordBearer: []
22331
+ - APIKeyHeader: []
22332
+ summary: Retrieve a Host Object
22333
+ tags:
22334
+ - host
22335
+ x-required-permissions:
22336
+ - hosts:read
22337
+ put:
22338
+ description: Updates the IP addresses of a host object, referenced by either
22339
+ its ID or hostname
22340
+ operationId: update_host_v1_hosts__host_reference__put
22341
+ parameters:
22342
+ - in: path
22343
+ name: host_reference
22344
+ required: true
22345
+ schema:
22346
+ anyOf:
22347
+ - examples:
22348
+ - host_01h45ytscbebyvny4gc8cr8ma2
22349
+ format: typeid
22350
+ pattern: ^host_[0-7][0-9a-hjkmnpq-tv-z]{25}$
22351
+ type: string
22352
+ x-typeid-prefix: host
22353
+ - type: string
22354
+ title: Host Reference
22355
+ requestBody:
22356
+ content:
22357
+ application/json:
22358
+ schema:
22359
+ $ref: '#/components/schemas/HostUpdate'
22360
+ required: true
22361
+ responses:
22362
+ '200':
22363
+ content:
22364
+ application/json:
22365
+ schema:
22366
+ $ref: '#/components/schemas/HostResponse'
22367
+ description: Successful Response
22368
+ '401':
22369
+ content:
22370
+ application/problem+json:
22371
+ example:
22372
+ code: ERROR_AUTHENTICATION
22373
+ detail: Additional error context.
22374
+ status: 401
22375
+ title: Authentication Error
22376
+ type: authentication
22377
+ schema:
22378
+ $ref: '#/components/schemas/Problem'
22379
+ description: Unauthorized
22380
+ '403':
22381
+ content:
22382
+ application/problem+json:
22383
+ example:
22384
+ code: ERROR_PERMISSION_DENIED
22385
+ detail: Additional error context.
22386
+ status: 403
22387
+ title: Permission Denied
22388
+ type: permission-denied
22389
+ schema:
22390
+ $ref: '#/components/schemas/Problem'
22391
+ description: Forbidden
22392
+ '404':
22393
+ content:
22394
+ application/problem+json:
22395
+ examples:
22396
+ Host Management Error:
22397
+ value:
22398
+ code: ERROR_PARENT_DOMAIN_NOT_FOUND
22399
+ detail: Parent domain not found for host 'Additional error context.'
22400
+ hostname: Additional error context.
22401
+ parent_domain: ''
22402
+ status: 404
22403
+ title: Host Management Error
22404
+ type: parent-domain-not-found
22405
+ schema:
22406
+ $ref: '#/components/schemas/Problem'
22407
+ description: Not Found
22408
+ '422':
22409
+ content:
22410
+ application/problem+json:
22411
+ schema:
22412
+ $ref: '#/components/schemas/HTTPValidationError'
22413
+ description: Validation Error
22414
+ security:
22415
+ - OAuth2PasswordBearer: []
22416
+ - APIKeyHeader: []
22417
+ summary: Update a Host Object
22418
+ tags:
22419
+ - host
22420
+ x-required-permissions:
22421
+ - hosts:manage
21941
22422
  /v1/job/{job_id}:
21942
22423
  delete:
21943
22424
  operationId: delete_job_v1_job__job_id__delete
@@ -26546,6 +27027,31 @@ tags:
26546
27027
  '
26547
27028
  name: domain_search
26548
27029
  x-displayName: Domain search
27030
+ - description: "Endpoints for managing host objects (nameserver glue records).\n\n\
27031
+ ### What is a host object?\n\nA host object represents a nameserver hostname registered\
27032
+ \ at a registry. When a nameserver hostname is subordinate to a domain in your\
27033
+ \ portfolio (e.g. `ns1.example.com` under `example.com`), the registry requires\
27034
+ \ a host object carrying one or more IP addresses \u2014 commonly known as glue\
27035
+ \ records \u2014 so that resolvers can reach the nameserver even though its address\
27036
+ \ lives inside the zone it serves.\n\nThese endpoints manage **subordinate** host\
27037
+ \ objects: the parent domain of the hostname must be managed in your OpusDNS account.\
27038
+ \ Hostnames whose parent domain is not in your account are rejected with `ERROR_PARENT_DOMAIN_NOT_FOUND`.\
27039
+ \ External nameservers (e.g. your DNS provider's hostnames) do not need host objects\
27040
+ \ \u2014 simply reference them by hostname when setting a domain's nameservers.\n\
27041
+ \n### Referencing a host\n\n`GET`, `PUT` and `DELETE` accept either the host ID\
27042
+ \ (`host_...`) or the hostname as the `{host_reference}` path parameter.\n\n###\
27043
+ \ Lifecycle\n\n- **Create** \u2014 `POST /v1/hosts` with the hostname and at least\
27044
+ \ one IP address. The host object is created at the registry of the parent domain.\
27045
+ \ Creating a host that already exists returns `ERROR_HOST_ALREADY_EXISTS`.\n-\
27046
+ \ **Update** \u2014 `PUT /v1/hosts/{host_reference}` replaces the host's IP addresses\
27047
+ \ with the provided list. If the provided addresses match the current state at\
27048
+ \ the registry, the request succeeds without performing a registry update.\n-\
27049
+ \ **Delete** \u2014 `DELETE /v1/hosts/{host_reference}` removes the host object.\
27050
+ \ A host that is still in use as a nameserver by one or more domains cannot be\
27051
+ \ deleted and returns `ERROR_HOST_IN_USE`.\n\nNot all TLDs use host objects; for\
27052
+ \ TLDs without host object support, creation is rejected with `ERROR_HOST_OBJECTS_NOT_SUPPORTED`.\n"
27053
+ name: host
27054
+ x-displayName: Hosts
26549
27055
  - description: 'Endpoints for creating and managing email forwards.
26550
27056
 
26551
27057
  '
@@ -26594,50 +27100,67 @@ tags:
26594
27100
  \ | Summary of all DNS zones and their configuration |\n| `dns_zone_records` |\
26595
27101
  \ Detailed export of all DNS records across zones |\n| `billing_transactions`\
26596
27102
  \ | Billing transactions for the current month to date |\n| `billing_transactions_monthly`\
26597
- \ | Billing transactions for the previous calendar month |\n\n### Billing Transaction\
26598
- \ Reports\n\nBilling transaction reports export all completed transactions as\
26599
- \ a CSV with the following columns: `product_reference`, `action`, `period`, `product_type`,\
26600
- \ `amount`, `currency`, `completed_on`.\n\nThere are two billing report types:\n\
26601
- \n- **`billing_transactions`** \u2014 On-demand report covering the current month\
26602
- \ to date (1st of the month through the time of the request). Request this via\
26603
- \ the API like any other report type.\n- **`billing_transactions_monthly`** \u2014\
26604
- \ Automatically generated on the 1st of each month at 5 AM UTC, covering the full\
26605
- \ previous calendar month. These are scheduled reports and do not need to be manually\
26606
- \ requested.\n\nBoth types maintain their own retention of 30 reports each, so\
26607
- \ requesting on-demand reports will not displace the monthly archive.\n\n### Report\
26608
- \ Lifecycle\n\nA report transitions through the following statuses:\n\n1. **pending**\
26609
- \ \u2014 Report has been queued for generation\n2. **generating** \u2014 Report\
26610
- \ is being built\n3. **completed** \u2014 Report is ready for download\n4. **failed**\
26611
- \ \u2014 Generation failed\n\n### Usage Pattern\n\n1. **Request a report** \u2014\
26612
- \ `POST /v1/reports` with the desired `report_type`\n2. **Poll for completion**\
26613
- \ \u2014 `GET /v1/reports/{report_id}` until `status` is `completed`\n3. **Download**\
26614
- \ \u2014 `GET /v1/reports/{report_id}/download` returns the report as a streamed\
26615
- \ ZIP file\n\n### Downloading Reports\n\n`GET /v1/reports/{report_id}/download`\
26616
- \ streams the report file directly to the client. The report **must** have status\
26617
- \ `completed` before it can be downloaded \u2014 calling this endpoint on a report\
26618
- \ that is still `pending` or `generating` returns `409 Conflict`.\n\n**Response\
26619
- \ details:**\n\n| Header | Value |\n|--------|-------|\n| `Content-Type` | `application/zip`\
26620
- \ |\n| `Content-Disposition` | `attachment; filename={report_type}-{report_id}.zip`\
26621
- \ |\n| `Content-Length` | File size in bytes (included when known) |\n\nThe response\
26622
- \ body is streamed in chunks, so clients should read the body incrementally rather\
26623
- \ than buffering it entirely in memory. When `Content-Length` is present, it can\
26624
- \ be used to display download progress.\n\n### Trigger Types\n\n| Type | Description\
26625
- \ |\n|------|-------------|\n| `on_demand` | Manually requested via the API |\n\
26626
- | `scheduled` | Automatically generated on a recurring schedule |\n\n### Rate\
26627
- \ Limiting\n\nReport creation is rate-limited at two levels:\n\n- **Cooldown**\
26628
- \ \u2014 After creating a report, you must wait **5 minutes** before requesting\
26629
- \ another report of the same type. Requests during the cooldown return `429 Too\
26630
- \ Many Requests` with a `Retry-After` header.\n- **Hourly limit** \u2014 Only\
26631
- \ **one report per type per organization per clock hour** (UTC) can be generated.\
26632
- \ Duplicate requests within the same hour will not produce an additional report.\n\
26633
- \n### Retention\n\nThe **30 most recent reports** of each type are kept per organization.\
26634
- \ Older reports and their associated files are automatically deleted when a new\
26635
- \ report is generated.\n\n### Listing Reports\n\nUse `GET /v1/reports` to list\
26636
- \ reports with optional filters:\n\n| Parameter | Description |\n|-----------|-------------|\n\
26637
- | `report_type` | Filter by report type (repeatable) |\n| `status` | Filter by\
26638
- \ report status (repeatable) |\n| `trigger_type` | Filter by trigger type |\n\
26639
- | `created_after` | Only reports created after this timestamp |\n| `created_before`\
26640
- \ | Only reports created before this timestamp |\n"
27103
+ \ | Billing transactions for the previous calendar month |\n| `registrar_portfolio_pdf`\
27104
+ \ | Credential-scoped registrar portfolio report as a PDF inside the ZIP download\
27105
+ \ |\n\n### Billing Transaction Reports\n\nBilling transaction reports export all\
27106
+ \ completed transactions as a CSV with the following columns: `product_reference`,\
27107
+ \ `action`, `period`, `product_type`, `amount`, `currency`, `completed_on`.\n\n\
27108
+ There are two billing report types:\n\n- **`billing_transactions`** \u2014 On-demand\
27109
+ \ report covering the current month to date (1st of the month through the time\
27110
+ \ of the request). Request this via the API like any other report type.\n- **`billing_transactions_monthly`**\
27111
+ \ \u2014 Automatically generated on the 1st of each month at 5 AM UTC, covering\
27112
+ \ the full previous calendar month. These are scheduled reports and do not need\
27113
+ \ to be manually requested.\n\nBoth types maintain their own retention of 30 reports\
27114
+ \ each, so requesting on-demand reports will not displace the monthly archive.\n\
27115
+ \n### Registrar Portfolio PDF Reports\n\nRegistrar portfolio reports are requested\
27116
+ \ with `POST /v1/reports` and require `registrar_credential_id`:\n\n```json\n\
27117
+ {\n \"report_type\": \"registrar_portfolio_pdf\",\n \"registrar_credential_id\"\
27118
+ : \"registrar_credential_...\"\n}\n```\n\nThe report uses registrar data from\
27119
+ \ the registrar-elements OpenSearch index, populated by the scheduled daily registrar\
27120
+ \ syncs. Report generation does not trigger a sync; it uses the most recently\
27121
+ \ synced data as-is. If the credential has no portfolio data yet (for example,\
27122
+ \ a credential created since the last sync), generation fails with an error indicating\
27123
+ \ the credential is too new to report on.\n\nThe downloaded ZIP contains `registrar-portfolio-{report_typeid}.pdf`.\
27124
+ \ Before each PDF generation, the report service loads the organization's current\
27125
+ \ available TLD list from the backend and uses it to mark TLDs in the portfolio\
27126
+ \ as available or unavailable. The first version includes the sections backed\
27127
+ \ by indexed data: portfolio overview, domains/statuses/TLDs/nameservers, TLD\
27128
+ \ availability, expiry summaries, contact validation summary, and DNS record summaries.\
27129
+ \ Additional sections that require new OpenSearch fields will be added explicitly\
27130
+ \ when those fields are indexed.\n\n### Report Lifecycle\n\nA report transitions\
27131
+ \ through the following statuses:\n\n1. **pending** \u2014 Report has been queued\
27132
+ \ for generation\n2. **generating** \u2014 Report is being built\n3. **completed**\
27133
+ \ \u2014 Report is ready for download\n4. **failed** \u2014 Generation failed\n\
27134
+ \n### Usage Pattern\n\n1. **Request a report** \u2014 `POST /v1/reports` with\
27135
+ \ the desired `report_type`\n2. **Poll for completion** \u2014 `GET /v1/reports/{report_id}`\
27136
+ \ until `status` is `completed`\n3. **Download** \u2014 `GET /v1/reports/{report_id}/download`\
27137
+ \ returns the report as a streamed ZIP file\n\n### Downloading Reports\n\n`GET\
27138
+ \ /v1/reports/{report_id}/download` streams the report file directly to the client.\
27139
+ \ The report **must** have status `completed` before it can be downloaded \u2014\
27140
+ \ calling this endpoint on a report that is still `pending` or `generating` returns\
27141
+ \ `409 Conflict`.\n\n**Response details:**\n\n| Header | Value |\n|--------|-------|\n\
27142
+ | `Content-Type` | `application/zip` |\n| `Content-Disposition` | `attachment;\
27143
+ \ filename={report_type}-{report_id}.zip` |\n| `Content-Length` | File size in\
27144
+ \ bytes (included when known) |\n\nThe response body is streamed in chunks, so\
27145
+ \ clients should read the body incrementally rather than buffering it entirely\
27146
+ \ in memory. When `Content-Length` is present, it can be used to display download\
27147
+ \ progress.\n\n### Trigger Types\n\n| Type | Description |\n|------|-------------|\n\
27148
+ | `on_demand` | Manually requested via the API |\n| `scheduled` | Automatically\
27149
+ \ generated on a recurring schedule |\n\n### Rate Limiting\n\nReport creation\
27150
+ \ is rate-limited at two levels:\n\n- **Cooldown** \u2014 After creating a report,\
27151
+ \ you must wait **5 minutes** before requesting another report of the same type.\
27152
+ \ Requests during the cooldown return `429 Too Many Requests` with a `Retry-After`\
27153
+ \ header.\n- **Hourly limit** \u2014 Only **one report per type per organization\
27154
+ \ per clock hour** (UTC) can be generated. Duplicate requests within the same\
27155
+ \ hour will not produce an additional report.\n\n### Retention\n\nThe **30 most\
27156
+ \ recent reports** of each type are kept per organization. Older reports and their\
27157
+ \ associated files are automatically deleted when a new report is generated.\n\
27158
+ \n### Listing Reports\n\nUse `GET /v1/reports` to list reports with optional filters:\n\
27159
+ \n| Parameter | Description |\n|-----------|-------------|\n| `report_type` |\
27160
+ \ Filter by report type (repeatable) |\n| `status` | Filter by report status (repeatable)\
27161
+ \ |\n| `trigger_type` | Filter by trigger type |\n| `created_after` | Only reports\
27162
+ \ created after this timestamp |\n| `created_before` | Only reports created before\
27163
+ \ this timestamp |\n"
26641
27164
  name: report
26642
27165
  x-displayName: Reports
26643
27166
  - description: Endpoints for creating new Tags
@@ -26654,6 +27177,7 @@ x-tagGroups:
26654
27177
  - domain
26655
27178
  - domain_tld_specific
26656
27179
  - tld
27180
+ - host
26657
27181
  - contact
26658
27182
  - event
26659
27183
  - availability