@opusdns/api 0.82.0 → 0.84.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
@@ -3498,6 +3498,20 @@ components:
3498
3498
  - pagination
3499
3499
  title: Pagination[Organization]
3500
3500
  type: object
3501
+ Pagination_Redirect_:
3502
+ properties:
3503
+ pagination:
3504
+ $ref: '#/components/schemas/PaginationMetadata'
3505
+ results:
3506
+ items:
3507
+ $ref: '#/components/schemas/Redirect'
3508
+ title: Results
3509
+ type: array
3510
+ required:
3511
+ - results
3512
+ - pagination
3513
+ title: Pagination[Redirect]
3514
+ type: object
3501
3515
  Pagination_User_:
3502
3516
  properties:
3503
3517
  pagination:
@@ -3761,6 +3775,141 @@ components:
3761
3775
  title: Rdap Server
3762
3776
  title: RdapBase
3763
3777
  type: object
3778
+ Redirect:
3779
+ properties:
3780
+ redirect_code:
3781
+ title: Redirect Code
3782
+ type: integer
3783
+ request_domain:
3784
+ title: Request Domain
3785
+ type: string
3786
+ request_path:
3787
+ title: Request Path
3788
+ type: string
3789
+ request_protocol:
3790
+ title: Request Protocol
3791
+ type: string
3792
+ request_subdomain:
3793
+ title: Request Subdomain
3794
+ type: string
3795
+ target_domain:
3796
+ title: Target Domain
3797
+ type: string
3798
+ target_path:
3799
+ title: Target Path
3800
+ type: string
3801
+ target_protocol:
3802
+ title: Target Protocol
3803
+ type: string
3804
+ target_subdomain:
3805
+ title: Target Subdomain
3806
+ type: string
3807
+ required:
3808
+ - request_protocol
3809
+ - request_subdomain
3810
+ - request_path
3811
+ - target_protocol
3812
+ - target_subdomain
3813
+ - target_domain
3814
+ - target_path
3815
+ - redirect_code
3816
+ - request_domain
3817
+ title: Redirect
3818
+ type: object
3819
+ RedirectPatchOp:
3820
+ properties:
3821
+ op:
3822
+ $ref: '#/components/schemas/PatchOp'
3823
+ redirect:
3824
+ anyOf:
3825
+ - $ref: '#/components/schemas/Redirect'
3826
+ - $ref: '#/components/schemas/RedirectRemove'
3827
+ title: Redirect
3828
+ required:
3829
+ - op
3830
+ - redirect
3831
+ title: RedirectPatchOp
3832
+ type: object
3833
+ RedirectPatchOps:
3834
+ properties:
3835
+ ops:
3836
+ items:
3837
+ $ref: '#/components/schemas/RedirectPatchOp'
3838
+ title: Ops
3839
+ type: array
3840
+ required:
3841
+ - ops
3842
+ title: RedirectPatchOps
3843
+ type: object
3844
+ RedirectRemove:
3845
+ properties:
3846
+ request_domain:
3847
+ title: Request Domain
3848
+ type: string
3849
+ request_path:
3850
+ title: Request Path
3851
+ type: string
3852
+ request_protocol:
3853
+ title: Request Protocol
3854
+ type: string
3855
+ request_subdomain:
3856
+ title: Request Subdomain
3857
+ type: string
3858
+ required:
3859
+ - request_protocol
3860
+ - request_subdomain
3861
+ - request_path
3862
+ - request_domain
3863
+ title: RedirectRemove
3864
+ type: object
3865
+ RedirectSet:
3866
+ properties:
3867
+ redirects:
3868
+ items:
3869
+ $ref: '#/components/schemas/RedirectUpdate'
3870
+ title: Redirects
3871
+ type: array
3872
+ required:
3873
+ - redirects
3874
+ title: RedirectSet
3875
+ type: object
3876
+ RedirectUpdate:
3877
+ properties:
3878
+ redirect_code:
3879
+ title: Redirect Code
3880
+ type: integer
3881
+ request_path:
3882
+ title: Request Path
3883
+ type: string
3884
+ request_protocol:
3885
+ title: Request Protocol
3886
+ type: string
3887
+ request_subdomain:
3888
+ title: Request Subdomain
3889
+ type: string
3890
+ target_domain:
3891
+ title: Target Domain
3892
+ type: string
3893
+ target_path:
3894
+ title: Target Path
3895
+ type: string
3896
+ target_protocol:
3897
+ title: Target Protocol
3898
+ type: string
3899
+ target_subdomain:
3900
+ title: Target Subdomain
3901
+ type: string
3902
+ required:
3903
+ - request_protocol
3904
+ - request_subdomain
3905
+ - request_path
3906
+ - target_protocol
3907
+ - target_subdomain
3908
+ - target_domain
3909
+ - target_path
3910
+ - redirect_code
3911
+ title: RedirectUpdate
3912
+ type: object
3764
3913
  RegistrantChangeType:
3765
3914
  enum:
3766
3915
  - update
@@ -4760,44 +4909,151 @@ components:
4760
4909
  tokenUrl: token
4761
4910
  type: oauth2
4762
4911
  info:
4763
- description: '# Authentication
4764
-
4765
-
4766
- Describes authentication approach.
4767
-
4768
-
4769
-
4770
- # Resource IDs
4771
-
4772
-
4773
- The API uses extensively [Type IDs](https://github.com/jetify-com/typeid): type-safe,
4774
- K-sortable, globally unique identifier inspired by Stripe IDs. They can be easily
4775
- identified with a format like `prefix_01jxe1nzrmf78scaqbkjx0va0f`. The `prefix`
4776
- gives context to the ID - some examples include `user`, `organization`, `domain`.
4777
- The rest of the ID is a 128-bit UUIDv7 encoded as a 26-character string using
4778
- a modified base32 encoding. See [formal specification for details](https://github.com/jetify-com/typeid/tree/main/spec).
4779
-
4780
-
4781
- This approach allows using unique IDs (UUIDv7), preventing iteration attacks,
4782
- while also easily identifying the "namespace" of the ID. `01975c1f-a15a-7f6c-a5ce-b75fe33de079`
4783
- is hardly distuingishable from `01975c1f-f120-7874-8dc2-de7d728bf261` by humans
4784
- on first glance. However, when represented as Type IDs, they could be represented
4785
- as `user_01jxe1z8atfxpabknqbzhkvr3s` and `domain_01jxe1zw90f1t8vgpyfns8qwk1`,
4786
- immediately making it easier to differentiate between them.
4787
-
4788
-
4789
- Additionally, this gives type safety and additional validation that can be done.
4790
- There''s [libraries available for many languages to make handling Type IDs easier](https://github.com/jetify-com/typeid?tab=readme-ov-file#official-implementations-by-jetify).
4791
- We''re using them ourselves on the backend to quickly catch mistakes like passing
4792
- the wrong Type ID (passing a user ID like `user_01jxe1z8atfxpabknqbzhkvr3s` where
4793
- a domain ID `domain_01jxe1zw90f1t8vgpyfns8qwk1` was expected).
4794
-
4795
-
4796
-
4797
- '
4912
+ description: "# Authentication\n\nDescribes authentication approach.\n\n\n## DNS\
4913
+ \ validation overview (general \u2192 specific) (generated by Cursor on 15th October\
4914
+ \ 2025)\n\nThis document summarizes all DNS validation rules implemented in the\
4915
+ \ codebase and exercised by unit tests. It starts with general hostname requirements\
4916
+ \ and narrows down to zone-, RRSet-, and record-type-specific rules.\n\n### General\
4917
+ \ hostname rules\n\n- **Required trailing dot**: Hostnames must end with a period.\n\
4918
+ - **Lowercase only**: Hostnames are case-insensitive in DNS, but the system enforces\
4919
+ \ lowercase.\n- **Total length**: Must be < 255 octets.\n- **TLD recognized**:\
4920
+ \ The suffix (TLD) must be recognized by `tldextract`.\n- **Allowed characters**:\n\
4921
+ \ - For RRSet types that allow underscores: `- _ . *` plus alphanumerics\n -\
4922
+ \ For all other types: `- . *` plus alphanumerics\n - If an underscore appears\
4923
+ \ on a type that does not allow it, validation fails with a type-aware message.\n\
4924
+ - **Periods constraints**:\n - No consecutive periods (`..`).\n - Cannot start\
4925
+ \ with a period.\n- **Label-by-label checks**:\n - Labels cannot be empty (e.g.,\
4926
+ \ from `..`).\n - Leftmost wildcard `*` is allowed as its own label; any `*`\
4927
+ \ elsewhere (or combined with other chars) is invalid.\n - Each label must be\
4928
+ \ \u2264 63 octets.\n - Each label must end with a letter or digit (no trailing\
4929
+ \ `-` or `_`).\n\nTypes that allow underscores in hostnames: `CNAME`, `ALIAS`,\
4930
+ \ `TXT`, `CAA`, `SRV`, `SMIMEA`, `TLSA`, `URI`.\n\nUnit tests: `tests/unit/models/test_dns_validation.py::TestHostnameValidation`,\
4931
+ \ `::TestLabelValidation`.\n\n### Zone-level validation\n\n- **Blocklist**: Certain\
4932
+ \ hostnames are blocked (checked without the trailing dot). If the zone name matches\
4933
+ \ the blocklist, validation fails.\n- **Zone name hostname checks**: Zone name\
4934
+ \ is validated with the general hostname rules.\n- **RRSet validation aggregation**:\
4935
+ \ Each RRSet is validated; all RRSet and record errors are aggregated under `errors[\"\
4936
+ rrsets\"]` keyed by RRSet name.\n- **CNAME conflicts (RFC 1034/2181 semantics)**:\n\
4937
+ \ - A `CNAME` at a name cannot coexist with any other non-DNSSEC type at the\
4938
+ \ same name.\n - `DNSKEY`/`DS` (DNSSEC) are permitted alongside `CNAME`.\n- **MX\
4939
+ \ target validation (additional policy)**:\n - MX priority must be an integer\
4940
+ \ in [0, 65535].\n - MX target cannot be a `CNAME`.\n - MX target cannot be\
4941
+ \ an IP address (v4 or v6).\n- **Wildcard conflicts**:\n - `NS` records cannot\
4942
+ \ use wildcard names (e.g., `*.example.com.` is invalid for `NS`).\n- **ALIAS\
4943
+ \ conflicts and DNSSEC interaction (PowerDNS semantics)**:\n - If any `ALIAS`\
4944
+ \ exists in a zone that also contains DNSSEC types (`DNSKEY` or `DS`), validation\
4945
+ \ fails: ALIAS is not supported in DNSSEC-enabled zones.\n - At the zone apex,\
4946
+ \ `ALIAS` can only coexist with `SOA` and `NS` (and not with other non-DNSSEC\
4947
+ \ types).\n - At non-apex names, an `ALIAS` cannot coexist with any other record\
4948
+ \ type (behaves like `CNAME` exclusivity).\n\nUnit tests: `tests/unit/models/test_dns_validation.py::TestZoneValidation`,\
4949
+ \ `tests/unit/service/dns/test_additional_dns_validations.py` (MX, wildcard, ALIAS),\
4950
+ \ `tests/unit/service/dns/test_rrset_validation.py` (relative names and invalid\
4951
+ \ zone names).\n\n### RRSet-level validation\n\n- **Name must be inside zone**:\
4952
+ \ RRSet name must either equal the zone apex or end with `.{zone_name}`.\n- **RRSet\
4953
+ \ name hostname checks**: RRSet names are validated with general hostname rules,\
4954
+ \ taking into account RRSet type for underscore allowance.\n- **Relative name\
4955
+ \ normalization** (service-level helper):\n - `@` or empty name resolves to the\
4956
+ \ zone apex.\n - Names without a trailing dot become FQDNs relative to the zone.\n\
4957
+ \ - Already-FQDN names are preserved.\n- **Error aggregation shape for RRSet**:\n\
4958
+ \ - RRSet-level errors are listed under `errors[\"rrsets\"][<rrset_name>][\"\
4959
+ rrset\"]`.\n - Record-level errors are listed under `errors[\"rrsets\"][<rrset_name>][\"\
4960
+ records\"][<record_rdata>]`.\n\nUnit tests: `tests/unit/service/dns/test_rrset_validation.py`\
4961
+ \ (relative `@`, relative `www`, invalid `invalid-subdomain-`), `tests/unit/models/test_dns_validation.py::TestZoneValidation`\
4962
+ \ (invalid RRSet names).\n\n### Record-level validation engine\n\n- **Parsing**:\
4963
+ \ For all supported types except `ALIAS`, the system delegates RDATA parsing to\
4964
+ \ `dnspython` via `dns.rdata.from_text` for the appropriate type.\n- **Target\
4965
+ \ hostnames**: For `CNAME`, `NS`, `PTR`, `SRV`, and `MX`, the parsed target hostname\
4966
+ \ (`target` or `exchange`) is further validated with the general hostname rules\
4967
+ \ and underscore allowance for the RRSet type.\n- **RDATA normalization before\
4968
+ \ parse**:\n - `CNAME`, `NS`, `PTR`: the RDATA hostname is normalized to lowercase\
4969
+ \ with a trailing dot.\n - `SRV`: the trailing hostname portion is normalized;\
4970
+ \ numeric fields are preserved.\n - `MX`: the trailing target hostname is normalized;\
4971
+ \ the priority is preserved.\n- **ALIAS special case**: `ALIAS` RDATA is treated\
4972
+ \ as a hostname and validated directly (not parsed by `dnspython`) and must be\
4973
+ \ a valid hostname per the RRSet\u2019s underscore rules.\n- **Error mapping**:\
4974
+ \ `dnspython` exceptions are mapped to user-facing messages such as:\n - \"Invalid\
4975
+ \ <TYPE> record format: <rdata>\"\n - \"Invalid <TYPE> record data: <rdata>\"\
4976
+ \n - \"<TYPE> record validation failed: <detail>\"\n - The top-level detail\
4977
+ \ for the record error is standardized to \"<TYPE> record is not in the expected\
4978
+ \ format\".\n\nUnit tests: `tests/unit/models/test_dns_validation.py::TestRecordValidationErrors`\
4979
+ \ (A, AAAA, CNAME, MX malformed), plus aggregation and structure assertions.\n\
4980
+ \n### Type-specific rules and examples\n\n- **A**:\n - RDATA must be a valid\
4981
+ \ IPv4 address.\n - Example invalid: `not.an.ip` \u2192 parse fails.\n- **AAAA**:\n\
4982
+ \ - RDATA must be a valid IPv6 address.\n - Example invalid: `??::completely::invalid::ipv6`\
4983
+ \ \u2192 parse fails.\n- **CNAME**:\n - RDATA is a hostname; target is validated;\
4984
+ \ name-level exclusivity enforced at zone level (cannot coexist with other non-DNSSEC\
4985
+ \ types at same name).\n - Underscores allowed in name/target.\n- **MX**:\n \
4986
+ \ - RDATA: `<priority> <target-hostname>`\n - Priority range: 0\u201365535 (integer).\
4987
+ \ Invalid or out-of-range triggers errors.\n - Target hostname cannot be a CNAME\
4988
+ \ name, and cannot be an IP address.\n - Target hostname is normalized and validated.\n\
4989
+ - **NS**:\n - RDATA is a hostname; target is validated.\n - NS cannot use wildcard\
4990
+ \ names (i.e., RRSet name cannot be `*.example.com.`).\n- **PTR**:\n - RDATA\
4991
+ \ is a hostname; target is validated.\n- **SRV**:\n - RDATA: `<priority> <weight>\
4992
+ \ <port> <target-hostname>`; target hostname normalized and validated.\n - Underscores\
4993
+ \ allowed (service labels per RFC 2782).\n- **TXT**:\n - Delegated to `dnspython`\
4994
+ \ for parsing; underscores allowed in names.\n - Note: A TODO exists to enforce\
4995
+ \ quotes for TXT content in the future.\n- **CAA**, **SMIMEA**, **TLSA**, **URI**:\n\
4996
+ \ - Delegated to `dnspython` for parsing; underscores allowed in names.\n- **ALIAS**:\n\
4997
+ \ - Treated like a hostname alias (not an RFC standard RRType); normalized and\
4998
+ \ validated as a hostname.\n - Conflicts/DNSSEC rules as described in the zone-level\
4999
+ \ section.\n- **DNSKEY**, **DS** (DNSSEC):\n - Not parsed/validated here beyond\
5000
+ \ coexistence logic; allowed to coexist with `CNAME` but disallowed with `ALIAS`\
5001
+ \ when DNSSEC is present.\n\nUnit tests: cover A/AAAA/CNAME/MX malformed cases;\
5002
+ \ underscore handling across many types; ALIAS, wildcard, and DNSSEC compatibility\
5003
+ \ in `tests/unit/service/dns/test_additional_dns_validations.py`.\n\n### Wildcard\
5004
+ \ handling\n\n- `*` is allowed only as the entire leftmost label of a name (e.g.,\
5005
+ \ `*.example.com.`).\n- Any `*` embedded within a label or not in the leftmost\
5006
+ \ position is invalid.\n- `NS` records cannot be defined at wildcard names.\n\n\
5007
+ Unit tests: Wildcard NS invalid; wildcard A alongside explicit siblings and at\
5008
+ \ different levels is allowed.\n\n### Underscore handling (by RRSet type)\n\n\
5009
+ - Allowed in hostnames for types: `CNAME`, `ALIAS`, `TXT`, `CAA`, `SRV`, `SMIMEA`,\
5010
+ \ `TLSA`, `URI`.\n- Disallowed for: `A`, `AAAA`, `NS`, `MX`, `PTR`, `SOA`, `DNSKEY`,\
5011
+ \ `DS`.\n- Applies both at the start of labels (e.g., `_service`) and in the middle\
5012
+ \ (`my_service`), per tests.\n\nUnit tests: `tests/unit/models/test_dns_validation.py::TestUnderscoreHandling`\
5013
+ \ parameterized cases across types.\n\n### Blocked hostnames\n\n- A curated list\
5014
+ \ of blocked apex names (e.g., major providers\u2019 zones) cannot be added as\
5015
+ \ zones. The check is performed on the dotted-stripped value (no trailing dot).\n\
5016
+ \n### Error response shape\n\n- Zone-level failure raises `DnsZoneValidationError`\
5017
+ \ with `extras.errors` containing:\n - `zone_name`: either a string or a nested\
5018
+ \ mapping of specific hostname errors\n - `rrsets`: mapping of RRSet name \u2192\
5019
+ \ `{ \"rrset\": [..], \"records\": { rdata \u2192 [..] } }`\n - Optional sections\
5020
+ \ when relevant: `cname_conflicts`, `mx_validation`, `wildcard_conflicts`, `alias_conflicts`\n\
5021
+ - RRSet-level failure raises `DnsRrsetValidationError` with a similarly structured\
5022
+ \ `errors` mapping for that RRSet.\n- Record-level failures are aggregated into\
5023
+ \ the RRSet structure above.\n\nUnit tests: Assert shapes and representative messages\
5024
+ \ in `tests/unit/models/test_dns_validation.py::TestRecordValidationErrors::test_error_response_structure`.\n\
5025
+ \n### Key normalizers and helpers\n\n- `normalize_zone_name(s)`: lowercases and\
5026
+ \ ensures a trailing dot.\n- `convert_rrset_name(name, zone)`: resolves `@`/empty\
5027
+ \ to apex and converts relative names to FQDNs under the zone.\n- The record validator\
5028
+ \ normalizes hostnames within RDATA for `CNAME`, `NS`, `PTR`, `SRV`, and `MX`\
5029
+ \ before parsing/validation.\n\n### API behavior around trailing dots (for context)\n\
5030
+ \n- API endpoints accept both with/without trailing dot in the path; zone names\
5031
+ \ are normalized internally. This is orthogonal to validation rules but relevant\
5032
+ \ to how names are handled at the boundary.\n\n---\n\nReferences (tests):\n- `tests/unit/models/test_dns_validation.py`\n\
5033
+ - `tests/unit/service/dns/test_additional_dns_validations.py`\n- `tests/unit/service/dns/test_rrset_validation.py`\n\
5034
+ - `tests/unit/api/dns/test_v1.py`, `tests/unit/api/dns/test_dns.py` (API normalization)\n\
5035
+ \nReferences (implementation):\n- `common/models/dns/validation.py`\n- `common/services/dns/utils.py`\n\
5036
+ - `common/lib/utils/dns.py`\n- `common/models/dns/blocked_domains.py`\n\n\n\n\n\
5037
+ # Resource IDs\n\nThe API uses extensively [Type IDs](https://github.com/jetify-com/typeid):\
5038
+ \ type-safe, K-sortable, globally unique identifier inspired by Stripe IDs. They\
5039
+ \ can be easily identified with a format like `prefix_01jxe1nzrmf78scaqbkjx0va0f`.\
5040
+ \ The `prefix` gives context to the ID - some examples include `user`, `organization`,\
5041
+ \ `domain`. The rest of the ID is a 128-bit UUIDv7 encoded as a 26-character string\
5042
+ \ using a modified base32 encoding. See [formal specification for details](https://github.com/jetify-com/typeid/tree/main/spec).\n\
5043
+ \nThis approach allows using unique IDs (UUIDv7), preventing iteration attacks,\
5044
+ \ while also easily identifying the \"namespace\" of the ID. `01975c1f-a15a-7f6c-a5ce-b75fe33de079`\
5045
+ \ is hardly distuingishable from `01975c1f-f120-7874-8dc2-de7d728bf261` by humans\
5046
+ \ on first glance. However, when represented as Type IDs, they could be represented\
5047
+ \ as `user_01jxe1z8atfxpabknqbzhkvr3s` and `domain_01jxe1zw90f1t8vgpyfns8qwk1`,\
5048
+ \ immediately making it easier to differentiate between them.\n\nAdditionally,\
5049
+ \ this gives type safety and additional validation that can be done. There's [libraries\
5050
+ \ available for many languages to make handling Type IDs easier](https://github.com/jetify-com/typeid?tab=readme-ov-file#official-implementations-by-jetify).\
5051
+ \ We're using them ourselves on the backend to quickly catch mistakes like passing\
5052
+ \ the wrong Type ID (passing a user ID like `user_01jxe1z8atfxpabknqbzhkvr3s`\
5053
+ \ where a domain ID `domain_01jxe1zw90f1t8vgpyfns8qwk1` was expected).\n\n\n"
4798
5054
  summary: OpusDNS - your gateway to a seamless domain management experience.
4799
5055
  title: OpusDNS API
4800
- version: 2025-10-10-154932
5056
+ version: 2025-10-15-082524
4801
5057
  x-logo:
4802
5058
  altText: OpusDNS API Reference
4803
5059
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -6096,6 +6352,248 @@ paths:
6096
6352
  summary: Update Zone Rrsets
6097
6353
  tags:
6098
6354
  - dns
6355
+ /v1/domain-forwards:
6356
+ patch:
6357
+ operationId: patch_redirects_v1_domain_forwards_patch
6358
+ requestBody:
6359
+ content:
6360
+ application/json:
6361
+ schema:
6362
+ $ref: '#/components/schemas/RedirectPatchOps'
6363
+ required: true
6364
+ responses:
6365
+ '204':
6366
+ description: Successful Response
6367
+ '422':
6368
+ content:
6369
+ application/problem+json:
6370
+ schema:
6371
+ $ref: '#/components/schemas/HTTPValidationError'
6372
+ description: Validation Error
6373
+ security:
6374
+ - OAuth2PasswordBearer: []
6375
+ summary: Patch Redirects
6376
+ tags:
6377
+ - domain_forward
6378
+ /v1/domain-forwards/{zone_name}:
6379
+ delete:
6380
+ operationId: delete_redirects_v1_domain_forwards__zone_name__delete
6381
+ parameters:
6382
+ - description: DNS zone name (trailing dot optional)
6383
+ in: path
6384
+ name: zone_name
6385
+ required: true
6386
+ schema:
6387
+ description: DNS zone name (trailing dot optional)
6388
+ title: Zone Name
6389
+ type: string
6390
+ responses:
6391
+ '204':
6392
+ description: Successful Response
6393
+ '422':
6394
+ content:
6395
+ application/problem+json:
6396
+ schema:
6397
+ $ref: '#/components/schemas/HTTPValidationError'
6398
+ description: Validation Error
6399
+ security:
6400
+ - OAuth2PasswordBearer: []
6401
+ summary: Delete Redirects
6402
+ tags:
6403
+ - domain_forward
6404
+ get:
6405
+ operationId: get_redirects_v1_domain_forwards__zone_name__get
6406
+ parameters:
6407
+ - description: DNS zone name (trailing dot optional)
6408
+ in: path
6409
+ name: zone_name
6410
+ required: true
6411
+ schema:
6412
+ description: DNS zone name (trailing dot optional)
6413
+ title: Zone Name
6414
+ type: string
6415
+ - in: query
6416
+ name: page
6417
+ required: false
6418
+ schema:
6419
+ default: 1
6420
+ minimum: 1
6421
+ title: Page
6422
+ type: integer
6423
+ - in: query
6424
+ name: page_size
6425
+ required: false
6426
+ schema:
6427
+ default: 10
6428
+ maximum: 100
6429
+ minimum: 1
6430
+ title: Page Size
6431
+ type: integer
6432
+ responses:
6433
+ '200':
6434
+ content:
6435
+ application/json:
6436
+ schema:
6437
+ $ref: '#/components/schemas/Pagination_Redirect_'
6438
+ description: Successful Response
6439
+ '422':
6440
+ content:
6441
+ application/problem+json:
6442
+ schema:
6443
+ $ref: '#/components/schemas/HTTPValidationError'
6444
+ description: Validation Error
6445
+ security:
6446
+ - OAuth2PasswordBearer: []
6447
+ summary: Get Redirects
6448
+ tags:
6449
+ - domain_forward
6450
+ post:
6451
+ operationId: create_redirects_v1_domain_forwards__zone_name__post
6452
+ parameters:
6453
+ - description: DNS zone name (trailing dot optional)
6454
+ in: path
6455
+ name: zone_name
6456
+ required: true
6457
+ schema:
6458
+ description: DNS zone name (trailing dot optional)
6459
+ title: Zone Name
6460
+ type: string
6461
+ requestBody:
6462
+ content:
6463
+ application/json:
6464
+ schema:
6465
+ $ref: '#/components/schemas/RedirectSet'
6466
+ required: true
6467
+ responses:
6468
+ '201':
6469
+ description: Successful Response
6470
+ '409':
6471
+ content:
6472
+ application/problem+json:
6473
+ example:
6474
+ code: ERROR_DOMAIN_FORWARD_REDIRECT_ALREADY_EXISTS
6475
+ detail: Redirect already exists for A, d, d, i, t, i, o, n, a, l, ,
6476
+ e, r, r, o, r, , c, o, n, t, e, x, t, .
6477
+ status: 409
6478
+ title: Domain Forward Error
6479
+ type: domain-forward-redirect-already-exists
6480
+ schema:
6481
+ $ref: '#/components/schemas/Problem'
6482
+ description: Conflict
6483
+ '422':
6484
+ content:
6485
+ application/problem+json:
6486
+ schema:
6487
+ $ref: '#/components/schemas/HTTPValidationError'
6488
+ description: Validation Error
6489
+ security:
6490
+ - OAuth2PasswordBearer: []
6491
+ summary: Create Redirects
6492
+ tags:
6493
+ - domain_forward
6494
+ put:
6495
+ operationId: update_redirects_v1_domain_forwards__zone_name__put
6496
+ parameters:
6497
+ - description: DNS zone name (trailing dot optional)
6498
+ in: path
6499
+ name: zone_name
6500
+ required: true
6501
+ schema:
6502
+ description: DNS zone name (trailing dot optional)
6503
+ title: Zone Name
6504
+ type: string
6505
+ requestBody:
6506
+ content:
6507
+ application/json:
6508
+ schema:
6509
+ $ref: '#/components/schemas/RedirectSet'
6510
+ required: true
6511
+ responses:
6512
+ '204':
6513
+ description: Successful Response
6514
+ '409':
6515
+ content:
6516
+ application/problem+json:
6517
+ example:
6518
+ code: ERROR_DOMAIN_FORWARD_REDIRECT_NOT_EXISTS
6519
+ detail: Redirect does not exist for A, d, d, i, t, i, o, n, a, l, ,
6520
+ e, r, r, o, r, , c, o, n, t, e, x, t, .
6521
+ status: 409
6522
+ title: Domain Forward Error
6523
+ type: domain-forward-redirect-not-exists
6524
+ schema:
6525
+ $ref: '#/components/schemas/Problem'
6526
+ description: Conflict
6527
+ '422':
6528
+ content:
6529
+ application/problem+json:
6530
+ schema:
6531
+ $ref: '#/components/schemas/HTTPValidationError'
6532
+ description: Validation Error
6533
+ security:
6534
+ - OAuth2PasswordBearer: []
6535
+ summary: Update Redirects
6536
+ tags:
6537
+ - domain_forward
6538
+ /v1/domain-forwards/{zone_name}/disable:
6539
+ patch:
6540
+ operationId: disable_domain_forward_v1_domain_forwards__zone_name__disable_patch
6541
+ parameters:
6542
+ - description: DNS zone name (trailing dot optional)
6543
+ in: path
6544
+ name: zone_name
6545
+ required: true
6546
+ schema:
6547
+ description: DNS zone name (trailing dot optional)
6548
+ title: Zone Name
6549
+ type: string
6550
+ responses:
6551
+ '204':
6552
+ description: Successful Response
6553
+ '422':
6554
+ content:
6555
+ application/problem+json:
6556
+ schema:
6557
+ $ref: '#/components/schemas/HTTPValidationError'
6558
+ description: Validation Error
6559
+ security:
6560
+ - OAuth2PasswordBearer: []
6561
+ summary: Disable Domain Forward
6562
+ tags:
6563
+ - domain_forward
6564
+ /v1/domain-forwards/{zone_name}/enable:
6565
+ patch:
6566
+ operationId: enable_domain_forward_v1_domain_forwards__zone_name__enable_patch
6567
+ parameters:
6568
+ - description: DNS zone name (trailing dot optional)
6569
+ in: path
6570
+ name: zone_name
6571
+ required: true
6572
+ schema:
6573
+ description: DNS zone name (trailing dot optional)
6574
+ title: Zone Name
6575
+ type: string
6576
+ - in: query
6577
+ name: auto_create_zone
6578
+ required: false
6579
+ schema:
6580
+ default: false
6581
+ title: Auto Create Zone
6582
+ type: boolean
6583
+ responses:
6584
+ '204':
6585
+ description: Successful Response
6586
+ '422':
6587
+ content:
6588
+ application/problem+json:
6589
+ schema:
6590
+ $ref: '#/components/schemas/HTTPValidationError'
6591
+ description: Validation Error
6592
+ security:
6593
+ - OAuth2PasswordBearer: []
6594
+ summary: Enable Domain Forward
6595
+ tags:
6596
+ - domain_forward
6099
6597
  /v1/domain-search/suggest:
6100
6598
  get:
6101
6599
  description: Get a list of domain suggestions based on a search query
@@ -7440,6 +7938,13 @@ paths:
7440
7938
  description: DNS zone name (trailing dot optional)
7441
7939
  title: Zone Name
7442
7940
  type: string
7941
+ - in: query
7942
+ name: auto_create_zone
7943
+ required: false
7944
+ schema:
7945
+ default: false
7946
+ title: Auto Create Zone
7947
+ type: boolean
7443
7948
  responses:
7444
7949
  '204':
7445
7950
  description: Successful Response