@opusdns/api 0.258.0 → 0.260.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
@@ -259,6 +259,70 @@ components:
259
259
  - unique
260
260
  title: BrowserStatsBucket
261
261
  type: object
262
+ BulkObjectTagChanges:
263
+ properties:
264
+ add:
265
+ description: Tag IDs to add to the objects.
266
+ items:
267
+ examples:
268
+ - tag_01h45ytscbebyvny4gc8cr8ma2
269
+ format: typeid
270
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
271
+ type: string
272
+ x-typeid-prefix: tag
273
+ maxItems: 1000
274
+ title: Add
275
+ type: array
276
+ objects:
277
+ description: Object references to operate on. TypeIDs and resource names
278
+ may be mixed.
279
+ items:
280
+ description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
281
+ name (e.g. example.com)
282
+ examples:
283
+ - domain_01h45ytscbebyvny4gc8cr8ma2
284
+ - example.com
285
+ type: string
286
+ maxItems: 1000
287
+ minItems: 1
288
+ title: Objects
289
+ type: array
290
+ remove:
291
+ description: Tag IDs to remove from the objects.
292
+ items:
293
+ examples:
294
+ - tag_01h45ytscbebyvny4gc8cr8ma2
295
+ format: typeid
296
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
297
+ type: string
298
+ x-typeid-prefix: tag
299
+ maxItems: 1000
300
+ title: Remove
301
+ type: array
302
+ replace:
303
+ anyOf:
304
+ - items:
305
+ examples:
306
+ - tag_01h45ytscbebyvny4gc8cr8ma2
307
+ format: typeid
308
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
309
+ type: string
310
+ x-typeid-prefix: tag
311
+ maxItems: 1000
312
+ type: array
313
+ - type: 'null'
314
+ description: Tag IDs to set as the complete tag set for the objects, replacing
315
+ any existing tags. Mutually exclusive with 'add' and 'remove'. An empty
316
+ list removes all tags.
317
+ title: Replace
318
+ type:
319
+ $ref: '#/components/schemas/TagType'
320
+ description: The object/tag type (e.g. DOMAIN, CONTACT, ZONE)
321
+ required:
322
+ - type
323
+ - objects
324
+ title: BulkObjectTagChanges
325
+ type: object
262
326
  CommandError:
263
327
  properties:
264
328
  error:
@@ -6329,6 +6393,57 @@ components:
6329
6393
  - performed_by_id
6330
6394
  title: ObjectLogSortField
6331
6395
  type: string
6396
+ ObjectTagChanges:
6397
+ properties:
6398
+ add:
6399
+ description: Object TypeIDs or resource names to tag. TypeIDs and names
6400
+ may be mixed.
6401
+ items:
6402
+ description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
6403
+ name (e.g. example.com)
6404
+ examples:
6405
+ - domain_01h45ytscbebyvny4gc8cr8ma2
6406
+ - example.com
6407
+ type: string
6408
+ maxItems: 1000
6409
+ title: Add
6410
+ type: array
6411
+ remove:
6412
+ description: Object TypeIDs or resource names to untag. TypeIDs and names
6413
+ may be mixed.
6414
+ items:
6415
+ description: A TypeID (e.g. domain_01h45ytscbebyvny4gc8cr8ma2) or a resource
6416
+ name (e.g. example.com)
6417
+ examples:
6418
+ - domain_01h45ytscbebyvny4gc8cr8ma2
6419
+ - example.com
6420
+ type: string
6421
+ maxItems: 1000
6422
+ title: Remove
6423
+ type: array
6424
+ title: ObjectTagChanges
6425
+ type: object
6426
+ ObjectTagChangesResponse:
6427
+ properties:
6428
+ added:
6429
+ description: Number of objects tagged
6430
+ title: Added
6431
+ type: integer
6432
+ removed:
6433
+ description: Number of objects untagged
6434
+ title: Removed
6435
+ type: integer
6436
+ unresolved:
6437
+ description: References that could not be resolved
6438
+ items:
6439
+ type: string
6440
+ title: Unresolved
6441
+ type: array
6442
+ required:
6443
+ - added
6444
+ - removed
6445
+ title: ObjectTagChangesResponse
6446
+ type: object
6332
6447
  Organization:
6333
6448
  properties:
6334
6449
  address_1:
@@ -7309,6 +7424,20 @@ components:
7309
7424
  - pagination
7310
7425
  title: Pagination[RequestHistory]
7311
7426
  type: object
7427
+ Pagination_TagResponse_:
7428
+ properties:
7429
+ pagination:
7430
+ $ref: '#/components/schemas/PaginationMetadata'
7431
+ results:
7432
+ items:
7433
+ $ref: '#/components/schemas/TagResponse'
7434
+ title: Results
7435
+ type: array
7436
+ required:
7437
+ - results
7438
+ - pagination
7439
+ title: Pagination[TagResponse]
7440
+ type: object
7312
7441
  Pagination_UserPublic_:
7313
7442
  properties:
7314
7443
  pagination:
@@ -8673,12 +8802,132 @@ components:
8673
8802
  - color-10
8674
8803
  title: TagColor
8675
8804
  type: string
8805
+ TagCreate:
8806
+ properties:
8807
+ color:
8808
+ anyOf:
8809
+ - $ref: '#/components/schemas/TagColor'
8810
+ - type: 'null'
8811
+ default: color-1
8812
+ description: The color of the tag
8813
+ description:
8814
+ anyOf:
8815
+ - maxLength: 1024
8816
+ type: string
8817
+ - type: 'null'
8818
+ description: Optional description of the tag
8819
+ title: Description
8820
+ label:
8821
+ description: A human-readable label for the tag
8822
+ maxLength: 50
8823
+ minLength: 1
8824
+ title: Label
8825
+ type: string
8826
+ type:
8827
+ $ref: '#/components/schemas/TagType'
8828
+ description: Which category a tag applies to, cannot be changed once created
8829
+ required:
8830
+ - label
8831
+ - type
8832
+ title: TagCreate
8833
+ type: object
8676
8834
  TagFilterMode:
8677
8835
  enum:
8678
8836
  - match_any
8679
8837
  - match_all
8680
8838
  title: TagFilterMode
8681
8839
  type: string
8840
+ TagResponse:
8841
+ properties:
8842
+ color:
8843
+ $ref: '#/components/schemas/TagColor'
8844
+ description: The color of the tag
8845
+ created_on:
8846
+ description: The date/time the tag was created on
8847
+ format: date-time
8848
+ title: Created On
8849
+ type: string
8850
+ description:
8851
+ anyOf:
8852
+ - maxLength: 1024
8853
+ type: string
8854
+ - type: 'null'
8855
+ description: Optional description of the tag
8856
+ title: Description
8857
+ label:
8858
+ description: The label of the tag
8859
+ minLength: 1
8860
+ title: Label
8861
+ type: string
8862
+ object_count:
8863
+ default: 0
8864
+ description: Number of objects tagged with this tag
8865
+ title: Object Count
8866
+ type: integer
8867
+ tag_id:
8868
+ description: The unique identifier of the tag
8869
+ examples:
8870
+ - tag_01h45ytscbebyvny4gc8cr8ma2
8871
+ format: typeid
8872
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
8873
+ title: Tag Id
8874
+ type: string
8875
+ x-typeid-prefix: tag
8876
+ type:
8877
+ $ref: '#/components/schemas/TagType'
8878
+ description: Which category a tag applies to, cannot be changed once created
8879
+ updated_on:
8880
+ description: The date/time the tag was last updated on
8881
+ format: date-time
8882
+ title: Updated On
8883
+ type: string
8884
+ required:
8885
+ - tag_id
8886
+ - label
8887
+ - type
8888
+ - color
8889
+ - created_on
8890
+ - updated_on
8891
+ title: TagResponse
8892
+ type: object
8893
+ TagSortField:
8894
+ enum:
8895
+ - label
8896
+ - created_on
8897
+ - updated_on
8898
+ title: TagSortField
8899
+ type: string
8900
+ TagType:
8901
+ enum:
8902
+ - DOMAIN
8903
+ - CONTACT
8904
+ - ZONE
8905
+ title: TagType
8906
+ type: string
8907
+ TagUpdate:
8908
+ properties:
8909
+ color:
8910
+ anyOf:
8911
+ - $ref: '#/components/schemas/TagColor'
8912
+ - type: 'null'
8913
+ description: The color of the tag
8914
+ description:
8915
+ anyOf:
8916
+ - maxLength: 1024
8917
+ type: string
8918
+ - type: 'null'
8919
+ description: Optional description of the tag
8920
+ title: Description
8921
+ label:
8922
+ anyOf:
8923
+ - maxLength: 50
8924
+ minLength: 1
8925
+ type: string
8926
+ - type: 'null'
8927
+ description: A human-readable label for the tag
8928
+ title: Label
8929
+ title: TagUpdate
8930
+ type: object
8682
8931
  TimeRange:
8683
8932
  enum:
8684
8933
  - 1h
@@ -9869,7 +10118,7 @@ info:
9869
10118
  \n\n"
9870
10119
  summary: OpusDNS - your gateway to a seamless domain management experience.
9871
10120
  title: OpusDNS API
9872
- version: 2026-04-21-115243
10121
+ version: 2026-04-21-172930
9873
10122
  x-logo:
9874
10123
  altText: OpusDNS API Reference
9875
10124
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -21111,40 +21360,79 @@ paths:
21111
21360
  summary: Download Report
21112
21361
  tags:
21113
21362
  - report
21114
- /v1/tlds/:
21363
+ /v1/tags:
21115
21364
  get:
21116
- description: Retrieves a list of TLD Specifications we have support for
21117
- operationId: get_tld_specifications_v1_tlds__get
21365
+ description: Retrieves a paginated list of tags
21366
+ operationId: list_tags_v1_tags_get
21118
21367
  parameters:
21119
21368
  - in: query
21120
- name: fields
21369
+ name: sort_by
21370
+ required: false
21371
+ schema:
21372
+ $ref: '#/components/schemas/TagSortField'
21373
+ default: label
21374
+ - in: query
21375
+ name: sort_order
21376
+ required: false
21377
+ schema:
21378
+ $ref: '#/components/schemas/SortOrder'
21379
+ default: asc
21380
+ - description: Filter by tag types (OR semantics)
21381
+ in: query
21382
+ name: tag_types
21121
21383
  required: false
21122
21384
  schema:
21123
21385
  anyOf:
21124
- - type: string
21386
+ - items:
21387
+ $ref: '#/components/schemas/TagType'
21388
+ type: array
21125
21389
  - type: 'null'
21126
- title: Fields
21390
+ description: Filter by tag types (OR semantics)
21391
+ title: Tag Types
21127
21392
  - in: query
21128
- name: tlds
21393
+ name: search
21129
21394
  required: false
21130
21395
  schema:
21131
21396
  anyOf:
21132
21397
  - type: string
21133
21398
  - type: 'null'
21134
- title: Tlds
21399
+ title: Search
21400
+ - in: query
21401
+ name: page
21402
+ required: false
21403
+ schema:
21404
+ default: 1
21405
+ minimum: 1
21406
+ title: Page
21407
+ type: integer
21408
+ - in: query
21409
+ name: page_size
21410
+ required: false
21411
+ schema:
21412
+ default: 10
21413
+ maximum: 1000
21414
+ minimum: 1
21415
+ title: Page Size
21416
+ type: integer
21135
21417
  responses:
21136
21418
  '200':
21137
21419
  content:
21138
21420
  application/json:
21139
21421
  schema:
21140
- additionalProperties:
21141
- items:
21142
- additionalProperties: true
21143
- type: object
21144
- type: array
21145
- title: Response Get Tld Specifications V1 Tlds Get
21146
- type: object
21422
+ $ref: '#/components/schemas/Pagination_TagResponse_'
21147
21423
  description: Successful Response
21424
+ '401':
21425
+ content:
21426
+ application/problem+json:
21427
+ example:
21428
+ code: ERROR_AUTHENTICATION
21429
+ detail: Additional error context.
21430
+ status: 401
21431
+ title: Authentication Error
21432
+ type: authentication
21433
+ schema:
21434
+ $ref: '#/components/schemas/Problem'
21435
+ description: Unauthorized
21148
21436
  '422':
21149
21437
  content:
21150
21438
  application/problem+json:
@@ -21154,22 +21442,449 @@ paths:
21154
21442
  security:
21155
21443
  - OAuth2PasswordBearer: []
21156
21444
  - APIKeyHeader: []
21157
- summary: Get list of Specifications for all TLDs we support
21445
+ summary: List tags
21158
21446
  tags:
21159
- - tld
21160
- /v1/tlds/portfolio:
21161
- get:
21162
- description: Retrieves a list of TLDs we have support for
21163
- operationId: get_tld_portfolio_v1_tlds_portfolio_get
21447
+ - tag
21448
+ post:
21449
+ description: Create a new tag
21450
+ operationId: create_tag_v1_tags_post
21451
+ requestBody:
21452
+ content:
21453
+ application/json:
21454
+ schema:
21455
+ $ref: '#/components/schemas/TagCreate'
21456
+ required: true
21164
21457
  responses:
21165
- '200':
21458
+ '201':
21166
21459
  content:
21167
21460
  application/json:
21168
21461
  schema:
21169
- items:
21170
- $ref: '#/components/schemas/TldResponseShort'
21171
- title: Response Get Tld Portfolio V1 Tlds Portfolio Get
21172
- type: array
21462
+ $ref: '#/components/schemas/TagResponse'
21463
+ description: Successful Response
21464
+ '401':
21465
+ content:
21466
+ application/problem+json:
21467
+ example:
21468
+ code: ERROR_AUTHENTICATION
21469
+ detail: Additional error context.
21470
+ status: 401
21471
+ title: Authentication Error
21472
+ type: authentication
21473
+ schema:
21474
+ $ref: '#/components/schemas/Problem'
21475
+ description: Unauthorized
21476
+ '409':
21477
+ content:
21478
+ application/problem+json:
21479
+ example:
21480
+ code: ERROR_TAG_LABEL_ALREADY_EXISTS
21481
+ detail: A tag with label 'Additional error context.' already exists
21482
+ label: Additional error context.
21483
+ status: 409
21484
+ title: Tag Management Error
21485
+ type: tag-label-already-exists
21486
+ schema:
21487
+ $ref: '#/components/schemas/Problem'
21488
+ description: Conflict
21489
+ '422':
21490
+ content:
21491
+ application/problem+json:
21492
+ schema:
21493
+ $ref: '#/components/schemas/HTTPValidationError'
21494
+ description: Validation Error
21495
+ security:
21496
+ - OAuth2PasswordBearer: []
21497
+ - APIKeyHeader: []
21498
+ summary: Create a tag
21499
+ tags:
21500
+ - tag
21501
+ /v1/tags/objects:
21502
+ post:
21503
+ description: Add, remove, or replace tags on multiple objects at once. 'replace'
21504
+ is mutually exclusive with 'add' and 'remove'.
21505
+ operationId: bulk_update_object_tags_v1_tags_objects_post
21506
+ requestBody:
21507
+ content:
21508
+ application/json:
21509
+ schema:
21510
+ $ref: '#/components/schemas/BulkObjectTagChanges'
21511
+ required: true
21512
+ responses:
21513
+ '200':
21514
+ content:
21515
+ application/json:
21516
+ schema:
21517
+ $ref: '#/components/schemas/ObjectTagChangesResponse'
21518
+ description: Successful Response
21519
+ '400':
21520
+ content:
21521
+ application/problem+json:
21522
+ example:
21523
+ code: ERROR_ILLEGAL_OBJECT_TYPE_FOR_TAG
21524
+ detail: One or more provided object ids are not valid for this tag
21525
+ object_ids: Additional error context.
21526
+ status: 400
21527
+ title: Tag Management Error
21528
+ type: illegal-object-type-tag
21529
+ schema:
21530
+ $ref: '#/components/schemas/Problem'
21531
+ description: Bad Request
21532
+ '401':
21533
+ content:
21534
+ application/problem+json:
21535
+ example:
21536
+ code: ERROR_AUTHENTICATION
21537
+ detail: Additional error context.
21538
+ status: 401
21539
+ title: Authentication Error
21540
+ type: authentication
21541
+ schema:
21542
+ $ref: '#/components/schemas/Problem'
21543
+ description: Unauthorized
21544
+ '404':
21545
+ content:
21546
+ application/problem+json:
21547
+ example:
21548
+ code: ERROR_TAG_NOT_FOUND
21549
+ detail: Tag not found
21550
+ status: 404
21551
+ tag_id: Additional error context.
21552
+ title: Tag Management Error
21553
+ type: tag-not-found
21554
+ schema:
21555
+ $ref: '#/components/schemas/Problem'
21556
+ description: Not Found
21557
+ '422':
21558
+ content:
21559
+ application/problem+json:
21560
+ schema:
21561
+ $ref: '#/components/schemas/HTTPValidationError'
21562
+ description: Validation Error
21563
+ security:
21564
+ - OAuth2PasswordBearer: []
21565
+ - APIKeyHeader: []
21566
+ summary: Bulk tag or untag objects
21567
+ tags:
21568
+ - tag
21569
+ /v1/tags/{tag_id}:
21570
+ delete:
21571
+ description: Delete a tag
21572
+ operationId: delete_tag_v1_tags__tag_id__delete
21573
+ parameters:
21574
+ - in: path
21575
+ name: tag_id
21576
+ required: true
21577
+ schema:
21578
+ examples:
21579
+ - tag_01h45ytscbebyvny4gc8cr8ma2
21580
+ format: typeid
21581
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
21582
+ title: Tag Id
21583
+ type: string
21584
+ x-typeid-prefix: tag
21585
+ responses:
21586
+ '204':
21587
+ description: Successful Response
21588
+ '401':
21589
+ content:
21590
+ application/problem+json:
21591
+ example:
21592
+ code: ERROR_AUTHENTICATION
21593
+ detail: Additional error context.
21594
+ status: 401
21595
+ title: Authentication Error
21596
+ type: authentication
21597
+ schema:
21598
+ $ref: '#/components/schemas/Problem'
21599
+ description: Unauthorized
21600
+ '404':
21601
+ content:
21602
+ application/problem+json:
21603
+ example:
21604
+ code: ERROR_TAG_NOT_FOUND
21605
+ detail: Tag not found
21606
+ status: 404
21607
+ tag_id: Additional error context.
21608
+ title: Tag Management Error
21609
+ type: tag-not-found
21610
+ schema:
21611
+ $ref: '#/components/schemas/Problem'
21612
+ description: Not Found
21613
+ '422':
21614
+ content:
21615
+ application/problem+json:
21616
+ schema:
21617
+ $ref: '#/components/schemas/HTTPValidationError'
21618
+ description: Validation Error
21619
+ security:
21620
+ - OAuth2PasswordBearer: []
21621
+ - APIKeyHeader: []
21622
+ summary: Delete a tag
21623
+ tags:
21624
+ - tag
21625
+ get:
21626
+ description: Retrieve a single tag by its ID
21627
+ operationId: get_tag_v1_tags__tag_id__get
21628
+ parameters:
21629
+ - in: path
21630
+ name: tag_id
21631
+ required: true
21632
+ schema:
21633
+ examples:
21634
+ - tag_01h45ytscbebyvny4gc8cr8ma2
21635
+ format: typeid
21636
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
21637
+ title: Tag Id
21638
+ type: string
21639
+ x-typeid-prefix: tag
21640
+ responses:
21641
+ '200':
21642
+ content:
21643
+ application/json:
21644
+ schema:
21645
+ $ref: '#/components/schemas/TagResponse'
21646
+ description: Successful Response
21647
+ '401':
21648
+ content:
21649
+ application/problem+json:
21650
+ example:
21651
+ code: ERROR_AUTHENTICATION
21652
+ detail: Additional error context.
21653
+ status: 401
21654
+ title: Authentication Error
21655
+ type: authentication
21656
+ schema:
21657
+ $ref: '#/components/schemas/Problem'
21658
+ description: Unauthorized
21659
+ '404':
21660
+ content:
21661
+ application/problem+json:
21662
+ example:
21663
+ code: ERROR_TAG_NOT_FOUND
21664
+ detail: Tag not found
21665
+ status: 404
21666
+ tag_id: Additional error context.
21667
+ title: Tag Management Error
21668
+ type: tag-not-found
21669
+ schema:
21670
+ $ref: '#/components/schemas/Problem'
21671
+ description: Not Found
21672
+ '422':
21673
+ content:
21674
+ application/problem+json:
21675
+ schema:
21676
+ $ref: '#/components/schemas/HTTPValidationError'
21677
+ description: Validation Error
21678
+ security:
21679
+ - OAuth2PasswordBearer: []
21680
+ - APIKeyHeader: []
21681
+ summary: Get a tag
21682
+ tags:
21683
+ - tag
21684
+ patch:
21685
+ description: Update a tag's label, description, or color
21686
+ operationId: update_tag_v1_tags__tag_id__patch
21687
+ parameters:
21688
+ - in: path
21689
+ name: tag_id
21690
+ required: true
21691
+ schema:
21692
+ examples:
21693
+ - tag_01h45ytscbebyvny4gc8cr8ma2
21694
+ format: typeid
21695
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
21696
+ title: Tag Id
21697
+ type: string
21698
+ x-typeid-prefix: tag
21699
+ requestBody:
21700
+ content:
21701
+ application/json:
21702
+ schema:
21703
+ $ref: '#/components/schemas/TagUpdate'
21704
+ required: true
21705
+ responses:
21706
+ '200':
21707
+ content:
21708
+ application/json:
21709
+ schema:
21710
+ $ref: '#/components/schemas/TagResponse'
21711
+ description: Successful Response
21712
+ '401':
21713
+ content:
21714
+ application/problem+json:
21715
+ example:
21716
+ code: ERROR_AUTHENTICATION
21717
+ detail: Additional error context.
21718
+ status: 401
21719
+ title: Authentication Error
21720
+ type: authentication
21721
+ schema:
21722
+ $ref: '#/components/schemas/Problem'
21723
+ description: Unauthorized
21724
+ '404':
21725
+ content:
21726
+ application/problem+json:
21727
+ example:
21728
+ code: ERROR_TAG_NOT_FOUND
21729
+ detail: Tag not found
21730
+ status: 404
21731
+ tag_id: Additional error context.
21732
+ title: Tag Management Error
21733
+ type: tag-not-found
21734
+ schema:
21735
+ $ref: '#/components/schemas/Problem'
21736
+ description: Not Found
21737
+ '409':
21738
+ content:
21739
+ application/problem+json:
21740
+ example:
21741
+ code: ERROR_TAG_LABEL_ALREADY_EXISTS
21742
+ detail: A tag with label 'Additional error context.' already exists
21743
+ label: Additional error context.
21744
+ status: 409
21745
+ title: Tag Management Error
21746
+ type: tag-label-already-exists
21747
+ schema:
21748
+ $ref: '#/components/schemas/Problem'
21749
+ description: Conflict
21750
+ '422':
21751
+ content:
21752
+ application/problem+json:
21753
+ schema:
21754
+ $ref: '#/components/schemas/HTTPValidationError'
21755
+ description: Validation Error
21756
+ security:
21757
+ - OAuth2PasswordBearer: []
21758
+ - APIKeyHeader: []
21759
+ summary: Update a tag
21760
+ tags:
21761
+ - tag
21762
+ /v1/tags/{tag_id}/objects:
21763
+ post:
21764
+ description: Add or remove objects from a tag. Objects are matched by the tag's
21765
+ type (e.g. a DOMAIN tag only accepts domain IDs).
21766
+ operationId: update_tag_objects_v1_tags__tag_id__objects_post
21767
+ parameters:
21768
+ - in: path
21769
+ name: tag_id
21770
+ required: true
21771
+ schema:
21772
+ examples:
21773
+ - tag_01h45ytscbebyvny4gc8cr8ma2
21774
+ format: typeid
21775
+ pattern: ^tag_[0-7][0-9a-hjkmnpq-tv-z]{25}$
21776
+ title: Tag Id
21777
+ type: string
21778
+ x-typeid-prefix: tag
21779
+ requestBody:
21780
+ content:
21781
+ application/json:
21782
+ schema:
21783
+ $ref: '#/components/schemas/ObjectTagChanges'
21784
+ required: true
21785
+ responses:
21786
+ '200':
21787
+ content:
21788
+ application/json:
21789
+ schema:
21790
+ $ref: '#/components/schemas/ObjectTagChangesResponse'
21791
+ description: Successful Response
21792
+ '401':
21793
+ content:
21794
+ application/problem+json:
21795
+ example:
21796
+ code: ERROR_AUTHENTICATION
21797
+ detail: Additional error context.
21798
+ status: 401
21799
+ title: Authentication Error
21800
+ type: authentication
21801
+ schema:
21802
+ $ref: '#/components/schemas/Problem'
21803
+ description: Unauthorized
21804
+ '404':
21805
+ content:
21806
+ application/problem+json:
21807
+ example:
21808
+ code: ERROR_TAG_NOT_FOUND
21809
+ detail: Tag not found
21810
+ status: 404
21811
+ tag_id: Additional error context.
21812
+ title: Tag Management Error
21813
+ type: tag-not-found
21814
+ schema:
21815
+ $ref: '#/components/schemas/Problem'
21816
+ description: Not Found
21817
+ '422':
21818
+ content:
21819
+ application/problem+json:
21820
+ schema:
21821
+ $ref: '#/components/schemas/HTTPValidationError'
21822
+ description: Validation Error
21823
+ security:
21824
+ - OAuth2PasswordBearer: []
21825
+ - APIKeyHeader: []
21826
+ summary: Tag or untag objects
21827
+ tags:
21828
+ - tag
21829
+ /v1/tlds/:
21830
+ get:
21831
+ description: Retrieves a list of TLD Specifications we have support for
21832
+ operationId: get_tld_specifications_v1_tlds__get
21833
+ parameters:
21834
+ - in: query
21835
+ name: fields
21836
+ required: false
21837
+ schema:
21838
+ anyOf:
21839
+ - type: string
21840
+ - type: 'null'
21841
+ title: Fields
21842
+ - in: query
21843
+ name: tlds
21844
+ required: false
21845
+ schema:
21846
+ anyOf:
21847
+ - type: string
21848
+ - type: 'null'
21849
+ title: Tlds
21850
+ responses:
21851
+ '200':
21852
+ content:
21853
+ application/json:
21854
+ schema:
21855
+ additionalProperties:
21856
+ items:
21857
+ additionalProperties: true
21858
+ type: object
21859
+ type: array
21860
+ title: Response Get Tld Specifications V1 Tlds Get
21861
+ type: object
21862
+ description: Successful Response
21863
+ '422':
21864
+ content:
21865
+ application/problem+json:
21866
+ schema:
21867
+ $ref: '#/components/schemas/HTTPValidationError'
21868
+ description: Validation Error
21869
+ security:
21870
+ - OAuth2PasswordBearer: []
21871
+ - APIKeyHeader: []
21872
+ summary: Get list of Specifications for all TLDs we support
21873
+ tags:
21874
+ - tld
21875
+ /v1/tlds/portfolio:
21876
+ get:
21877
+ description: Retrieves a list of TLDs we have support for
21878
+ operationId: get_tld_portfolio_v1_tlds_portfolio_get
21879
+ responses:
21880
+ '200':
21881
+ content:
21882
+ application/json:
21883
+ schema:
21884
+ items:
21885
+ $ref: '#/components/schemas/TldResponseShort'
21886
+ title: Response Get Tld Portfolio V1 Tlds Portfolio Get
21887
+ type: array
21173
21888
  description: Successful Response
21174
21889
  '422':
21175
21890
  content:
@@ -21606,58 +22321,112 @@ tags:
21606
22321
  \ Register multiple domains |\n| `domain_update_bulk` | Update multiple domains\
21607
22322
  \ (statuses, nameservers, contacts, renewal mode) |\n| `domain_transfer_bulk`\
21608
22323
  \ | Transfer multiple domains |\n| `dns_zone_create_bulk` | Create multiple DNS\
21609
- \ zones |\n| `dns_zone_update_bulk` | Update multiple DNS zones |\n| `dns_zone_patch_rrsets_bulk`\
21610
- \ | Patch DNS record sets across zones |\n| `dns_zone_patch_records_bulk` | Patch\
21611
- \ individual DNS records across zones |\n| `contact_create_bulk` | Create multiple\
21612
- \ contacts |\n| `parking_create_bulk` | Create parking pages for multiple domains\
21613
- \ |\n| `parking_enable_bulk` | Enable parking on multiple domains |\n| `parking_disable_bulk`\
21614
- \ | Disable parking on multiple domains |\n| `parking_delete_bulk` | Delete parking\
21615
- \ pages for multiple domains |\n\n### Batch Lifecycle\n\nEach job within a batch\
21616
- \ transitions through states:\n\n1. **blocked** \u2014 Waiting for eligibility\
21617
- \ (scheduled via `not_before`, or awaiting capacity)\n2. **queued** \u2014 Eligible\
21618
- \ and awaiting processing\n3. **paused** \u2014 Paused; must be explicitly resumed\
21619
- \ to continue\n4. **running** \u2014 Currently being executed\n5. **succeeded**\
21620
- \ \u2014 Completed successfully\n6. **failed** \u2014 Execution failed (check\
21621
- \ `error_class` and `error_message`)\n7. **canceled** \u2014 Job was canceled\
21622
- \ before completion\n8. **dead_letter** \u2014 Permanently failed after exhausting\
21623
- \ retries\n\nA batch itself has a `status` field that is either `pending` (jobs\
21624
- \ are still in progress) or `complete` (all jobs have reached a terminal state).\n\
21625
- \n### Usage Pattern\n\n1. **Submit a batch** \u2014 `POST /v1/jobs` with an array\
21626
- \ of commands\n2. **Poll for status** \u2014 `GET /v1/jobs/{batch_id}` to check\
21627
- \ progress counts and `progress_percentage`\n3. **Review results** \u2014 `GET\
21628
- \ /v1/jobs/{batch_id}/jobs` to see individual job outcomes\n\n### Managing Batches\n\
21629
- \n- **Pause** \u2014 `POST /v1/jobs/{batch_id}/pause` pauses all eligible jobs\
21630
- \ in the batch\n- **Resume** \u2014 `POST /v1/jobs/{batch_id}/resume` resumes\
21631
- \ all paused jobs\n- **Cancel** \u2014 `DELETE /v1/jobs/{batch_id}` cancels all\
21632
- \ pending jobs in the batch\n\nIndividual jobs can also be paused, resumed, or\
21633
- \ canceled via the `/v1/job/{job_id}` endpoints.\n\n### Limits\n\n- Maximum **50,000\
21634
- \ commands** per batch\n- Bulk commands support up to **1,000 instances** per\
21635
- \ command\n\n### Scheduling\n\nUse `not_before` to schedule batch execution for\
21636
- \ a future time (UTC timestamp). If not provided, processing begins as soon as\
21637
- \ a worker is available.\n\n### Idempotency\n\nEach command can include an optional\
21638
- \ `idempotency_key` to prevent duplicate execution. If a command with the same\
21639
- \ idempotency key has already been processed, it will be skipped.\n\n### Domain\
21640
- \ Status Updates in Batches\n\nThe `domain_update` and `domain_update_bulk` commands\
21641
- \ support two mutually exclusive approaches for modifying domain statuses. These\
21642
- \ work the same way as the `PATCH /v1/domains/{domain_reference}` endpoint \u2014\
21643
- \ see the [Domain management](#tag/Domain-management) documentation for full details\
21644
- \ on `statuses` vs `status_changes`.\n\n#### Using `status_changes` in bulk templates\n\
21645
- \nThe `domain_update_bulk` command is particularly useful with `status_changes`\
21646
- \ when you need to apply the same relative status change across many domains.\
21647
- \ Set `status_changes` in the **template** and list the target domains as **instances**.\
21648
- \ Each instance identifies a domain by either `name` or `domain_id` (but not both):\n\
21649
- \n```json\n{\n \"command\": \"domain_update_bulk\",\n \"payload\": {\n \"\
21650
- template\": {\n \"status_changes\": {\n \"add\": [\"clientTransferProhibited\"\
22324
+ \ zones |\n| `dns_zone_update_bulk` | Replace rrsets (and zone attributes like\
22325
+ \ DNSSEC) across multiple DNS zones |\n| `dns_zone_patch_rrsets_bulk` | Upsert\
22326
+ \ or remove entire rrsets (by name + type) across multiple zones |\n| `dns_zone_patch_records_bulk`\
22327
+ \ | Upsert or remove individual rdata values across multiple zones |\n| `contact_create_bulk`\
22328
+ \ | Create multiple contacts |\n| `parking_create_bulk` | Create parking pages\
22329
+ \ for multiple domains |\n| `parking_enable_bulk` | Enable parking on multiple\
22330
+ \ domains |\n| `parking_disable_bulk` | Disable parking on multiple domains |\n\
22331
+ | `parking_delete_bulk` | Delete parking pages for multiple domains |\n\n### Batch\
22332
+ \ Lifecycle\n\nEach job within a batch transitions through states:\n\n1. **blocked**\
22333
+ \ \u2014 Waiting for eligibility (scheduled via `not_before`, or awaiting capacity)\n\
22334
+ 2. **queued** \u2014 Eligible and awaiting processing\n3. **paused** \u2014 Paused;\
22335
+ \ must be explicitly resumed to continue\n4. **running** \u2014 Currently being\
22336
+ \ executed\n5. **succeeded** \u2014 Completed successfully\n6. **failed** \u2014\
22337
+ \ Execution failed (check `error_class` and `error_message`)\n7. **canceled**\
22338
+ \ \u2014 Job was canceled before completion\n8. **dead_letter** \u2014 Permanently\
22339
+ \ failed after exhausting retries\n\nA batch itself has a `status` field that\
22340
+ \ is either `pending` (jobs are still in progress) or `complete` (all jobs have\
22341
+ \ reached a terminal state).\n\n### Usage Pattern\n\n1. **Submit a batch** \u2014\
22342
+ \ `POST /v1/jobs` with an array of commands\n2. **Poll for status** \u2014 `GET\
22343
+ \ /v1/jobs/{batch_id}` to check progress counts and `progress_percentage`\n3.\
22344
+ \ **Review results** \u2014 `GET /v1/jobs/{batch_id}/jobs` to see individual job\
22345
+ \ outcomes\n\n### Managing Batches\n\n- **Pause** \u2014 `POST /v1/jobs/{batch_id}/pause`\
22346
+ \ pauses all eligible jobs in the batch\n- **Resume** \u2014 `POST /v1/jobs/{batch_id}/resume`\
22347
+ \ resumes all paused jobs\n- **Cancel** \u2014 `DELETE /v1/jobs/{batch_id}` cancels\
22348
+ \ all pending jobs in the batch\n\nIndividual jobs can also be paused, resumed,\
22349
+ \ or canceled via the `/v1/job/{job_id}` endpoints.\n\n### Limits\n\n- Maximum\
22350
+ \ **50,000 commands** per batch\n- Bulk commands support up to **1,000 instances**\
22351
+ \ per command\n\n### Scheduling\n\nUse `not_before` to schedule batch execution\
22352
+ \ for a future time (UTC timestamp). If not provided, processing begins as soon\
22353
+ \ as a worker is available.\n\n### Idempotency\n\nEach command can include an\
22354
+ \ optional `idempotency_key` to prevent duplicate execution. If a command with\
22355
+ \ the same idempotency key has already been processed, it will be skipped.\n\n\
22356
+ ### Domain Status Updates in Batches\n\nThe `domain_update` and `domain_update_bulk`\
22357
+ \ commands support two mutually exclusive approaches for modifying domain statuses.\
22358
+ \ These work the same way as the `PATCH /v1/domains/{domain_reference}` endpoint\
22359
+ \ \u2014 see the [Domain management](#tag/Domain-management) documentation for\
22360
+ \ full details on `statuses` vs `status_changes`.\n\n#### Using `status_changes`\
22361
+ \ in bulk templates\n\nThe `domain_update_bulk` command is particularly useful\
22362
+ \ with `status_changes` when you need to apply the same relative status change\
22363
+ \ across many domains. Set `status_changes` in the **template** and list the target\
22364
+ \ domains as **instances**. Each instance identifies a domain by either `name`\
22365
+ \ or `domain_id` (but not both):\n\n```json\n{\n \"command\": \"domain_update_bulk\"\
22366
+ ,\n \"payload\": {\n \"template\": {\n \"status_changes\": {\n \
22367
+ \ \"add\": [\"clientTransferProhibited\"]\n }\n },\n \"instances\"\
22368
+ : [\n { \"name\": \"example.com\" },\n { \"name\": \"example.net\" },\n\
22369
+ \ { \"name\": \"example.org\" }\n ]\n }\n}\n```\n\n#### Per-domain overrides\n\
22370
+ \nIf an instance provides its own `statuses` or `status_changes` field, it completely\
22371
+ \ overrides the template's status settings for that domain. This lets you apply\
22372
+ \ a default change to most domains while handling exceptions individually:\n\n\
22373
+ ```json\n{\n \"command\": \"domain_update_bulk\",\n \"payload\": {\n \"template\"\
22374
+ : {\n \"status_changes\": {\n \"add\": [\"clientTransferProhibited\"\
21651
22375
  ]\n }\n },\n \"instances\": [\n { \"name\": \"example.com\" },\n\
21652
- \ { \"name\": \"example.net\" },\n { \"name\": \"example.org\" }\n \
21653
- \ ]\n }\n}\n```\n\n#### Per-domain overrides\n\nIf an instance provides its\
21654
- \ own `statuses` or `status_changes` field, it completely overrides the template's\
21655
- \ status settings for that domain. This lets you apply a default change to most\
21656
- \ domains while handling exceptions individually:\n\n```json\n{\n \"command\"\
21657
- : \"domain_update_bulk\",\n \"payload\": {\n \"template\": {\n \"status_changes\"\
21658
- : {\n \"add\": [\"clientTransferProhibited\"]\n }\n },\n \"\
21659
- instances\": [\n { \"name\": \"example.com\" },\n { \"name\": \"special-case.com\"\
21660
- , \"status_changes\": { \"remove\": [\"clientHold\"] } }\n ]\n }\n}\n```\n"
22376
+ \ { \"name\": \"special-case.com\", \"status_changes\": { \"remove\": [\"\
22377
+ clientHold\"] } }\n ]\n }\n}\n```\n\n### DNS Zone Bulk Commands\n\nThe three\
22378
+ \ `dns_zone_*_bulk` commands operate at different levels of granularity. Picking\
22379
+ \ the right one depends on how much of the zone's existing state you want to preserve.\n\
22380
+ \n| Command | Operates on | Use when |\n|---------|-------------|----------|\n\
22381
+ | `dns_zone_update_bulk` | Whole zone | Resetting rrsets (or zone attributes like\
22382
+ \ DNSSEC) across many zones |\n| `dns_zone_patch_rrsets_bulk` | Whole rrsets by\
22383
+ \ `(name, type)` | Replacing *all* records of a given type at a given name |\n\
22384
+ | `dns_zone_patch_records_bulk` | Individual rdata values | Adding or removing\
22385
+ \ a single record without touching siblings |\n\nThese are the bulk equivalents\
22386
+ \ of the single-zone `PUT` and `PATCH` DNS endpoints \u2014 see the [DNS Management](#tag/DNS-Management)\
22387
+ \ documentation for the underlying semantics. The bulk variants accept up to **100\
22388
+ \ ops per instance** for the two patch commands.\n\n#### `dns_zone_update_bulk`\n\
22389
+ \nBulk equivalent of `PUT /v1/dns/{zone_name}/rrsets` plus zone-level attribute\
22390
+ \ updates. For each zone, whatever rrsets you supply become the zone's rrsets\
22391
+ \ \u2014 anything not listed is removed. System-managed record types (SOA, DNSKEY,\
22392
+ \ DS) cannot be set via this command. This is also the command to flip DNSSEC\
22393
+ \ on or off across many zones.\n\nPayload: `template` (shared `rrsets` and `dnssec_status`)\
22394
+ \ + `instances[]` (per-zone overrides).\n\n```json\n{\n \"command\": \"dns_zone_update_bulk\"\
22395
+ ,\n \"payload\": {\n \"template\": {\n \"rrsets\": [\n {\"name\"\
22396
+ : \"@\", \"type\": \"A\", \"ttl\": 300, \"records\": [{\"rdata\": \"203.0.113.10\"\
22397
+ }]}\n ],\n \"dnssec_status\": \"enabled\"\n },\n \"instances\"\
22398
+ : [\n { \"name\": \"example.com\" },\n {\n \"name\": \"example.net\"\
22399
+ ,\n \"rrsets\": [\n {\"name\": \"@\", \"type\": \"A\", \"ttl\"\
22400
+ : 300, \"records\": [{\"rdata\": \"203.0.113.20\"}]}\n ]\n }\n \
22401
+ \ ]\n }\n}\n```\n\n#### `dns_zone_patch_rrsets_bulk`\n\nBulk equivalent of `PATCH\
22402
+ \ /v1/dns/{zone_name}/rrsets`. Each instance is `{ zone_name, ops[] }`, where\
22403
+ \ each op targets an rrset by `(name, type)`:\n\n- `op: \"upsert\"` \u2014 create\
22404
+ \ or **replace** the rrset with the records you provide. Any prior records for\
22405
+ \ that `(name, type)` are discarded.\n- `op: \"remove\"` \u2014 delete the entire\
22406
+ \ rrset (pass `records: []`).\n\n```json\n{\n \"command\": \"dns_zone_patch_rrsets_bulk\"\
22407
+ ,\n \"payload\": {\n \"instances\": [\n {\n \"zone_name\": \"\
22408
+ example.com\",\n \"ops\": [\n {\n \"op\": \"upsert\"\
22409
+ ,\n \"rrset\": {\n \"name\": \"www\", \"type\": \"A\"\
22410
+ , \"ttl\": 300,\n \"records\": [\n {\"rdata\": \"\
22411
+ 203.0.113.10\"},\n {\"rdata\": \"203.0.113.11\"}\n \
22412
+ \ ]\n }\n },\n {\n \"op\": \"remove\"\
22413
+ ,\n \"rrset\": {\"name\": \"old\", \"type\": \"CNAME\", \"ttl\": 300,\
22414
+ \ \"records\": []}\n }\n ]\n }\n ]\n }\n}\n```\n\n####\
22415
+ \ `dns_zone_patch_records_bulk`\n\nBulk equivalent of `PATCH /v1/dns/{zone_name}/records`.\
22416
+ \ Each instance is `{ zone_name, ops[] }`, where each op targets a single `rdata`\
22417
+ \ value inside an rrset. Note the op payload uses a single `rdata` field, not\
22418
+ \ `records[]`.\n\n- `op: \"upsert\"` \u2014 add or update that one rdata value\
22419
+ \ (creates the rrset if it doesn't exist). Sibling records in the rrset are untouched.\n\
22420
+ - `op: \"remove\"` \u2014 remove just that one rdata value. Other records in the\
22421
+ \ rrset remain.\n\n```json\n{\n \"command\": \"dns_zone_patch_records_bulk\"\
22422
+ ,\n \"payload\": {\n \"instances\": [\n {\n \"zone_name\": \"\
22423
+ example.com\",\n \"ops\": [\n {\n \"op\": \"upsert\"\
22424
+ ,\n \"record\": {\n \"name\": \"@\", \"type\": \"MX\"\
22425
+ , \"ttl\": 300,\n \"rdata\": \"5 new-mail.example.com.\"\n \
22426
+ \ }\n },\n {\n \"op\": \"remove\",\n \
22427
+ \ \"record\": {\n \"name\": \"@\", \"type\": \"MX\", \"ttl\"\
22428
+ : 300,\n \"rdata\": \"10 old-mail.example.com.\"\n }\n\
22429
+ \ }\n ]\n }\n ]\n }\n}\n```\n"
21661
22430
  name: jobs
21662
22431
  x-displayName: Jobs
21663
22432
  - description: 'Endpoints for creating and managing contacts.
@@ -21665,9 +22434,60 @@ tags:
21665
22434
  '
21666
22435
  name: contact
21667
22436
  x-displayName: Contacts
21668
- - description: 'Endpoints for managing DNS records.
21669
-
21670
- '
22437
+ - description: "Endpoints for managing DNS zones and records.\n\n### Zone, RRset,\
22438
+ \ and Record\n\nOpusDNS uses standard DNS terminology, and the distinction matters\
22439
+ \ when choosing which endpoint to call:\n\n- **Zone** \u2014 a DNS zone (e.g.,\
22440
+ \ `example.com`). Contains many rrsets.\n- **RRset (Resource Record Set)** \u2014\
22441
+ \ all records that share the same `(name, type)` tuple within a zone (e.g., the\
22442
+ \ set of all `A` records for `www.example.com`). An rrset is the smallest unit\
22443
+ \ DNS resolvers return in a query response.\n- **Record** \u2014 a single `rdata`\
22444
+ \ value inside an rrset (e.g., `203.0.113.10`). An rrset contains one or more\
22445
+ \ records.\n\nThree different update endpoints let you operate at different levels\
22446
+ \ of granularity:\n\n| Endpoint | Scope | Semantics |\n|----------|-------|-----------|\n\
22447
+ | `PUT /v1/dns/{zone_name}/rrsets` | Whole zone | Replaces all user-managed rrsets\
22448
+ \ in the zone |\n| `PATCH /v1/dns/{zone_name}/rrsets` | RRset-level | Upserts\
22449
+ \ or removes entire rrsets by `(name, type)` |\n| `PATCH /v1/dns/{zone_name}/records`\
22450
+ \ | Record-level | Upserts or removes individual rdata values inside an rrset\
22451
+ \ |\n\n### `PUT /v1/dns/{zone_name}/rrsets` \u2014 Replace all rrsets\n\nSupply\
22452
+ \ the complete set of rrsets the zone should contain. Any existing user-managed\
22453
+ \ rrset **not** in the request is removed. System-managed record types (SOA, DNSKEY,\
22454
+ \ DS) are managed by OpusDNS and cannot be set or removed via this endpoint.\n\
22455
+ \nUse this when you have authoritative, end-state data for a zone and want to\
22456
+ \ reset it to that state.\n\n### `PATCH /v1/dns/{zone_name}/rrsets` \u2014 Upsert\
22457
+ \ or remove whole rrsets\n\nSubmit an `ops[]` array where each op targets an rrset\
22458
+ \ by `(name, type)`:\n\n- `op: \"upsert\"` \u2014 create or **replace** the rrset\
22459
+ \ at `(name, type)` with the records you provide. Any records that previously\
22460
+ \ existed at that `(name, type)` are discarded.\n- `op: \"remove\"` \u2014 delete\
22461
+ \ the entire rrset at `(name, type)` (pass `records: []`).\n\n```json\n{\n \"\
22462
+ ops\": [\n {\n \"op\": \"upsert\",\n \"rrset\": {\n \"name\"\
22463
+ : \"www\",\n \"type\": \"A\",\n \"ttl\": 300,\n \"records\"\
22464
+ : [\n {\"rdata\": \"203.0.113.10\"},\n {\"rdata\": \"203.0.113.11\"\
22465
+ }\n ]\n }\n },\n {\n \"op\": \"remove\",\n \"rrset\"\
22466
+ : {\"name\": \"old\", \"type\": \"CNAME\", \"ttl\": 300, \"records\": []}\n \
22467
+ \ }\n ]\n}\n```\n\nUse this when you want to define the complete set of records\
22468
+ \ for a given `(name, type)` \u2014 e.g., \"`www` should have exactly these two\
22469
+ \ A records\". Any other A records for `www` that currently exist will be removed.\n\
22470
+ \n### `PATCH /v1/dns/{zone_name}/records` \u2014 Upsert or remove individual records\n\
22471
+ \nSubmit an `ops[]` array where each op targets a single `rdata` value inside\
22472
+ \ an rrset. Note the op payload uses a single `rdata` field, not `records[]`.\n\
22473
+ \n- `op: \"upsert\"` \u2014 add or update that one rdata value. The containing\
22474
+ \ rrset is created if it doesn't exist; sibling records in the rrset are left\
22475
+ \ alone.\n- `op: \"remove\"` \u2014 remove just that one rdata value. Other records\
22476
+ \ in the same rrset remain.\n\n```json\n{\n \"ops\": [\n {\n \"op\":\
22477
+ \ \"upsert\",\n \"record\": {\n \"name\": \"@\", \"type\": \"MX\"\
22478
+ , \"ttl\": 300,\n \"rdata\": \"5 new-mail.example.com.\"\n }\n \
22479
+ \ },\n {\n \"op\": \"remove\",\n \"record\": {\n \"name\"\
22480
+ : \"@\", \"type\": \"MX\", \"ttl\": 300,\n \"rdata\": \"10 old-mail.example.com.\"\
22481
+ \n }\n }\n ]\n}\n```\n\nUse this when you need to surgically add or remove\
22482
+ \ an individual record without disturbing sibling records in the same rrset \u2014\
22483
+ \ e.g., \"add one more MX target\", \"rotate one A record IP out of a pool\".\n\
22484
+ \n### Choosing the right endpoint\n\n| Scenario | Endpoint |\n|----------|----------|\n\
22485
+ | Migrating a zone from another provider; want to set it to a known state | `PUT\
22486
+ \ /rrsets` |\n| Replacing *all* records of a given name+type (e.g., the full MX\
22487
+ \ set) | `PATCH /rrsets` with `upsert` |\n| Adding or removing a single record\
22488
+ \ without touching its siblings | `PATCH /records` |\n| Swapping a name from CNAME\
22489
+ \ to A | `PATCH /rrsets` with `remove` + `upsert` |\n\nFor bulk variants that\
22490
+ \ operate across many zones in a single request, see the [Jobs](#tag/Jobs) documentation.\n"
21671
22491
  name: dns
21672
22492
  x-displayName: DNS Management
21673
22493
  - description: "Endpoints for creating and managing domains.\n\n### Domain References\n\