@opusdns/api 1.190.0 → 1.191.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": "^1.6.0"
4
4
  },
5
5
  "name": "@opusdns/api",
6
- "version": "1.190.0",
6
+ "version": "1.191.0",
7
7
  "description": "TypeScript types for the OpusDNS OpenAPI specification",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
@@ -127,6 +127,8 @@ import type {
127
127
  VerificationDeadlineType,
128
128
  VerificationPolicyType,
129
129
  VerificationType,
130
+ WaitlistEntryStatus,
131
+ WaitlistProduct,
130
132
  WhitelabelBrandingTier,
131
133
  WhitelabelOnboardingFailureCode,
132
134
  WhitelabelOnboardingFailureType,
@@ -2425,6 +2427,26 @@ export const VERIFICATION_TYPE_VALUES = [
2425
2427
  'email',
2426
2428
  ] as const satisfies ReadonlyArray<VerificationType>;
2427
2429
 
2430
+ export const WAITLIST_ENTRY_STATUS = {
2431
+ PENDING: "pending",
2432
+ GRANTED: "granted",
2433
+ REJECTED: "rejected",
2434
+ } as const satisfies Record<string, WaitlistEntryStatus>;
2435
+
2436
+ export const WAITLIST_ENTRY_STATUS_VALUES = [
2437
+ 'pending',
2438
+ 'granted',
2439
+ 'rejected',
2440
+ ] as const satisfies ReadonlyArray<WaitlistEntryStatus>;
2441
+
2442
+ export const WAITLIST_PRODUCT = {
2443
+ AI_CONCIERGE: "ai_concierge",
2444
+ } as const satisfies Record<string, WaitlistProduct>;
2445
+
2446
+ export const WAITLIST_PRODUCT_VALUES = [
2447
+ 'ai_concierge',
2448
+ ] as const satisfies ReadonlyArray<WaitlistProduct>;
2449
+
2428
2450
  export const WHITELABEL_BRANDING_TIER = {
2429
2451
  BASE: "base",
2430
2452
  PLUS: "plus",
@@ -106,6 +106,8 @@ export const ORGANIZATIONS_ENDPOINT = '/v1/organizations';
106
106
  export const ORGANIZATIONS_ATTRIBUTES_ENDPOINT = '/v1/organizations/attributes';
107
107
  export const ORGANIZATIONS_IP_RESTRICTIONS_ENDPOINT = '/v1/organizations/ip-restrictions';
108
108
  export const ORGANIZATIONS_IP_RESTRICTIONS_BY_IP_RESTRICTION_ID_ENDPOINT = '/v1/organizations/ip-restrictions/{ip_restriction_id}';
109
+ export const ORGANIZATIONS_PRODUCT_WAITLIST_ENDPOINT = '/v1/organizations/product-waitlist';
110
+ export const ORGANIZATIONS_PRODUCT_WAITLIST_BY_PRODUCT_APPLY_ENDPOINT = '/v1/organizations/product-waitlist/{product}/apply';
109
111
  export const ORGANIZATIONS_ROLE_PERMISSIONS_ENDPOINT = '/v1/organizations/role-permissions';
110
112
  export const ORGANIZATIONS_ROLES_ENDPOINT = '/v1/organizations/roles';
111
113
  export const ORGANIZATIONS_ROLES_BY_LABEL_ENDPOINT = '/v1/organizations/roles/{label}';
@@ -266,6 +268,8 @@ export type Endpoint =
266
268
  | typeof ORGANIZATIONS_ATTRIBUTES_ENDPOINT
267
269
  | typeof ORGANIZATIONS_IP_RESTRICTIONS_ENDPOINT
268
270
  | typeof ORGANIZATIONS_IP_RESTRICTIONS_BY_IP_RESTRICTION_ID_ENDPOINT
271
+ | typeof ORGANIZATIONS_PRODUCT_WAITLIST_ENDPOINT
272
+ | typeof ORGANIZATIONS_PRODUCT_WAITLIST_BY_PRODUCT_APPLY_ENDPOINT
269
273
  | typeof ORGANIZATIONS_ROLE_PERMISSIONS_ENDPOINT
270
274
  | typeof ORGANIZATIONS_ROLES_ENDPOINT
271
275
  | typeof ORGANIZATIONS_ROLES_BY_LABEL_ENDPOINT
@@ -451,6 +451,10 @@ import type {
451
451
  VerificationRegistrantDetails,
452
452
  Verification,
453
453
  VisitsByKeyBucket,
454
+ WaitlistApplyRequest,
455
+ WaitlistEntry,
456
+ WaitlistProductList,
457
+ WaitlistProductState,
454
458
  WhitelabelBaseCreate,
455
459
  WhitelabelBrandingPatch,
456
460
  WhitelabelBrandingRecheck,
@@ -6183,6 +6187,48 @@ export const KEYS_VISITS_BY_KEY_BUCKET = [
6183
6187
  KEY_VISITS_BY_KEY_BUCKET_UNIQUE,
6184
6188
  ] as const satisfies (keyof VisitsByKeyBucket)[];
6185
6189
 
6190
+ export const KEY_WAITLIST_APPLY_REQUEST_NOTE = 'note' satisfies keyof WaitlistApplyRequest;
6191
+
6192
+ export const KEYS_WAITLIST_APPLY_REQUEST = [
6193
+ KEY_WAITLIST_APPLY_REQUEST_NOTE,
6194
+ ] as const satisfies (keyof WaitlistApplyRequest)[];
6195
+
6196
+ export const KEY_WAITLIST_ENTRY_APPLIED_ON = 'applied_on' satisfies keyof WaitlistEntry;
6197
+ export const KEY_WAITLIST_ENTRY_DECIDED_ON = 'decided_on' satisfies keyof WaitlistEntry;
6198
+ export const KEY_WAITLIST_ENTRY_PRODUCT = 'product' satisfies keyof WaitlistEntry;
6199
+ export const KEY_WAITLIST_ENTRY_STATUS = 'status' satisfies keyof WaitlistEntry;
6200
+
6201
+ export const KEYS_WAITLIST_ENTRY = [
6202
+ KEY_WAITLIST_ENTRY_APPLIED_ON,
6203
+ KEY_WAITLIST_ENTRY_DECIDED_ON,
6204
+ KEY_WAITLIST_ENTRY_PRODUCT,
6205
+ KEY_WAITLIST_ENTRY_STATUS,
6206
+ ] as const satisfies (keyof WaitlistEntry)[];
6207
+
6208
+ export const KEY_WAITLIST_PRODUCT_LIST_PRODUCTS = 'products' satisfies keyof WaitlistProductList;
6209
+
6210
+ export const KEYS_WAITLIST_PRODUCT_LIST = [
6211
+ KEY_WAITLIST_PRODUCT_LIST_PRODUCTS,
6212
+ ] as const satisfies (keyof WaitlistProductList)[];
6213
+
6214
+ export const KEY_WAITLIST_PRODUCT_STATE_APPLIED_ON = 'applied_on' satisfies keyof WaitlistProductState;
6215
+ export const KEY_WAITLIST_PRODUCT_STATE_CAN_APPLY = 'can_apply' satisfies keyof WaitlistProductState;
6216
+ export const KEY_WAITLIST_PRODUCT_STATE_DECIDED_ON = 'decided_on' satisfies keyof WaitlistProductState;
6217
+ export const KEY_WAITLIST_PRODUCT_STATE_DESCRIPTION = 'description' satisfies keyof WaitlistProductState;
6218
+ export const KEY_WAITLIST_PRODUCT_STATE_DISPLAY_NAME = 'display_name' satisfies keyof WaitlistProductState;
6219
+ export const KEY_WAITLIST_PRODUCT_STATE_PRODUCT = 'product' satisfies keyof WaitlistProductState;
6220
+ export const KEY_WAITLIST_PRODUCT_STATE_STATUS = 'status' satisfies keyof WaitlistProductState;
6221
+
6222
+ export const KEYS_WAITLIST_PRODUCT_STATE = [
6223
+ KEY_WAITLIST_PRODUCT_STATE_APPLIED_ON,
6224
+ KEY_WAITLIST_PRODUCT_STATE_CAN_APPLY,
6225
+ KEY_WAITLIST_PRODUCT_STATE_DECIDED_ON,
6226
+ KEY_WAITLIST_PRODUCT_STATE_DESCRIPTION,
6227
+ KEY_WAITLIST_PRODUCT_STATE_DISPLAY_NAME,
6228
+ KEY_WAITLIST_PRODUCT_STATE_PRODUCT,
6229
+ KEY_WAITLIST_PRODUCT_STATE_STATUS,
6230
+ ] as const satisfies (keyof WaitlistProductState)[];
6231
+
6186
6232
  export const KEY_WHITELABEL_BASE_CREATE_LABEL = 'label' satisfies keyof WhitelabelBaseCreate;
6187
6233
  export const KEY_WHITELABEL_BASE_CREATE_PERIOD = 'period' satisfies keyof WhitelabelBaseCreate;
6188
6234
  export const KEY_WHITELABEL_BASE_CREATE_TIER = 'tier' satisfies keyof WhitelabelBaseCreate;
@@ -119,6 +119,8 @@ import {
119
119
  ORGANIZATIONS_ENDPOINT,
120
120
  ORGANIZATIONS_IP_RESTRICTIONS_BY_IP_RESTRICTION_ID_ENDPOINT,
121
121
  ORGANIZATIONS_IP_RESTRICTIONS_ENDPOINT,
122
+ ORGANIZATIONS_PRODUCT_WAITLIST_BY_PRODUCT_APPLY_ENDPOINT,
123
+ ORGANIZATIONS_PRODUCT_WAITLIST_ENDPOINT,
122
124
  ORGANIZATIONS_ROLE_PERMISSIONS_ENDPOINT,
123
125
  ORGANIZATIONS_ROLES_BY_LABEL_ENDPOINT,
124
126
  ORGANIZATIONS_ROLES_ENDPOINT,
@@ -1050,6 +1052,20 @@ export const REQUIRED_PERMISSIONS = {
1050
1052
  patch: [],
1051
1053
  delete: [],
1052
1054
  },
1055
+ [ORGANIZATIONS_PRODUCT_WAITLIST_BY_PRODUCT_APPLY_ENDPOINT]: {
1056
+ get: [],
1057
+ post: [],
1058
+ put: [],
1059
+ patch: [],
1060
+ delete: [],
1061
+ },
1062
+ [ORGANIZATIONS_PRODUCT_WAITLIST_ENDPOINT]: {
1063
+ get: [PUBLIC_PERMISSION.ORGANIZATION_READ],
1064
+ post: [],
1065
+ put: [],
1066
+ patch: [],
1067
+ delete: [],
1068
+ },
1053
1069
  [ORGANIZATIONS_ROLE_PERMISSIONS_ENDPOINT]: {
1054
1070
  get: [PUBLIC_PERMISSION.ORGANIZATION_READ],
1055
1071
  post: [],
@@ -957,6 +957,14 @@ export type PATCH_OrganizationsIpRestrictionsByIpRestrictionId_Request = {
957
957
  export type PATCH_OrganizationsIpRestrictionsByIpRestrictionId_Request_Path = PATCH_OrganizationsIpRestrictionsByIpRestrictionId_Request['parameters']['path'];
958
958
  export type PATCH_OrganizationsIpRestrictionsByIpRestrictionId_Request_Body = PATCH_OrganizationsIpRestrictionsByIpRestrictionId_Request['requestBody'];
959
959
 
960
+ export type GET_OrganizationsProductWaitlist_Request = {
961
+ };
962
+
963
+ export type POST_OrganizationsProductWaitlistByProductApply_Request = {
964
+ parameters: operations['apply_for_product_waitlist_v1_organizations_product_waitlist__product__apply_post']['parameters'];
965
+ };
966
+ export type POST_OrganizationsProductWaitlistByProductApply_Request_Path = POST_OrganizationsProductWaitlistByProductApply_Request['parameters']['path'];
967
+
960
968
  export type GET_OrganizationsRolePermissions_Request = {
961
969
  };
962
970
 
@@ -120,6 +120,8 @@ import type {
120
120
  UserPublicWithAttributes,
121
121
  VanityNameserverSetSummaryDTO,
122
122
  VanityNsCheckRes,
123
+ WaitlistEntry,
124
+ WaitlistProductList,
123
125
  WhitelabelBranding,
124
126
  } from './schemas';
125
127
 
@@ -748,6 +750,13 @@ export type GET_OrganizationsIpRestrictionsByIpRestrictionId_Response_401 = Prob
748
750
  export type GET_OrganizationsIpRestrictionsByIpRestrictionId_Response_403 = Problem;
749
751
  export type GET_OrganizationsIpRestrictionsByIpRestrictionId_Response_422 = HTTPValidationError;
750
752
 
753
+ export type GET_OrganizationsProductWaitlist_Response = GET_OrganizationsProductWaitlist_Response_200 | GET_OrganizationsProductWaitlist_Response_401 | GET_OrganizationsProductWaitlist_Response_403 | GET_OrganizationsProductWaitlist_Response_422;
754
+
755
+ export type GET_OrganizationsProductWaitlist_Response_200 = WaitlistProductList;
756
+ export type GET_OrganizationsProductWaitlist_Response_401 = Problem;
757
+ export type GET_OrganizationsProductWaitlist_Response_403 = Problem;
758
+ export type GET_OrganizationsProductWaitlist_Response_422 = HTTPValidationError;
759
+
751
760
  export type GET_OrganizationsRolePermissions_Response = GET_OrganizationsRolePermissions_Response_200 | GET_OrganizationsRolePermissions_Response_401 | GET_OrganizationsRolePermissions_Response_403 | GET_OrganizationsRolePermissions_Response_422;
752
761
 
753
762
  export type GET_OrganizationsRolePermissions_Response_200 = PublicPermissionSet;
@@ -1398,6 +1407,15 @@ export type POST_OrganizationsIpRestrictions_Response_401 = Problem;
1398
1407
  export type POST_OrganizationsIpRestrictions_Response_403 = Problem;
1399
1408
  export type POST_OrganizationsIpRestrictions_Response_422 = HTTPValidationError;
1400
1409
 
1410
+ export type POST_OrganizationsProductWaitlistByProductApply_Response = POST_OrganizationsProductWaitlistByProductApply_Response_200 | POST_OrganizationsProductWaitlistByProductApply_Response_401 | POST_OrganizationsProductWaitlistByProductApply_Response_403 | POST_OrganizationsProductWaitlistByProductApply_Response_404 | POST_OrganizationsProductWaitlistByProductApply_Response_409 | POST_OrganizationsProductWaitlistByProductApply_Response_422;
1411
+
1412
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_200 = WaitlistEntry;
1413
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_401 = Problem;
1414
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_403 = Problem;
1415
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_404 = Problem;
1416
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_409 = Problem;
1417
+ export type POST_OrganizationsProductWaitlistByProductApply_Response_422 = HTTPValidationError;
1418
+
1401
1419
  export type POST_OrganizationsRoles_Response = POST_OrganizationsRoles_Response_201 | POST_OrganizationsRoles_Response_401 | POST_OrganizationsRoles_Response_403 | POST_OrganizationsRoles_Response_409 | POST_OrganizationsRoles_Response_422;
1402
1420
 
1403
1421
  export type POST_OrganizationsRoles_Response_201 = PublicRoleDefinition;
@@ -604,6 +604,12 @@ export type VerificationRegistrantDetails = components['schemas']['VerificationR
604
604
  export type Verification = components['schemas']['VerificationResponse'];
605
605
  export type VerificationType = components['schemas']['VerificationType'];
606
606
  export type VisitsByKeyBucket = components['schemas']['VisitsByKeyBucket'];
607
+ export type WaitlistApplyRequest = components['schemas']['WaitlistApplyRequest'];
608
+ export type WaitlistEntry = components['schemas']['WaitlistEntryResponse'];
609
+ export type WaitlistEntryStatus = components['schemas']['WaitlistEntryStatus'];
610
+ export type WaitlistProduct = components['schemas']['WaitlistProduct'];
611
+ export type WaitlistProductList = components['schemas']['WaitlistProductListResponse'];
612
+ export type WaitlistProductState = components['schemas']['WaitlistProductState'];
607
613
  export type WhitelabelBaseCreate = components['schemas']['WhitelabelBaseCreate'];
608
614
  export type WhitelabelBrandingPatch = components['schemas']['WhitelabelBrandingPatch'];
609
615
  export type WhitelabelBrandingRecheck = components['schemas']['WhitelabelBrandingRecheck'];
package/src/openapi.yaml CHANGED
@@ -16078,6 +16078,125 @@ components:
16078
16078
  - unique
16079
16079
  title: VisitsByKeyBucket
16080
16080
  type: object
16081
+ WaitlistApplyRequest:
16082
+ description: What an organization says when applying for a product.
16083
+ properties:
16084
+ note:
16085
+ anyOf:
16086
+ - maxLength: 1000
16087
+ minLength: 1
16088
+ type: string
16089
+ - type: 'null'
16090
+ description: What your organization would use the product for
16091
+ examples:
16092
+ - We manage 12k domains for agency clients and triage renewals by hand.
16093
+ title: Note
16094
+ title: WaitlistApplyRequest
16095
+ type: object
16096
+ WaitlistEntryResponse:
16097
+ description: An organization's own waitlist application.
16098
+ properties:
16099
+ applied_on:
16100
+ description: When the organization applied
16101
+ format: date-time
16102
+ title: Applied On
16103
+ type: string
16104
+ decided_on:
16105
+ anyOf:
16106
+ - format: date-time
16107
+ type: string
16108
+ - type: 'null'
16109
+ description: When the application was decided; null while it is pending
16110
+ title: Decided On
16111
+ product:
16112
+ $ref: '#/components/schemas/WaitlistProduct'
16113
+ description: Product the application is for
16114
+ status:
16115
+ $ref: '#/components/schemas/WaitlistEntryStatus'
16116
+ description: Where the application stands
16117
+ required:
16118
+ - product
16119
+ - status
16120
+ - applied_on
16121
+ title: WaitlistEntryResponse
16122
+ type: object
16123
+ WaitlistEntryStatus:
16124
+ enum:
16125
+ - pending
16126
+ - granted
16127
+ - rejected
16128
+ title: WaitlistEntryStatus
16129
+ type: string
16130
+ WaitlistProduct:
16131
+ description: 'A product that is not generally available and is reached through
16132
+ the waitlist.
16133
+
16134
+
16135
+ The member value is the wire form used in URLs and API bodies; the column
16136
+ persists the
16137
+
16138
+ member NAME (StringEnum binds `value.name`), so renaming a member is a data
16139
+ migration.'
16140
+ enum:
16141
+ - ai_concierge
16142
+ title: WaitlistProduct
16143
+ type: string
16144
+ WaitlistProductListResponse:
16145
+ description: The waitlisted products an organization may see.
16146
+ properties:
16147
+ products:
16148
+ description: Waitlisted products this organization may see
16149
+ items:
16150
+ $ref: '#/components/schemas/WaitlistProductState'
16151
+ title: Products
16152
+ type: array
16153
+ title: WaitlistProductListResponse
16154
+ type: object
16155
+ WaitlistProductState:
16156
+ description: A waitlisted product, and where the organization stands with it.
16157
+ properties:
16158
+ applied_on:
16159
+ anyOf:
16160
+ - format: date-time
16161
+ type: string
16162
+ - type: 'null'
16163
+ description: When the organization applied, if it has
16164
+ title: Applied On
16165
+ can_apply:
16166
+ description: Whether an apply would be accepted right now
16167
+ title: Can Apply
16168
+ type: boolean
16169
+ decided_on:
16170
+ anyOf:
16171
+ - format: date-time
16172
+ type: string
16173
+ - type: 'null'
16174
+ description: When the application was decided, if it was
16175
+ title: Decided On
16176
+ description:
16177
+ description: What the product does
16178
+ title: Description
16179
+ type: string
16180
+ display_name:
16181
+ description: Human-readable product name
16182
+ title: Display Name
16183
+ type: string
16184
+ product:
16185
+ $ref: '#/components/schemas/WaitlistProduct'
16186
+ description: Product key, used in the apply path
16187
+ status:
16188
+ anyOf:
16189
+ - $ref: '#/components/schemas/WaitlistEntryStatus'
16190
+ - type: 'null'
16191
+ description: Where the organization's application stands; null until it
16192
+ applies
16193
+ required:
16194
+ - product
16195
+ - display_name
16196
+ - description
16197
+ - can_apply
16198
+ title: WaitlistProductState
16199
+ type: object
16081
16200
  WhitelabelBaseCreate:
16082
16201
  additionalProperties: false
16083
16202
  description: 'Create the base tier: served on a managed subdomain composed from
@@ -17059,7 +17178,7 @@ info:
17059
17178
  \n\n"
17060
17179
  summary: OpusDNS - your gateway to a seamless domain management experience.
17061
17180
  title: OpusDNS API
17062
- version: 2026-09-22-090818
17181
+ version: 2026-09-22-143714
17063
17182
  x-logo:
17064
17183
  altText: OpusDNS API Reference
17065
17184
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -31370,6 +31489,154 @@ paths:
31370
31489
  summary: Update an IP restriction
31371
31490
  tags:
31372
31491
  - organization
31492
+ /v1/organizations/product-waitlist:
31493
+ get:
31494
+ description: Lists the waitlisted products your organization has been invited
31495
+ to, or has already applied for, with where your organization stands on each.
31496
+ Any other product is omitted entirely.
31497
+ operationId: list_product_waitlists_v1_organizations_product_waitlist_get
31498
+ parameters:
31499
+ - $ref: '#/components/parameters/DatetimeFormatHeader'
31500
+ responses:
31501
+ '200':
31502
+ content:
31503
+ application/json:
31504
+ schema:
31505
+ $ref: '#/components/schemas/WaitlistProductListResponse'
31506
+ description: Successful Response
31507
+ '401':
31508
+ content:
31509
+ application/problem+json:
31510
+ example:
31511
+ code: ERROR_AUTHENTICATION
31512
+ detail: Additional error context.
31513
+ status: 401
31514
+ title: Authentication Error
31515
+ type: authentication
31516
+ schema:
31517
+ $ref: '#/components/schemas/Problem'
31518
+ description: Unauthorized
31519
+ '403':
31520
+ content:
31521
+ application/problem+json:
31522
+ example:
31523
+ code: ERROR_PERMISSION_DENIED
31524
+ detail: Insufficient permissions to perform this action
31525
+ status: 403
31526
+ title: Permission Denied
31527
+ type: permission-denied
31528
+ schema:
31529
+ $ref: '#/components/schemas/Problem'
31530
+ description: Forbidden
31531
+ '422':
31532
+ content:
31533
+ application/problem+json:
31534
+ schema:
31535
+ $ref: '#/components/schemas/HTTPValidationError'
31536
+ description: Validation Error
31537
+ security:
31538
+ - OAuth2PasswordBearer: []
31539
+ - APIKeyHeader: []
31540
+ summary: List product waitlists
31541
+ tags:
31542
+ - organization
31543
+ - product_waitlist
31544
+ x-required-permissions:
31545
+ - organization:read
31546
+ /v1/organizations/product-waitlist/{product}/apply:
31547
+ post:
31548
+ description: 'Applies your organization to a product''s waitlist, optionally
31549
+ saying what you would use the product for. The application is recorded as
31550
+ `pending` until OpusDNS decides on it. One application per organization per
31551
+ product: a second apply is refused, and a rejection is reconsidered by OpusDNS
31552
+ rather than by applying again.'
31553
+ operationId: apply_for_product_waitlist_v1_organizations_product_waitlist__product__apply_post
31554
+ parameters:
31555
+ - in: path
31556
+ name: product
31557
+ required: true
31558
+ schema:
31559
+ $ref: '#/components/schemas/WaitlistProduct'
31560
+ - $ref: '#/components/parameters/DatetimeFormatHeader'
31561
+ requestBody:
31562
+ content:
31563
+ application/json:
31564
+ schema:
31565
+ anyOf:
31566
+ - $ref: '#/components/schemas/WaitlistApplyRequest'
31567
+ - type: 'null'
31568
+ title: Body
31569
+ responses:
31570
+ '200':
31571
+ content:
31572
+ application/json:
31573
+ schema:
31574
+ $ref: '#/components/schemas/WaitlistEntryResponse'
31575
+ description: Successful Response
31576
+ '401':
31577
+ content:
31578
+ application/problem+json:
31579
+ example:
31580
+ code: ERROR_AUTHENTICATION
31581
+ detail: Additional error context.
31582
+ status: 401
31583
+ title: Authentication Error
31584
+ type: authentication
31585
+ schema:
31586
+ $ref: '#/components/schemas/Problem'
31587
+ description: Unauthorized
31588
+ '403':
31589
+ content:
31590
+ application/problem+json:
31591
+ example:
31592
+ code: ERROR_PERMISSION_DENIED
31593
+ detail: Insufficient permissions to perform this action
31594
+ status: 403
31595
+ title: Permission Denied
31596
+ type: permission-denied
31597
+ schema:
31598
+ $ref: '#/components/schemas/Problem'
31599
+ description: Forbidden
31600
+ '404':
31601
+ content:
31602
+ application/problem+json:
31603
+ example:
31604
+ code: ERROR_WAITLIST_NOT_INVITED
31605
+ detail: No waitlist is available for ai_concierge
31606
+ product: ai_concierge
31607
+ status: 404
31608
+ title: Waitlist Error
31609
+ type: waitlist-not-invited
31610
+ schema:
31611
+ $ref: '#/components/schemas/Problem'
31612
+ description: Not Found
31613
+ '409':
31614
+ content:
31615
+ application/problem+json:
31616
+ examples:
31617
+ Waitlist Error:
31618
+ value:
31619
+ code: ERROR_WAITLIST_ENTRY_REJECTED
31620
+ detail: This organization's application for ai_concierge was rejected
31621
+ product: ai_concierge
31622
+ status: 409
31623
+ title: Waitlist Error
31624
+ type: waitlist-entry-rejected
31625
+ schema:
31626
+ $ref: '#/components/schemas/Problem'
31627
+ description: Conflict
31628
+ '422':
31629
+ content:
31630
+ application/problem+json:
31631
+ schema:
31632
+ $ref: '#/components/schemas/HTTPValidationError'
31633
+ description: Validation Error
31634
+ security:
31635
+ - OAuth2PasswordBearer: []
31636
+ summary: Apply for a product waitlist
31637
+ tags:
31638
+ - organization
31639
+ - product_waitlist
31373
31640
  /v1/organizations/role-permissions:
31374
31641
  get:
31375
31642
  description: Retrieves the catalog of `resource:scope` permissions a custom
@@ -35886,6 +36153,90 @@ tags:
35886
36153
  '
35887
36154
  name: organization
35888
36155
  x-displayName: Organizations
36156
+ - description: 'Endpoints for products that are not generally available yet and are
36157
+ reached through a waitlist.
36158
+
36159
+
36160
+ A waitlisted product is invitation-only: OpusDNS invites an organization, the
36161
+ organization applies, and OpusDNS decides. Until your organization is invited,
36162
+ the product does not exist as far as this API is concerned - it is left out of
36163
+ the listing, and applying for it answers `404`. Once your organization has applied,
36164
+ the product stays in its listing whatever happens to the invite afterwards.
36165
+
36166
+
36167
+ ### Endpoints
36168
+
36169
+
36170
+ | Method | Path | Description |
36171
+
36172
+ |--------|------|-------------|
36173
+
36174
+ | `GET` | `/v1/organizations/product-waitlist` | The waitlisted products your
36175
+ organization may see, and where it stands on each |
36176
+
36177
+ | `POST` | `/v1/organizations/product-waitlist/{product}/apply` | Apply your organization
36178
+ to one product''s waitlist |
36179
+
36180
+
36181
+ Both routes act on the organization the request is authenticated for; neither
36182
+ takes an organization in the path.
36183
+
36184
+
36185
+ ### Product state
36186
+
36187
+
36188
+ Each entry in the listing describes one product and your organization''s standing
36189
+ with it:
36190
+
36191
+
36192
+ | Field | Description |
36193
+
36194
+ |-------|-------------|
36195
+
36196
+ | `product` | The product key, used as `{product}` in the apply path |
36197
+
36198
+ | `display_name` | Human-readable product name |
36199
+
36200
+ | `description` | What the product does |
36201
+
36202
+ | `status` | `pending`, `granted` or `rejected`, or `null` while your organization
36203
+ has not applied |
36204
+
36205
+ | `applied_on` | When your organization applied, or `null` |
36206
+
36207
+ | `decided_on` | When OpusDNS decided, or `null` |
36208
+
36209
+ | `can_apply` | Whether an apply would be accepted right now, from this caller:
36210
+ it also takes the `organization:write` the apply route requires |
36211
+
36212
+
36213
+ ### Applying
36214
+
36215
+
36216
+ `POST /v1/organizations/product-waitlist/{product}/apply` records the application
36217
+ as `pending`, together with the applying user. It requires a user token: an API-key
36218
+ token has no user to record.
36219
+
36220
+
36221
+ The body is optional. Send `{"note": "..."}` to say what your organization would
36222
+ use the product for - it is the one thing OpusDNS has to go on when deciding,
36223
+ so it is worth filling in. A note is trimmed and may be up to 1000 characters;
36224
+ a blank or whitespace-only one is rejected rather than stored. Posting no body
36225
+ at all applies without a note.
36226
+
36227
+
36228
+ One application per organization per product. A second apply answers `409`, whatever
36229
+ state the first one reached - a rejection is reconsidered by OpusDNS approving
36230
+ it after all, not by applying again. `can_apply` in the listing tells you in advance
36231
+ which applies would be accepted.
36232
+
36233
+
36234
+ Being granted a product means every user of your organization gains access to
36235
+ it, including users created afterwards.
36236
+
36237
+ '
36238
+ name: product_waitlist
36239
+ x-displayName: Product waitlist
35889
36240
  - description: 'Endpoints for retrieving TLD specifications.
35890
36241
 
35891
36242
  '
@@ -36063,6 +36414,7 @@ x-tagGroups:
36063
36414
  - authentication
36064
36415
  - user
36065
36416
  - organization
36417
+ - product_waitlist
36066
36418
  - usage
36067
36419
  - name: Domains
36068
36420
  tags:
package/src/schema.d.ts CHANGED
@@ -2204,6 +2204,46 @@ export interface paths {
2204
2204
  patch: operations["update_ip_restriction_v1_organizations_ip_restrictions__ip_restriction_id__patch"];
2205
2205
  trace?: never;
2206
2206
  };
2207
+ "/v1/organizations/product-waitlist": {
2208
+ parameters: {
2209
+ query?: never;
2210
+ header?: never;
2211
+ path?: never;
2212
+ cookie?: never;
2213
+ };
2214
+ /**
2215
+ * List product waitlists
2216
+ * @description Lists the waitlisted products your organization has been invited to, or has already applied for, with where your organization stands on each. Any other product is omitted entirely.
2217
+ */
2218
+ get: operations["list_product_waitlists_v1_organizations_product_waitlist_get"];
2219
+ put?: never;
2220
+ post?: never;
2221
+ delete?: never;
2222
+ options?: never;
2223
+ head?: never;
2224
+ patch?: never;
2225
+ trace?: never;
2226
+ };
2227
+ "/v1/organizations/product-waitlist/{product}/apply": {
2228
+ parameters: {
2229
+ query?: never;
2230
+ header?: never;
2231
+ path?: never;
2232
+ cookie?: never;
2233
+ };
2234
+ get?: never;
2235
+ put?: never;
2236
+ /**
2237
+ * Apply for a product waitlist
2238
+ * @description Applies your organization to a product's waitlist, optionally saying what you would use the product for. The application is recorded as `pending` until OpusDNS decides on it. One application per organization per product: a second apply is refused, and a rejection is reconsidered by OpusDNS rather than by applying again.
2239
+ */
2240
+ post: operations["apply_for_product_waitlist_v1_organizations_product_waitlist__product__apply_post"];
2241
+ delete?: never;
2242
+ options?: never;
2243
+ head?: never;
2244
+ patch?: never;
2245
+ trace?: never;
2246
+ };
2207
2247
  "/v1/organizations/role-permissions": {
2208
2248
  parameters: {
2209
2249
  query?: never;
@@ -13880,6 +13920,99 @@ export interface components {
13880
13920
  /** Unique */
13881
13921
  unique: number;
13882
13922
  };
13923
+ /**
13924
+ * WaitlistApplyRequest
13925
+ * @description What an organization says when applying for a product.
13926
+ */
13927
+ WaitlistApplyRequest: {
13928
+ /**
13929
+ * Note
13930
+ * @description What your organization would use the product for
13931
+ * @example We manage 12k domains for agency clients and triage renewals by hand.
13932
+ */
13933
+ note?: string | null;
13934
+ };
13935
+ /**
13936
+ * WaitlistEntryResponse
13937
+ * @description An organization's own waitlist application.
13938
+ */
13939
+ WaitlistEntryResponse: {
13940
+ /**
13941
+ * Applied On
13942
+ * Format: date-time
13943
+ * @description When the organization applied
13944
+ */
13945
+ applied_on: Date;
13946
+ /**
13947
+ * Decided On
13948
+ * @description When the application was decided; null while it is pending
13949
+ */
13950
+ decided_on?: Date | null;
13951
+ /** @description Product the application is for */
13952
+ product: components["schemas"]["WaitlistProduct"];
13953
+ /** @description Where the application stands */
13954
+ status: components["schemas"]["WaitlistEntryStatus"];
13955
+ };
13956
+ /**
13957
+ * WaitlistEntryStatus
13958
+ * @enum {string}
13959
+ */
13960
+ WaitlistEntryStatus: "pending" | "granted" | "rejected";
13961
+ /**
13962
+ * WaitlistProduct
13963
+ * @description A product that is not generally available and is reached through the waitlist.
13964
+ *
13965
+ * The member value is the wire form used in URLs and API bodies; the column persists the
13966
+ * member NAME (StringEnum binds `value.name`), so renaming a member is a data migration.
13967
+ * @enum {string}
13968
+ */
13969
+ WaitlistProduct: "ai_concierge";
13970
+ /**
13971
+ * WaitlistProductListResponse
13972
+ * @description The waitlisted products an organization may see.
13973
+ */
13974
+ WaitlistProductListResponse: {
13975
+ /**
13976
+ * Products
13977
+ * @description Waitlisted products this organization may see
13978
+ */
13979
+ products?: components["schemas"]["WaitlistProductState"][];
13980
+ };
13981
+ /**
13982
+ * WaitlistProductState
13983
+ * @description A waitlisted product, and where the organization stands with it.
13984
+ */
13985
+ WaitlistProductState: {
13986
+ /**
13987
+ * Applied On
13988
+ * @description When the organization applied, if it has
13989
+ */
13990
+ applied_on?: Date | null;
13991
+ /**
13992
+ * Can Apply
13993
+ * @description Whether an apply would be accepted right now
13994
+ */
13995
+ can_apply: boolean;
13996
+ /**
13997
+ * Decided On
13998
+ * @description When the application was decided, if it was
13999
+ */
14000
+ decided_on?: Date | null;
14001
+ /**
14002
+ * Description
14003
+ * @description What the product does
14004
+ */
14005
+ description: string;
14006
+ /**
14007
+ * Display Name
14008
+ * @description Human-readable product name
14009
+ */
14010
+ display_name: string;
14011
+ /** @description Product key, used in the apply path */
14012
+ product: components["schemas"]["WaitlistProduct"];
14013
+ /** @description Where the organization's application stands; null until it applies */
14014
+ status?: components["schemas"]["WaitlistEntryStatus"] | null;
14015
+ };
13883
14016
  /**
13884
14017
  * WhitelabelBaseCreate
13885
14018
  * @description Create the base tier: served on a managed subdomain composed from `label`.
@@ -25672,6 +25805,172 @@ export interface operations {
25672
25805
  };
25673
25806
  };
25674
25807
  };
25808
+ list_product_waitlists_v1_organizations_product_waitlist_get: {
25809
+ parameters: {
25810
+ query?: never;
25811
+ header?: {
25812
+ /**
25813
+ * @description Accepted for backwards compatibility; has no effect. Response datetimes are always normalized to UTC and serialized as RFC 3339 with a `Z` suffix, whether or not this header is sent.
25814
+ * @example rfc3339
25815
+ */
25816
+ "X-Datetime-Format"?: components["parameters"]["DatetimeFormatHeader"];
25817
+ };
25818
+ path?: never;
25819
+ cookie?: never;
25820
+ };
25821
+ requestBody?: never;
25822
+ responses: {
25823
+ /** @description Successful Response */
25824
+ 200: {
25825
+ headers: {
25826
+ [name: string]: unknown;
25827
+ };
25828
+ content: {
25829
+ "application/json": components["schemas"]["WaitlistProductListResponse"];
25830
+ };
25831
+ };
25832
+ /** @description Unauthorized */
25833
+ 401: {
25834
+ headers: {
25835
+ [name: string]: unknown;
25836
+ };
25837
+ content: {
25838
+ /** @example {
25839
+ * "code": "ERROR_AUTHENTICATION",
25840
+ * "detail": "Additional error context.",
25841
+ * "status": 401,
25842
+ * "title": "Authentication Error",
25843
+ * "type": "authentication"
25844
+ * } */
25845
+ "application/problem+json": components["schemas"]["Problem"];
25846
+ };
25847
+ };
25848
+ /** @description Forbidden */
25849
+ 403: {
25850
+ headers: {
25851
+ [name: string]: unknown;
25852
+ };
25853
+ content: {
25854
+ /** @example {
25855
+ * "code": "ERROR_PERMISSION_DENIED",
25856
+ * "detail": "Insufficient permissions to perform this action",
25857
+ * "status": 403,
25858
+ * "title": "Permission Denied",
25859
+ * "type": "permission-denied"
25860
+ * } */
25861
+ "application/problem+json": components["schemas"]["Problem"];
25862
+ };
25863
+ };
25864
+ /** @description Validation Error */
25865
+ 422: {
25866
+ headers: {
25867
+ [name: string]: unknown;
25868
+ };
25869
+ content: {
25870
+ "application/problem+json": components["schemas"]["HTTPValidationError"];
25871
+ };
25872
+ };
25873
+ };
25874
+ };
25875
+ apply_for_product_waitlist_v1_organizations_product_waitlist__product__apply_post: {
25876
+ parameters: {
25877
+ query?: never;
25878
+ header?: {
25879
+ /**
25880
+ * @description Accepted for backwards compatibility; has no effect. Response datetimes are always normalized to UTC and serialized as RFC 3339 with a `Z` suffix, whether or not this header is sent.
25881
+ * @example rfc3339
25882
+ */
25883
+ "X-Datetime-Format"?: components["parameters"]["DatetimeFormatHeader"];
25884
+ };
25885
+ path: {
25886
+ product: components["schemas"]["WaitlistProduct"];
25887
+ };
25888
+ cookie?: never;
25889
+ };
25890
+ requestBody?: {
25891
+ content: {
25892
+ "application/json": components["schemas"]["WaitlistApplyRequest"] | null;
25893
+ };
25894
+ };
25895
+ responses: {
25896
+ /** @description Successful Response */
25897
+ 200: {
25898
+ headers: {
25899
+ [name: string]: unknown;
25900
+ };
25901
+ content: {
25902
+ "application/json": components["schemas"]["WaitlistEntryResponse"];
25903
+ };
25904
+ };
25905
+ /** @description Unauthorized */
25906
+ 401: {
25907
+ headers: {
25908
+ [name: string]: unknown;
25909
+ };
25910
+ content: {
25911
+ /** @example {
25912
+ * "code": "ERROR_AUTHENTICATION",
25913
+ * "detail": "Additional error context.",
25914
+ * "status": 401,
25915
+ * "title": "Authentication Error",
25916
+ * "type": "authentication"
25917
+ * } */
25918
+ "application/problem+json": components["schemas"]["Problem"];
25919
+ };
25920
+ };
25921
+ /** @description Forbidden */
25922
+ 403: {
25923
+ headers: {
25924
+ [name: string]: unknown;
25925
+ };
25926
+ content: {
25927
+ /** @example {
25928
+ * "code": "ERROR_PERMISSION_DENIED",
25929
+ * "detail": "Insufficient permissions to perform this action",
25930
+ * "status": 403,
25931
+ * "title": "Permission Denied",
25932
+ * "type": "permission-denied"
25933
+ * } */
25934
+ "application/problem+json": components["schemas"]["Problem"];
25935
+ };
25936
+ };
25937
+ /** @description Not Found */
25938
+ 404: {
25939
+ headers: {
25940
+ [name: string]: unknown;
25941
+ };
25942
+ content: {
25943
+ /** @example {
25944
+ * "code": "ERROR_WAITLIST_NOT_INVITED",
25945
+ * "detail": "No waitlist is available for ai_concierge",
25946
+ * "product": "ai_concierge",
25947
+ * "status": 404,
25948
+ * "title": "Waitlist Error",
25949
+ * "type": "waitlist-not-invited"
25950
+ * } */
25951
+ "application/problem+json": components["schemas"]["Problem"];
25952
+ };
25953
+ };
25954
+ /** @description Conflict */
25955
+ 409: {
25956
+ headers: {
25957
+ [name: string]: unknown;
25958
+ };
25959
+ content: {
25960
+ "application/problem+json": components["schemas"]["Problem"];
25961
+ };
25962
+ };
25963
+ /** @description Validation Error */
25964
+ 422: {
25965
+ headers: {
25966
+ [name: string]: unknown;
25967
+ };
25968
+ content: {
25969
+ "application/problem+json": components["schemas"]["HTTPValidationError"];
25970
+ };
25971
+ };
25972
+ };
25973
+ };
25675
25974
  list_role_permissions_v1_organizations_role_permissions_get: {
25676
25975
  parameters: {
25677
25976
  query?: never;