@opusdns/api 0.84.0 → 0.85.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/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "@opusdns/api-spec-ts-generator": "^0.9.1"
4
4
  },
5
5
  "name": "@opusdns/api",
6
- "version": "0.84.0",
6
+ "version": "0.85.0",
7
7
  "description": "TypeScript types for the OpusDNS OpenAPI specification",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
package/src/openapi.yaml CHANGED
@@ -4909,151 +4909,44 @@ components:
4909
4909
  tokenUrl: token
4910
4910
  type: oauth2
4911
4911
  info:
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"
4912
+ description: '# Authentication
4913
+
4914
+
4915
+ Describes authentication approach.
4916
+
4917
+
4918
+
4919
+ # Resource IDs
4920
+
4921
+
4922
+ The API uses extensively [Type IDs](https://github.com/jetify-com/typeid): type-safe,
4923
+ K-sortable, globally unique identifier inspired by Stripe IDs. They can be easily
4924
+ identified with a format like `prefix_01jxe1nzrmf78scaqbkjx0va0f`. The `prefix`
4925
+ gives context to the ID - some examples include `user`, `organization`, `domain`.
4926
+ The rest of the ID is a 128-bit UUIDv7 encoded as a 26-character string using
4927
+ a modified base32 encoding. See [formal specification for details](https://github.com/jetify-com/typeid/tree/main/spec).
4928
+
4929
+
4930
+ This approach allows using unique IDs (UUIDv7), preventing iteration attacks,
4931
+ while also easily identifying the "namespace" of the ID. `01975c1f-a15a-7f6c-a5ce-b75fe33de079`
4932
+ is hardly distuingishable from `01975c1f-f120-7874-8dc2-de7d728bf261` by humans
4933
+ on first glance. However, when represented as Type IDs, they could be represented
4934
+ as `user_01jxe1z8atfxpabknqbzhkvr3s` and `domain_01jxe1zw90f1t8vgpyfns8qwk1`,
4935
+ immediately making it easier to differentiate between them.
4936
+
4937
+
4938
+ Additionally, this gives type safety and additional validation that can be done.
4939
+ 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).
4940
+ We''re using them ourselves on the backend to quickly catch mistakes like passing
4941
+ the wrong Type ID (passing a user ID like `user_01jxe1z8atfxpabknqbzhkvr3s` where
4942
+ a domain ID `domain_01jxe1zw90f1t8vgpyfns8qwk1` was expected).
4943
+
4944
+
4945
+
4946
+ '
5054
4947
  summary: OpusDNS - your gateway to a seamless domain management experience.
5055
4948
  title: OpusDNS API
5056
- version: 2025-10-15-082524
4949
+ version: 2025-10-20-101702
5057
4950
  x-logo:
5058
4951
  altText: OpusDNS API Reference
5059
4952
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -6055,6 +5948,55 @@ paths:
6055
5948
  requestBody:
6056
5949
  content:
6057
5950
  application/json:
5951
+ examples:
5952
+ business_setup:
5953
+ description: A comprehensive setup for a business with multiple subdomains
5954
+ and services
5955
+ summary: Business setup with multiple services
5956
+ value:
5957
+ dnssec_status: enabled
5958
+ name: example.com
5959
+ rrsets:
5960
+ - name: '@'
5961
+ records:
5962
+ - rdata: 203.0.113.10
5963
+ ttl: 600
5964
+ type: A
5965
+ - name: www
5966
+ records:
5967
+ - rdata: example.com.
5968
+ ttl: 300
5969
+ type: CNAME
5970
+ - name: api
5971
+ records:
5972
+ - rdata: 203.0.113.20
5973
+ ttl: 300
5974
+ type: A
5975
+ - name: mail
5976
+ records:
5977
+ - rdata: 203.0.113.30
5978
+ ttl: 300
5979
+ type: A
5980
+ - name: '@'
5981
+ records:
5982
+ - rdata: 10 mail.example.com.
5983
+ - rdata: 20 backup-mail.example.com.
5984
+ ttl: 300
5985
+ type: MX
5986
+ - name: '@'
5987
+ records:
5988
+ - rdata: '"v=spf1 include:_spf.google.com ~all"'
5989
+ - rdata: '"google-site-verification=abc123def456"'
5990
+ ttl: 300
5991
+ type: TXT
5992
+ minimal_setup:
5993
+ description: Create a zone with just the zone name - SOA and NS records
5994
+ are automatically generated
5995
+ summary: Minimal zone creation
5996
+ value:
5997
+ dnssec_status: disabled
5998
+ name: example.com
5999
+ rrsets: []
6058
6000
  schema:
6059
6001
  $ref: '#/components/schemas/DnsZoneCreate'
6060
6002
  required: true
@@ -6062,12 +6004,126 @@ paths:
6062
6004
  '201':
6063
6005
  content:
6064
6006
  application/json:
6007
+ examples:
6008
+ business_setup_response:
6009
+ description: Changeset response when creating a comprehensive business
6010
+ zone
6011
+ summary: Response for business setup creation
6012
+ value:
6013
+ changes:
6014
+ - action: create_zone
6015
+ - action: create_record
6016
+ record_data: example.com.
6017
+ rrset_name: www.example.com.
6018
+ rrset_type: CNAME
6019
+ ttl: 300
6020
+ - action: create_record
6021
+ record_data: 203.0.113.30
6022
+ rrset_name: mail.example.com.
6023
+ rrset_type: A
6024
+ ttl: 300
6025
+ - action: create_record
6026
+ record_data: 203.0.113.20
6027
+ rrset_name: api.example.com.
6028
+ rrset_type: A
6029
+ ttl: 300
6030
+ - action: create_record
6031
+ record_data: '"google-site-verification=abc123def456"'
6032
+ rrset_name: example.com.
6033
+ rrset_type: TXT
6034
+ ttl: 300
6035
+ - action: create_record
6036
+ record_data: '"v=spf1 include:_spf.google.com ~all"'
6037
+ rrset_name: example.com.
6038
+ rrset_type: TXT
6039
+ ttl: 300
6040
+ - action: create_record
6041
+ record_data: 10 mail.example.com.
6042
+ rrset_name: example.com.
6043
+ rrset_type: MX
6044
+ ttl: 300
6045
+ - action: create_record
6046
+ record_data: 20 backup-mail.example.com.
6047
+ rrset_name: example.com.
6048
+ rrset_type: MX
6049
+ ttl: 300
6050
+ - action: create_record
6051
+ record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
6052
+ 10800 3600 604800 300
6053
+ rrset_name: example.com.
6054
+ rrset_type: SOA
6055
+ ttl: 3600
6056
+ - action: create_record
6057
+ record_data: ns1.opusdns.com.
6058
+ rrset_name: example.com.
6059
+ rrset_type: NS
6060
+ ttl: 3600
6061
+ - action: create_record
6062
+ record_data: ns2.opusdns.com.
6063
+ rrset_name: example.com.
6064
+ rrset_type: NS
6065
+ ttl: 3600
6066
+ - action: create_record
6067
+ record_data: 203.0.113.10
6068
+ rrset_name: example.com.
6069
+ rrset_type: A
6070
+ ttl: 600
6071
+ - action: create_record
6072
+ record_data: 256 3 13 4epAMhnUgbFbAmKI2zbTXXFHGlVeHamiWLPdwJ8ehE9NgmvDNraqYF/0YdDcoc2elyelvi72KJyQfIR02axEeQ==
6073
+ rrset_name: example.com.
6074
+ rrset_type: DNSKEY
6075
+ ttl: 300
6076
+ - action: create_record
6077
+ record_data: 257 3 13 Wx1Wk8Sl+PyanAWPYsCPw9qFv2Nv0U/MXoJGgpmdqgbLgtvPlVM1/66j/MFTOjk4ONGKGZoWbZ86ud18lWvacw==
6078
+ rrset_name: example.com.
6079
+ rrset_type: DNSKEY
6080
+ ttl: 300
6081
+ - action: create_record
6082
+ record_data: 17781 13 2 21d0b2b21f501935546de33505a2b43d16ba3b1f375e00b0386dae3942165915
6083
+ rrset_name: example.com.
6084
+ rrset_type: DS
6085
+ ttl: 300
6086
+ - action: create_record
6087
+ record_data: 17781 13 4 d10ab2a071c85c20a0338797401928255be1d08c470236b381fbd87df0d60e3aab5d86c6dee8356374167d9b68652608
6088
+ rrset_name: example.com.
6089
+ rrset_type: DS
6090
+ ttl: 300
6091
+ - action: enable_dnssec
6092
+ changeset_id: 108e6028-2812-4bd9-aa41-5b46cdc7fbdc
6093
+ num_changes: 17
6094
+ zone_name: example.com.
6095
+ minimal_setup_response:
6096
+ description: Changeset response when creating a zone with automatic
6097
+ SOA and NS records
6098
+ summary: Response for minimal zone creation
6099
+ value:
6100
+ changes:
6101
+ - action: create_zone
6102
+ - action: create_record
6103
+ record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
6104
+ 10800 3600 604800 300
6105
+ rrset_name: example.com.
6106
+ rrset_type: SOA
6107
+ ttl: 3600
6108
+ - action: create_record
6109
+ record_data: ns1.opusdns.com.
6110
+ rrset_name: example.com.
6111
+ rrset_type: NS
6112
+ ttl: 3600
6113
+ - action: create_record
6114
+ record_data: ns2.opusdns.com.
6115
+ rrset_name: example.com.
6116
+ rrset_type: NS
6117
+ ttl: 3600
6118
+ changeset_id: de28f689-b400-45b7-9f67-9f92d512935a
6119
+ num_changes: 4
6120
+ zone_name: example.com.
6065
6121
  schema:
6066
6122
  anyOf:
6067
6123
  - $ref: '#/components/schemas/DnsChangesResponse'
6068
6124
  - type: 'null'
6069
6125
  title: Response Create Zone V1 Dns Post
6070
- description: Successful Response
6126
+ description: Zone created successfully
6071
6127
  '400':
6072
6128
  content:
6073
6129
  application/problem+json:
@@ -6083,9 +6139,25 @@ paths:
6083
6139
  '422':
6084
6140
  content:
6085
6141
  application/problem+json:
6142
+ examples:
6143
+ typo_in_name:
6144
+ description: The request contains a typo in the name field
6145
+ summary: Typo in name
6146
+ value:
6147
+ errors:
6148
+ - input:
6149
+ nme: example.com
6150
+ loc:
6151
+ - body
6152
+ - name
6153
+ msg: Field required
6154
+ type: missing
6155
+ status: 422
6156
+ title: Request validation error.
6157
+ type: request-validation-failed
6086
6158
  schema:
6087
6159
  $ref: '#/components/schemas/HTTPValidationError'
6088
- description: Validation Error
6160
+ description: Invalid request parameters
6089
6161
  security:
6090
6162
  - OAuth2PasswordBearer: []
6091
6163
  summary: Create Zone
@@ -9825,6 +9897,11 @@ tags:
9825
9897
  '
9826
9898
  name: email_forward
9827
9899
  x-displayName: Email forwards
9900
+ - description: 'Endpoints for creating and managing domain forwards.
9901
+
9902
+ '
9903
+ name: domain_forward
9904
+ x-displayName: Domain forwards
9828
9905
  - description: 'Endpoints for interacting with events.
9829
9906
 
9830
9907
  '
@@ -9871,5 +9948,6 @@ x-tagGroups:
9871
9948
  tags:
9872
9949
  - dns
9873
9950
  - email_forward
9951
+ - domain_forward
9874
9952
  - rdap
9875
9953
  - domain_search
package/src/schema.d.ts CHANGED
@@ -5364,7 +5364,7 @@ export interface operations {
5364
5364
  };
5365
5365
  };
5366
5366
  responses: {
5367
- /** @description Successful Response */
5367
+ /** @description Zone created successfully */
5368
5368
  201: {
5369
5369
  headers: {
5370
5370
  [name: string]: unknown;
@@ -5389,7 +5389,7 @@ export interface operations {
5389
5389
  "application/problem+json": components["schemas"]["Problem"];
5390
5390
  };
5391
5391
  };
5392
- /** @description Validation Error */
5392
+ /** @description Invalid request parameters */
5393
5393
  422: {
5394
5394
  headers: {
5395
5395
  [name: string]: unknown;