@opusdns/api 0.84.0 → 0.86.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.86.0",
7
7
  "description": "TypeScript types for the OpusDNS OpenAPI specification",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
@@ -21,7 +21,7 @@
21
21
  * ```
22
22
  */
23
23
 
24
- import { AllocationMethodType, AttributeType, BillingTransactionAction, BillingTransactionProductType, BillingTransactionSortField, BillingTransactionStatus, ContactRoleType, ContactSortField, Currency, DeletePolicyType, DnsChangeAction, DnsRrsetType, DnssecAlgorithm, DnssecDigestType, DnssecModeType, DnssecRecordType, DnssecStatus, DomainAttributeKey, DomainAvailabilityStatus, DomainClientStatus, DomainContactType, DomainSortField, DomainStatus, EmailVerificationStatus, EventObjectType, EventSubtype, EventType, GrantType, LaunchPhaseType, LocalPresenceRequirementType, OrganizationStatus, PatchOp, PeriodUnit, Permission, PostTransferRequirements, PostalAddressType, PremiumAffectsType, PremiumSourceType, RegistrantChangeType, RegistryHandleAttributeType, Relation, RenewalMode, ReservedSourceType, SortOrder, SyncOperationType, TLDType, TransferAckType, UserStatus, VerificationType, ZoneSortField } from './schemas';
24
+ import { AllocationMethodType, AttributeType, BillingTransactionAction, BillingTransactionProductType, BillingTransactionSortField, BillingTransactionStatus, ContactRoleType, ContactSortField, Currency, DeletePolicyType, DnsChangeAction, DnsRrsetType, DnssecAlgorithm, DnssecDigestType, DnssecModeType, DnssecRecordType, DnssecStatus, DomainAttributeKey, DomainAvailabilityStatus, DomainClientStatus, DomainContactType, DomainSortField, DomainStatus, EmailVerificationStatus, EventObjectType, EventSortField, EventSubtype, EventType, GrantType, LaunchPhaseType, LocalPresenceRequirementType, OrganizationStatus, PatchOp, PeriodUnit, Permission, PostTransferRequirements, PostalAddressType, PremiumAffectsType, PremiumSourceType, RegistrantChangeType, RegistryHandleAttributeType, Relation, RenewalMode, ReservedSourceType, SortOrder, SyncOperationType, TLDType, TransferAckType, UserStatus, VerificationType, ZoneSortField } from './schemas';
25
25
 
26
26
  /**
27
27
  * AllocationMethodType. Auto-generated enum for AllocationMethodType
@@ -1387,6 +1387,56 @@ export const EVENT_OBJECT_TYPE_VALUES = [
1387
1387
  'UNKNOWN'
1388
1388
  ] as const satisfies [string, ...string[]] | EventObjectType[];
1389
1389
 
1390
+ /**
1391
+ * EventSortField. Auto-generated enum for EventSortField
1392
+ *
1393
+ * @remarks
1394
+ * This constant provides both object and array forms for the EventSortField enum.
1395
+ * The object form allows key-value access, while the array form enables iteration and validation.
1396
+ *
1397
+ * @example
1398
+ * ```typescript
1399
+ * // Using the object form for key-value access
1400
+ * const status = EVENT_SORT_FIELD.SUCCESS;
1401
+ *
1402
+ * // Using the array form for iteration
1403
+ * const allStatuses = EVENT_SORT_FIELD_VALUES;
1404
+ * console.log(`Available statuses: ${allStatuses.join(', ')}`);
1405
+ * ```
1406
+ *
1407
+ * @see {@link EventSortField} - The TypeScript type definition
1408
+ */
1409
+ export const EVENT_SORT_FIELD = {
1410
+ OBJECT_ID: "object_id",
1411
+ CREATED_ON: "created_on",
1412
+ } as const satisfies Record<string, EventSortField>;
1413
+
1414
+ /**
1415
+ * Array of all EventSortField enum values
1416
+ *
1417
+ * @remarks
1418
+ * This constant provides a array containing all valid EventSortField enum values.
1419
+ * Useful for iteration, validation, and generating dynamic UI components.
1420
+ *
1421
+ * @example
1422
+ * ```typescript
1423
+ * // Iterating through all values
1424
+ * for (const value of EVENT_SORT_FIELD_VALUES) {
1425
+ * console.log(`Processing: ${value}`);
1426
+ * }
1427
+ *
1428
+ * // Validation
1429
+ * const isValid = EVENT_SORT_FIELD_VALUES.includes(someValue);
1430
+ * ```
1431
+ *
1432
+ * @see {@link EventSortField} - The TypeScript type definition
1433
+ * @see {@link EVENT_SORT_FIELD} - The object form of this enum
1434
+ */
1435
+ export const EVENT_SORT_FIELD_VALUES = [
1436
+ 'object_id',
1437
+ 'created_on'
1438
+ ] as const satisfies [string, ...string[]] | EventSortField[];
1439
+
1390
1440
  /**
1391
1441
  * EventSubtype. Auto-generated enum for EventSubtype
1392
1442
  *
@@ -2443,7 +2443,7 @@ export type PATCH_EmailForwardsZoneNameEnable_Request_Path = PATCH_EmailForwards
2443
2443
  * Request type for GET Events endpoint
2444
2444
  *
2445
2445
  * Get pending events
2446
- * Retrieves a paginated list of pending events for the organization
2446
+ * Retrieves a paginated list of events for the organization
2447
2447
  *
2448
2448
  * @remarks
2449
2449
  * This type defines the complete request structure for the GET Events endpoint.
@@ -3581,7 +3581,7 @@ export type PATCH_EmailForwardsByZoneNameEnable_Response_422 = HTTPValidationErr
3581
3581
  * Response types for GET Events endpoint
3582
3582
  *
3583
3583
  * Get pending events
3584
- * Retrieves a paginated list of pending events for the organization
3584
+ * Retrieves a paginated list of events for the organization
3585
3585
  *
3586
3586
  * @remarks
3587
3587
  * This type defines all possible response structures for the GET Events endpoint.
@@ -1450,6 +1450,22 @@ export type EventResponse = components['schemas']['EventResponse'];
1450
1450
  * @see {@link components} - The OpenAPI components schema definition
1451
1451
  */
1452
1452
  export type EventSchema = components['schemas']['EventSchema'];
1453
+ /**
1454
+ * EventSortField
1455
+ *
1456
+ * @remarks
1457
+ * Type alias for the `EventSortField` OpenAPI schema.
1458
+ * This type represents eventsortfield data structures used in API requests and responses.
1459
+ *
1460
+ * @example
1461
+ * ```typescript
1462
+ * const response = await api.getEventSortField();
1463
+ * const item: EventSortField = response.results;
1464
+ * ```
1465
+ *
1466
+ * @see {@link components} - The OpenAPI components schema definition
1467
+ */
1468
+ export type EventSortField = components['schemas']['EventSortField'];
1453
1469
  /**
1454
1470
  * EventSubtype
1455
1471
  *
package/src/openapi.yaml CHANGED
@@ -2383,6 +2383,12 @@ components:
2383
2383
  - source
2384
2384
  title: EventSchema
2385
2385
  type: object
2386
+ EventSortField:
2387
+ enum:
2388
+ - object_id
2389
+ - created_on
2390
+ title: EventSortField
2391
+ type: string
2386
2392
  EventSubtype:
2387
2393
  enum:
2388
2394
  - NOTIFICATION
@@ -4909,151 +4915,44 @@ components:
4909
4915
  tokenUrl: token
4910
4916
  type: oauth2
4911
4917
  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"
4918
+ description: '# Authentication
4919
+
4920
+
4921
+ Describes authentication approach.
4922
+
4923
+
4924
+
4925
+ # Resource IDs
4926
+
4927
+
4928
+ The API uses extensively [Type IDs](https://github.com/jetify-com/typeid): type-safe,
4929
+ K-sortable, globally unique identifier inspired by Stripe IDs. They can be easily
4930
+ identified with a format like `prefix_01jxe1nzrmf78scaqbkjx0va0f`. The `prefix`
4931
+ gives context to the ID - some examples include `user`, `organization`, `domain`.
4932
+ The rest of the ID is a 128-bit UUIDv7 encoded as a 26-character string using
4933
+ a modified base32 encoding. See [formal specification for details](https://github.com/jetify-com/typeid/tree/main/spec).
4934
+
4935
+
4936
+ This approach allows using unique IDs (UUIDv7), preventing iteration attacks,
4937
+ while also easily identifying the "namespace" of the ID. `01975c1f-a15a-7f6c-a5ce-b75fe33de079`
4938
+ is hardly distuingishable from `01975c1f-f120-7874-8dc2-de7d728bf261` by humans
4939
+ on first glance. However, when represented as Type IDs, they could be represented
4940
+ as `user_01jxe1z8atfxpabknqbzhkvr3s` and `domain_01jxe1zw90f1t8vgpyfns8qwk1`,
4941
+ immediately making it easier to differentiate between them.
4942
+
4943
+
4944
+ Additionally, this gives type safety and additional validation that can be done.
4945
+ 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).
4946
+ We''re using them ourselves on the backend to quickly catch mistakes like passing
4947
+ the wrong Type ID (passing a user ID like `user_01jxe1z8atfxpabknqbzhkvr3s` where
4948
+ a domain ID `domain_01jxe1zw90f1t8vgpyfns8qwk1` was expected).
4949
+
4950
+
4951
+
4952
+ '
5054
4953
  summary: OpusDNS - your gateway to a seamless domain management experience.
5055
4954
  title: OpusDNS API
5056
- version: 2025-10-15-082524
4955
+ version: 2025-10-27-080440
5057
4956
  x-logo:
5058
4957
  altText: OpusDNS API Reference
5059
4958
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -6055,6 +5954,55 @@ paths:
6055
5954
  requestBody:
6056
5955
  content:
6057
5956
  application/json:
5957
+ examples:
5958
+ business_setup:
5959
+ description: A comprehensive setup for a business with multiple subdomains
5960
+ and services
5961
+ summary: Business setup with multiple services
5962
+ value:
5963
+ dnssec_status: enabled
5964
+ name: example.com
5965
+ rrsets:
5966
+ - name: '@'
5967
+ records:
5968
+ - rdata: 203.0.113.10
5969
+ ttl: 600
5970
+ type: A
5971
+ - name: www
5972
+ records:
5973
+ - rdata: example.com.
5974
+ ttl: 300
5975
+ type: CNAME
5976
+ - name: api
5977
+ records:
5978
+ - rdata: 203.0.113.20
5979
+ ttl: 300
5980
+ type: A
5981
+ - name: mail
5982
+ records:
5983
+ - rdata: 203.0.113.30
5984
+ ttl: 300
5985
+ type: A
5986
+ - name: '@'
5987
+ records:
5988
+ - rdata: 10 mail.example.com.
5989
+ - rdata: 20 backup-mail.example.com.
5990
+ ttl: 300
5991
+ type: MX
5992
+ - name: '@'
5993
+ records:
5994
+ - rdata: '"v=spf1 include:_spf.google.com ~all"'
5995
+ - rdata: '"google-site-verification=abc123def456"'
5996
+ ttl: 300
5997
+ type: TXT
5998
+ minimal_setup:
5999
+ description: Create a zone with just the zone name - SOA and NS records
6000
+ are automatically generated
6001
+ summary: Minimal zone creation
6002
+ value:
6003
+ dnssec_status: disabled
6004
+ name: example.com
6005
+ rrsets: []
6058
6006
  schema:
6059
6007
  $ref: '#/components/schemas/DnsZoneCreate'
6060
6008
  required: true
@@ -6062,12 +6010,126 @@ paths:
6062
6010
  '201':
6063
6011
  content:
6064
6012
  application/json:
6013
+ examples:
6014
+ business_setup_response:
6015
+ description: Changeset response when creating a comprehensive business
6016
+ zone
6017
+ summary: Response for business setup creation
6018
+ value:
6019
+ changes:
6020
+ - action: create_zone
6021
+ - action: create_record
6022
+ record_data: example.com.
6023
+ rrset_name: www.example.com.
6024
+ rrset_type: CNAME
6025
+ ttl: 300
6026
+ - action: create_record
6027
+ record_data: 203.0.113.30
6028
+ rrset_name: mail.example.com.
6029
+ rrset_type: A
6030
+ ttl: 300
6031
+ - action: create_record
6032
+ record_data: 203.0.113.20
6033
+ rrset_name: api.example.com.
6034
+ rrset_type: A
6035
+ ttl: 300
6036
+ - action: create_record
6037
+ record_data: '"google-site-verification=abc123def456"'
6038
+ rrset_name: example.com.
6039
+ rrset_type: TXT
6040
+ ttl: 300
6041
+ - action: create_record
6042
+ record_data: '"v=spf1 include:_spf.google.com ~all"'
6043
+ rrset_name: example.com.
6044
+ rrset_type: TXT
6045
+ ttl: 300
6046
+ - action: create_record
6047
+ record_data: 10 mail.example.com.
6048
+ rrset_name: example.com.
6049
+ rrset_type: MX
6050
+ ttl: 300
6051
+ - action: create_record
6052
+ record_data: 20 backup-mail.example.com.
6053
+ rrset_name: example.com.
6054
+ rrset_type: MX
6055
+ ttl: 300
6056
+ - action: create_record
6057
+ record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
6058
+ 10800 3600 604800 300
6059
+ rrset_name: example.com.
6060
+ rrset_type: SOA
6061
+ ttl: 3600
6062
+ - action: create_record
6063
+ record_data: ns1.opusdns.com.
6064
+ rrset_name: example.com.
6065
+ rrset_type: NS
6066
+ ttl: 3600
6067
+ - action: create_record
6068
+ record_data: ns2.opusdns.com.
6069
+ rrset_name: example.com.
6070
+ rrset_type: NS
6071
+ ttl: 3600
6072
+ - action: create_record
6073
+ record_data: 203.0.113.10
6074
+ rrset_name: example.com.
6075
+ rrset_type: A
6076
+ ttl: 600
6077
+ - action: create_record
6078
+ record_data: 256 3 13 4epAMhnUgbFbAmKI2zbTXXFHGlVeHamiWLPdwJ8ehE9NgmvDNraqYF/0YdDcoc2elyelvi72KJyQfIR02axEeQ==
6079
+ rrset_name: example.com.
6080
+ rrset_type: DNSKEY
6081
+ ttl: 300
6082
+ - action: create_record
6083
+ record_data: 257 3 13 Wx1Wk8Sl+PyanAWPYsCPw9qFv2Nv0U/MXoJGgpmdqgbLgtvPlVM1/66j/MFTOjk4ONGKGZoWbZ86ud18lWvacw==
6084
+ rrset_name: example.com.
6085
+ rrset_type: DNSKEY
6086
+ ttl: 300
6087
+ - action: create_record
6088
+ record_data: 17781 13 2 21d0b2b21f501935546de33505a2b43d16ba3b1f375e00b0386dae3942165915
6089
+ rrset_name: example.com.
6090
+ rrset_type: DS
6091
+ ttl: 300
6092
+ - action: create_record
6093
+ record_data: 17781 13 4 d10ab2a071c85c20a0338797401928255be1d08c470236b381fbd87df0d60e3aab5d86c6dee8356374167d9b68652608
6094
+ rrset_name: example.com.
6095
+ rrset_type: DS
6096
+ ttl: 300
6097
+ - action: enable_dnssec
6098
+ changeset_id: 108e6028-2812-4bd9-aa41-5b46cdc7fbdc
6099
+ num_changes: 17
6100
+ zone_name: example.com.
6101
+ minimal_setup_response:
6102
+ description: Changeset response when creating a zone with automatic
6103
+ SOA and NS records
6104
+ summary: Response for minimal zone creation
6105
+ value:
6106
+ changes:
6107
+ - action: create_zone
6108
+ - action: create_record
6109
+ record_data: ns1.opusdns.com. hostmaster.opusdns.com. 2025101401
6110
+ 10800 3600 604800 300
6111
+ rrset_name: example.com.
6112
+ rrset_type: SOA
6113
+ ttl: 3600
6114
+ - action: create_record
6115
+ record_data: ns1.opusdns.com.
6116
+ rrset_name: example.com.
6117
+ rrset_type: NS
6118
+ ttl: 3600
6119
+ - action: create_record
6120
+ record_data: ns2.opusdns.com.
6121
+ rrset_name: example.com.
6122
+ rrset_type: NS
6123
+ ttl: 3600
6124
+ changeset_id: de28f689-b400-45b7-9f67-9f92d512935a
6125
+ num_changes: 4
6126
+ zone_name: example.com.
6065
6127
  schema:
6066
6128
  anyOf:
6067
6129
  - $ref: '#/components/schemas/DnsChangesResponse'
6068
6130
  - type: 'null'
6069
6131
  title: Response Create Zone V1 Dns Post
6070
- description: Successful Response
6132
+ description: Zone created successfully
6071
6133
  '400':
6072
6134
  content:
6073
6135
  application/problem+json:
@@ -6083,9 +6145,25 @@ paths:
6083
6145
  '422':
6084
6146
  content:
6085
6147
  application/problem+json:
6148
+ examples:
6149
+ typo_in_name:
6150
+ description: The request contains a typo in the name field
6151
+ summary: Typo in name
6152
+ value:
6153
+ errors:
6154
+ - input:
6155
+ nme: example.com
6156
+ loc:
6157
+ - body
6158
+ - name
6159
+ msg: Field required
6160
+ type: missing
6161
+ status: 422
6162
+ title: Request validation error.
6163
+ type: request-validation-failed
6086
6164
  schema:
6087
6165
  $ref: '#/components/schemas/HTTPValidationError'
6088
- description: Validation Error
6166
+ description: Invalid request parameters
6089
6167
  security:
6090
6168
  - OAuth2PasswordBearer: []
6091
6169
  summary: Create Zone
@@ -7961,9 +8039,62 @@ paths:
7961
8039
  - email_forward
7962
8040
  /v1/events:
7963
8041
  get:
7964
- description: Retrieves a paginated list of pending events for the organization
8042
+ description: Retrieves a paginated list of events for the organization
7965
8043
  operationId: get_events_v1_events_get
7966
8044
  parameters:
8045
+ - in: query
8046
+ name: sort_by
8047
+ required: false
8048
+ schema:
8049
+ $ref: '#/components/schemas/EventSortField'
8050
+ default: created_on
8051
+ - in: query
8052
+ name: sort_order
8053
+ required: false
8054
+ schema:
8055
+ $ref: '#/components/schemas/SortOrder'
8056
+ default: desc
8057
+ - in: query
8058
+ name: object_type
8059
+ required: false
8060
+ schema:
8061
+ anyOf:
8062
+ - $ref: '#/components/schemas/EventObjectType'
8063
+ - type: 'null'
8064
+ title: Object Type
8065
+ - in: query
8066
+ name: object_id
8067
+ required: false
8068
+ schema:
8069
+ anyOf:
8070
+ - type: string
8071
+ - type: 'null'
8072
+ title: Object Id
8073
+ - in: query
8074
+ name: type
8075
+ required: false
8076
+ schema:
8077
+ anyOf:
8078
+ - $ref: '#/components/schemas/EventType'
8079
+ - type: 'null'
8080
+ title: Type
8081
+ - in: query
8082
+ name: subtype
8083
+ required: false
8084
+ schema:
8085
+ anyOf:
8086
+ - $ref: '#/components/schemas/EventSubtype'
8087
+ - type: 'null'
8088
+ title: Subtype
8089
+ - in: query
8090
+ name: acknowledged
8091
+ required: false
8092
+ schema:
8093
+ anyOf:
8094
+ - type: boolean
8095
+ - type: 'null'
8096
+ default: false
8097
+ title: Acknowledged
7967
8098
  - in: query
7968
8099
  name: page
7969
8100
  required: false
@@ -9825,6 +9956,11 @@ tags:
9825
9956
  '
9826
9957
  name: email_forward
9827
9958
  x-displayName: Email forwards
9959
+ - description: 'Endpoints for creating and managing domain forwards.
9960
+
9961
+ '
9962
+ name: domain_forward
9963
+ x-displayName: Domain forwards
9828
9964
  - description: 'Endpoints for interacting with events.
9829
9965
 
9830
9966
  '
@@ -9871,5 +10007,6 @@ x-tagGroups:
9871
10007
  tags:
9872
10008
  - dns
9873
10009
  - email_forward
10010
+ - domain_forward
9874
10011
  - rdap
9875
10012
  - domain_search
package/src/schema.d.ts CHANGED
@@ -688,7 +688,7 @@ export interface paths {
688
688
  };
689
689
  /**
690
690
  * Get pending events
691
- * @description Retrieves a paginated list of pending events for the organization
691
+ * @description Retrieves a paginated list of events for the organization
692
692
  */
693
693
  get: operations["get_events_v1_events_get"];
694
694
  put?: never;
@@ -2797,6 +2797,11 @@ export interface components {
2797
2797
  /** @description The type of the event - indicates the kind of operation occurring (e.g., 'ACCOUNT_CREATE', 'DOMAIN_MODIFICATION') */
2798
2798
  type?: components["schemas"]["EventType"] | null;
2799
2799
  };
2800
+ /**
2801
+ * EventSortField
2802
+ * @enum {string}
2803
+ */
2804
+ EventSortField: "object_id" | "created_on";
2800
2805
  /**
2801
2806
  * EventSubtype
2802
2807
  * @enum {string}
@@ -5364,7 +5369,7 @@ export interface operations {
5364
5369
  };
5365
5370
  };
5366
5371
  responses: {
5367
- /** @description Successful Response */
5372
+ /** @description Zone created successfully */
5368
5373
  201: {
5369
5374
  headers: {
5370
5375
  [name: string]: unknown;
@@ -5389,7 +5394,7 @@ export interface operations {
5389
5394
  "application/problem+json": components["schemas"]["Problem"];
5390
5395
  };
5391
5396
  };
5392
- /** @description Validation Error */
5397
+ /** @description Invalid request parameters */
5393
5398
  422: {
5394
5399
  headers: {
5395
5400
  [name: string]: unknown;
@@ -7095,6 +7100,13 @@ export interface operations {
7095
7100
  get_events_v1_events_get: {
7096
7101
  parameters: {
7097
7102
  query?: {
7103
+ sort_by?: components["schemas"]["EventSortField"];
7104
+ sort_order?: components["schemas"]["SortOrder"];
7105
+ object_type?: components["schemas"]["EventObjectType"] | null;
7106
+ object_id?: string | null;
7107
+ type?: components["schemas"]["EventType"] | null;
7108
+ subtype?: components["schemas"]["EventSubtype"] | null;
7109
+ acknowledged?: boolean | null;
7098
7110
  page?: number;
7099
7111
  page_size?: number;
7100
7112
  };