@opusdns/api 1.110.0 → 1.111.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.2.0"
4
4
  },
5
5
  "name": "@opusdns/api",
6
- "version": "1.110.0",
6
+ "version": "1.111.0",
7
7
  "description": "TypeScript types for the OpusDNS OpenAPI specification",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
@@ -116,6 +116,7 @@ import type {
116
116
  VerificationClaimType,
117
117
  VerificationDeadlineType,
118
118
  VerificationType,
119
+ WhitelabelBrandingTier,
119
120
  WhitelabelOnboardingFailureCode,
120
121
  WhitelabelOnboardingFailureType,
121
122
  WhitelabelOnboardingStatus,
@@ -211,6 +212,7 @@ export const BILLING_TRANSACTION_ACTION = {
211
212
  TRADE: "trade",
212
213
  APPLICATION: "application",
213
214
  SERVICE_FEE: "service_fee",
215
+ UPGRADE_FEE: "upgrade_fee",
214
216
  WALLET_TOP_UP: "wallet_top_up",
215
217
  } as const satisfies Record<string, BillingTransactionAction>;
216
218
 
@@ -222,6 +224,7 @@ export const BILLING_TRANSACTION_ACTION_VALUES = [
222
224
  'trade',
223
225
  'application',
224
226
  'service_fee',
227
+ 'upgrade_fee',
225
228
  'wallet_top_up',
226
229
  ] as const satisfies ReadonlyArray<BillingTransactionAction>;
227
230
 
@@ -233,6 +236,7 @@ export const BILLING_TRANSACTION_PRODUCT_TYPE = {
233
236
  ACCOUNT_WALLET: "account_wallet",
234
237
  VANITY_NAMESERVER: "vanity_nameserver",
235
238
  WHITELABEL_BRANDING: "whitelabel_branding",
239
+ WHITELABEL_BRANDING_PLUS: "whitelabel_branding_plus",
236
240
  } as const satisfies Record<string, BillingTransactionProductType>;
237
241
 
238
242
  export const BILLING_TRANSACTION_PRODUCT_TYPE_VALUES = [
@@ -243,6 +247,7 @@ export const BILLING_TRANSACTION_PRODUCT_TYPE_VALUES = [
243
247
  'account_wallet',
244
248
  'vanity_nameserver',
245
249
  'whitelabel_branding',
250
+ 'whitelabel_branding_plus',
246
251
  ] as const satisfies ReadonlyArray<BillingTransactionProductType>;
247
252
 
248
253
  export const BILLING_TRANSACTION_SORT_FIELD = {
@@ -2066,6 +2071,16 @@ export const VERIFICATION_TYPE_VALUES = [
2066
2071
  'email',
2067
2072
  ] as const satisfies ReadonlyArray<VerificationType>;
2068
2073
 
2074
+ export const WHITELABEL_BRANDING_TIER = {
2075
+ BASE: "base",
2076
+ PLUS: "plus",
2077
+ } as const satisfies Record<string, WhitelabelBrandingTier>;
2078
+
2079
+ export const WHITELABEL_BRANDING_TIER_VALUES = [
2080
+ 'base',
2081
+ 'plus',
2082
+ ] as const satisfies ReadonlyArray<WhitelabelBrandingTier>;
2083
+
2069
2084
  export const WHITELABEL_ONBOARDING_FAILURE_CODE = {
2070
2085
  ZONE_NOT_OWNED: "zone_not_owned",
2071
2086
  DELEGATION_MISSING: "delegation_missing",
@@ -428,9 +428,12 @@ import type {
428
428
  VerificationRegistrantDetails,
429
429
  Verification,
430
430
  VisitsByKeyBucket,
431
- WhitelabelBrandingCreate,
431
+ WhitelabelBaseCreate,
432
+ WhitelabelBrandingPatch,
432
433
  WhitelabelBrandingRecheck,
433
434
  WhitelabelBranding,
435
+ WhitelabelPlusCreate,
436
+ WhitelabelUpgradeToPlus,
434
437
  WhoisBase,
435
438
  ZoneVanitySetUpdate,
436
439
  ZonesContext,
@@ -5810,17 +5813,23 @@ export const KEYS_VISITS_BY_KEY_BUCKET = [
5810
5813
  KEY_VISITS_BY_KEY_BUCKET_UNIQUE,
5811
5814
  ] as const satisfies (keyof VisitsByKeyBucket)[];
5812
5815
 
5813
- export const KEY_WHITELABEL_BRANDING_CREATE_AUTH_SUBDOMAIN = 'auth_subdomain' satisfies keyof WhitelabelBrandingCreate;
5814
- export const KEY_WHITELABEL_BRANDING_CREATE_DASHBOARD_SUBDOMAIN = 'dashboard_subdomain' satisfies keyof WhitelabelBrandingCreate;
5815
- export const KEY_WHITELABEL_BRANDING_CREATE_HOSTNAME = 'hostname' satisfies keyof WhitelabelBrandingCreate;
5816
- export const KEY_WHITELABEL_BRANDING_CREATE_PERIOD = 'period' satisfies keyof WhitelabelBrandingCreate;
5816
+ export const KEY_WHITELABEL_BASE_CREATE_LABEL = 'label' satisfies keyof WhitelabelBaseCreate;
5817
+ export const KEY_WHITELABEL_BASE_CREATE_PERIOD = 'period' satisfies keyof WhitelabelBaseCreate;
5818
+ export const KEY_WHITELABEL_BASE_CREATE_TIER = 'tier' satisfies keyof WhitelabelBaseCreate;
5817
5819
 
5818
- export const KEYS_WHITELABEL_BRANDING_CREATE = [
5819
- KEY_WHITELABEL_BRANDING_CREATE_AUTH_SUBDOMAIN,
5820
- KEY_WHITELABEL_BRANDING_CREATE_DASHBOARD_SUBDOMAIN,
5821
- KEY_WHITELABEL_BRANDING_CREATE_HOSTNAME,
5822
- KEY_WHITELABEL_BRANDING_CREATE_PERIOD,
5823
- ] as const satisfies (keyof WhitelabelBrandingCreate)[];
5820
+ export const KEYS_WHITELABEL_BASE_CREATE = [
5821
+ KEY_WHITELABEL_BASE_CREATE_LABEL,
5822
+ KEY_WHITELABEL_BASE_CREATE_PERIOD,
5823
+ KEY_WHITELABEL_BASE_CREATE_TIER,
5824
+ ] as const satisfies (keyof WhitelabelBaseCreate)[];
5825
+
5826
+ export const KEY_WHITELABEL_BRANDING_PATCH_ENABLED = 'enabled' satisfies keyof WhitelabelBrandingPatch;
5827
+ export const KEY_WHITELABEL_BRANDING_PATCH_LABEL = 'label' satisfies keyof WhitelabelBrandingPatch;
5828
+
5829
+ export const KEYS_WHITELABEL_BRANDING_PATCH = [
5830
+ KEY_WHITELABEL_BRANDING_PATCH_ENABLED,
5831
+ KEY_WHITELABEL_BRANDING_PATCH_LABEL,
5832
+ ] as const satisfies (keyof WhitelabelBrandingPatch)[];
5824
5833
 
5825
5834
  export const KEY_WHITELABEL_BRANDING_RECHECK_AUTH_SUBDOMAIN = 'auth_subdomain' satisfies keyof WhitelabelBrandingRecheck;
5826
5835
  export const KEY_WHITELABEL_BRANDING_RECHECK_DASHBOARD_SUBDOMAIN = 'dashboard_subdomain' satisfies keyof WhitelabelBrandingRecheck;
@@ -5833,7 +5842,9 @@ export const KEYS_WHITELABEL_BRANDING_RECHECK = [
5833
5842
  ] as const satisfies (keyof WhitelabelBrandingRecheck)[];
5834
5843
 
5835
5844
  export const KEY_WHITELABEL_BRANDING_AUTH_HOSTNAME = 'auth_hostname' satisfies keyof WhitelabelBranding;
5845
+ export const KEY_WHITELABEL_BRANDING_BASE_LABEL = 'base_label' satisfies keyof WhitelabelBranding;
5836
5846
  export const KEY_WHITELABEL_BRANDING_CREATED_ON = 'created_on' satisfies keyof WhitelabelBranding;
5847
+ export const KEY_WHITELABEL_BRANDING_ENABLED = 'enabled' satisfies keyof WhitelabelBranding;
5837
5848
  export const KEY_WHITELABEL_BRANDING_FAILURE_CODE = 'failure_code' satisfies keyof WhitelabelBranding;
5838
5849
  export const KEY_WHITELABEL_BRANDING_FAILURE_DETAIL = 'failure_detail' satisfies keyof WhitelabelBranding;
5839
5850
  export const KEY_WHITELABEL_BRANDING_FAILURE_TYPE = 'failure_type' satisfies keyof WhitelabelBranding;
@@ -5841,13 +5852,16 @@ export const KEY_WHITELABEL_BRANDING_HOSTNAME = 'hostname' satisfies keyof White
5841
5852
  export const KEY_WHITELABEL_BRANDING_KEYCLOAK_CLIENT_ID = 'keycloak_client_id' satisfies keyof WhitelabelBranding;
5842
5853
  export const KEY_WHITELABEL_BRANDING_ONBOARDING_STATUS = 'onboarding_status' satisfies keyof WhitelabelBranding;
5843
5854
  export const KEY_WHITELABEL_BRANDING_ORGANIZATION_ID = 'organization_id' satisfies keyof WhitelabelBranding;
5855
+ export const KEY_WHITELABEL_BRANDING_TIER = 'tier' satisfies keyof WhitelabelBranding;
5844
5856
  export const KEY_WHITELABEL_BRANDING_UPDATED_ON = 'updated_on' satisfies keyof WhitelabelBranding;
5845
5857
  export const KEY_WHITELABEL_BRANDING_VERIFICATION_DOMAIN = 'verification_domain' satisfies keyof WhitelabelBranding;
5846
5858
  export const KEY_WHITELABEL_BRANDING_WHITELABEL_BRANDING_ID = 'whitelabel_branding_id' satisfies keyof WhitelabelBranding;
5847
5859
 
5848
5860
  export const KEYS_WHITELABEL_BRANDING = [
5849
5861
  KEY_WHITELABEL_BRANDING_AUTH_HOSTNAME,
5862
+ KEY_WHITELABEL_BRANDING_BASE_LABEL,
5850
5863
  KEY_WHITELABEL_BRANDING_CREATED_ON,
5864
+ KEY_WHITELABEL_BRANDING_ENABLED,
5851
5865
  KEY_WHITELABEL_BRANDING_FAILURE_CODE,
5852
5866
  KEY_WHITELABEL_BRANDING_FAILURE_DETAIL,
5853
5867
  KEY_WHITELABEL_BRANDING_FAILURE_TYPE,
@@ -5855,11 +5869,38 @@ export const KEYS_WHITELABEL_BRANDING = [
5855
5869
  KEY_WHITELABEL_BRANDING_KEYCLOAK_CLIENT_ID,
5856
5870
  KEY_WHITELABEL_BRANDING_ONBOARDING_STATUS,
5857
5871
  KEY_WHITELABEL_BRANDING_ORGANIZATION_ID,
5872
+ KEY_WHITELABEL_BRANDING_TIER,
5858
5873
  KEY_WHITELABEL_BRANDING_UPDATED_ON,
5859
5874
  KEY_WHITELABEL_BRANDING_VERIFICATION_DOMAIN,
5860
5875
  KEY_WHITELABEL_BRANDING_WHITELABEL_BRANDING_ID,
5861
5876
  ] as const satisfies (keyof WhitelabelBranding)[];
5862
5877
 
5878
+ export const KEY_WHITELABEL_PLUS_CREATE_AUTH_SUBDOMAIN = 'auth_subdomain' satisfies keyof WhitelabelPlusCreate;
5879
+ export const KEY_WHITELABEL_PLUS_CREATE_DASHBOARD_SUBDOMAIN = 'dashboard_subdomain' satisfies keyof WhitelabelPlusCreate;
5880
+ export const KEY_WHITELABEL_PLUS_CREATE_HOSTNAME = 'hostname' satisfies keyof WhitelabelPlusCreate;
5881
+ export const KEY_WHITELABEL_PLUS_CREATE_LABEL = 'label' satisfies keyof WhitelabelPlusCreate;
5882
+ export const KEY_WHITELABEL_PLUS_CREATE_PERIOD = 'period' satisfies keyof WhitelabelPlusCreate;
5883
+ export const KEY_WHITELABEL_PLUS_CREATE_TIER = 'tier' satisfies keyof WhitelabelPlusCreate;
5884
+
5885
+ export const KEYS_WHITELABEL_PLUS_CREATE = [
5886
+ KEY_WHITELABEL_PLUS_CREATE_AUTH_SUBDOMAIN,
5887
+ KEY_WHITELABEL_PLUS_CREATE_DASHBOARD_SUBDOMAIN,
5888
+ KEY_WHITELABEL_PLUS_CREATE_HOSTNAME,
5889
+ KEY_WHITELABEL_PLUS_CREATE_LABEL,
5890
+ KEY_WHITELABEL_PLUS_CREATE_PERIOD,
5891
+ KEY_WHITELABEL_PLUS_CREATE_TIER,
5892
+ ] as const satisfies (keyof WhitelabelPlusCreate)[];
5893
+
5894
+ export const KEY_WHITELABEL_UPGRADE_TO_PLUS_AUTH_SUBDOMAIN = 'auth_subdomain' satisfies keyof WhitelabelUpgradeToPlus;
5895
+ export const KEY_WHITELABEL_UPGRADE_TO_PLUS_DASHBOARD_SUBDOMAIN = 'dashboard_subdomain' satisfies keyof WhitelabelUpgradeToPlus;
5896
+ export const KEY_WHITELABEL_UPGRADE_TO_PLUS_HOSTNAME = 'hostname' satisfies keyof WhitelabelUpgradeToPlus;
5897
+
5898
+ export const KEYS_WHITELABEL_UPGRADE_TO_PLUS = [
5899
+ KEY_WHITELABEL_UPGRADE_TO_PLUS_AUTH_SUBDOMAIN,
5900
+ KEY_WHITELABEL_UPGRADE_TO_PLUS_DASHBOARD_SUBDOMAIN,
5901
+ KEY_WHITELABEL_UPGRADE_TO_PLUS_HOSTNAME,
5902
+ ] as const satisfies (keyof WhitelabelUpgradeToPlus)[];
5903
+
5863
5904
  export const KEY_WHOIS_BASE_WHOIS_SERVER = 'whois_server' satisfies keyof WhoisBase;
5864
5905
 
5865
5906
  export const KEYS_WHOIS_BASE = [
@@ -55,7 +55,8 @@ import type {
55
55
  UserUpdate,
56
56
  VanityNameserverSetCreate,
57
57
  VanityNsCheckPublicReq,
58
- WhitelabelBrandingCreate,
58
+ WhitelabelBrandingPatch,
59
+ WhitelabelUpgradeToPlus,
59
60
  ZoneVanitySetUpdate,
60
61
  } from './schemas';
61
62
 
@@ -1151,10 +1152,13 @@ export type DELETE_VanityNameserverSetsDefault_Request = {
1151
1152
  export type GET_WhitelabelBranding_Request = {
1152
1153
  };
1153
1154
 
1155
+ export type PATCH_WhitelabelBranding_Request = {
1156
+ requestBody: WhitelabelBrandingPatch;
1157
+ };
1158
+ export type PATCH_WhitelabelBranding_Request_Body = PATCH_WhitelabelBranding_Request['requestBody'];
1159
+
1154
1160
  export type POST_WhitelabelBranding_Request = {
1155
- requestBody: WhitelabelBrandingCreate;
1156
1161
  };
1157
- export type POST_WhitelabelBranding_Request_Body = POST_WhitelabelBranding_Request['requestBody'];
1158
1162
 
1159
1163
  export type POST_WhitelabelBrandingEmailPreview_Request = {
1160
1164
  requestBody: PreviewMailReq;
@@ -1166,3 +1170,8 @@ export type GET_WhitelabelBrandingEmailTemplates_Request = {
1166
1170
 
1167
1171
  export type POST_WhitelabelBrandingRecheck_Request = {
1168
1172
  };
1173
+
1174
+ export type POST_WhitelabelBrandingTier_Request = {
1175
+ requestBody: WhitelabelUpgradeToPlus;
1176
+ };
1177
+ export type POST_WhitelabelBrandingTier_Request_Body = POST_WhitelabelBrandingTier_Request['requestBody'];
@@ -1018,6 +1018,11 @@ export type PATCH_VanityNameserverSetsBySetIdDefault_Response = PATCH_VanityName
1018
1018
  export type PATCH_VanityNameserverSetsBySetIdDefault_Response_200 = SetVanityNameserverSetDefaultRes;
1019
1019
  export type PATCH_VanityNameserverSetsBySetIdDefault_Response_422 = HTTPValidationError;
1020
1020
 
1021
+ export type PATCH_WhitelabelBranding_Response = PATCH_WhitelabelBranding_Response_202 | PATCH_WhitelabelBranding_Response_422;
1022
+
1023
+ export type PATCH_WhitelabelBranding_Response_202 = WhitelabelBranding;
1024
+ export type PATCH_WhitelabelBranding_Response_422 = HTTPValidationError;
1025
+
1021
1026
  export type POST_AiConciergeConversations_Response = POST_AiConciergeConversations_Response_201 | POST_AiConciergeConversations_Response_401 | POST_AiConciergeConversations_Response_404 | POST_AiConciergeConversations_Response_422 | POST_AiConciergeConversations_Response_502;
1022
1027
 
1023
1028
  export type POST_AiConciergeConversations_Response_201 = Conversation;
@@ -1413,6 +1418,11 @@ export type POST_WhitelabelBrandingRecheck_Response = POST_WhitelabelBrandingRec
1413
1418
  export type POST_WhitelabelBrandingRecheck_Response_202 = WhitelabelBranding;
1414
1419
  export type POST_WhitelabelBrandingRecheck_Response_422 = HTTPValidationError;
1415
1420
 
1421
+ export type POST_WhitelabelBrandingTier_Response = POST_WhitelabelBrandingTier_Response_202 | POST_WhitelabelBrandingTier_Response_422;
1422
+
1423
+ export type POST_WhitelabelBrandingTier_Response_202 = ProductCreateRes;
1424
+ export type POST_WhitelabelBrandingTier_Response_422 = HTTPValidationError;
1425
+
1416
1426
  export type PUT_ContactsByContactIdVerification_Response = PUT_ContactsByContactIdVerification_Response_400 | PUT_ContactsByContactIdVerification_Response_401 | PUT_ContactsByContactIdVerification_Response_403 | PUT_ContactsByContactIdVerification_Response_404 | PUT_ContactsByContactIdVerification_Response_422;
1417
1427
 
1418
1428
  export type PUT_ContactsByContactIdVerification_Response_400 = Problem;
@@ -569,12 +569,16 @@ export type VerificationRegistrantDetails = components['schemas']['VerificationR
569
569
  export type Verification = components['schemas']['VerificationResponse'];
570
570
  export type VerificationType = components['schemas']['VerificationType'];
571
571
  export type VisitsByKeyBucket = components['schemas']['VisitsByKeyBucket'];
572
- export type WhitelabelBrandingCreate = components['schemas']['WhitelabelBrandingCreate'];
572
+ export type WhitelabelBaseCreate = components['schemas']['WhitelabelBaseCreate'];
573
+ export type WhitelabelBrandingPatch = components['schemas']['WhitelabelBrandingPatch'];
573
574
  export type WhitelabelBrandingRecheck = components['schemas']['WhitelabelBrandingRecheck'];
574
575
  export type WhitelabelBranding = components['schemas']['WhitelabelBrandingResponse'];
576
+ export type WhitelabelBrandingTier = components['schemas']['WhitelabelBrandingTier'];
575
577
  export type WhitelabelOnboardingFailureCode = components['schemas']['WhitelabelOnboardingFailureCode'];
576
578
  export type WhitelabelOnboardingFailureType = components['schemas']['WhitelabelOnboardingFailureType'];
577
579
  export type WhitelabelOnboardingStatus = components['schemas']['WhitelabelOnboardingStatus'];
580
+ export type WhitelabelPlusCreate = components['schemas']['WhitelabelPlusCreate'];
581
+ export type WhitelabelUpgradeToPlus = components['schemas']['WhitelabelUpgradeToPlus'];
578
582
  export type WhoisBase = components['schemas']['WhoisBase'];
579
583
  export type ZoneIncludeField = components['schemas']['ZoneIncludeField'];
580
584
  export type ZoneSortField = components['schemas']['ZoneSortField'];
package/src/openapi.yaml CHANGED
@@ -263,6 +263,7 @@ components:
263
263
  - trade
264
264
  - application
265
265
  - service_fee
266
+ - upgrade_fee
266
267
  - wallet_top_up
267
268
  title: BillingTransactionAction
268
269
  type: string
@@ -275,6 +276,7 @@ components:
275
276
  - account_wallet
276
277
  - vanity_nameserver
277
278
  - whitelabel_branding
279
+ - whitelabel_branding_plus
278
280
  title: BillingTransactionProductType
279
281
  type: string
280
282
  BillingTransactionResponse:
@@ -14541,53 +14543,59 @@ components:
14541
14543
  - unique
14542
14544
  title: VisitsByKeyBucket
14543
14545
  type: object
14544
- WhitelabelBrandingCreate:
14545
- description: 'Public create request body. The customer supplies their domain
14546
- plus the subdomains the
14547
-
14548
- two whitelabel hosts live on; the full hostnames are composed here. `dashboard_subdomain`
14549
-
14550
- is optional - omitted, the dashboard is served on `hostname` itself (the zone
14551
- apex when
14546
+ WhitelabelBaseCreate:
14547
+ additionalProperties: false
14548
+ description: 'Create the base tier: served on a managed subdomain composed from
14549
+ `label`.'
14550
+ properties:
14551
+ label:
14552
+ description: Managed-subdomain label; composed into <label>-<hash>.<base-tier
14553
+ suffix>
14554
+ maxLength: 45
14555
+ minLength: 1
14556
+ title: Label
14557
+ type: string
14558
+ period:
14559
+ $ref: '#/components/schemas/Period'
14560
+ description: 'Billing period; offered: 1 month or 1 year'
14561
+ tier:
14562
+ const: base
14563
+ title: Tier
14564
+ type: string
14565
+ required:
14566
+ - tier
14567
+ - label
14568
+ - period
14569
+ title: WhitelabelBaseCreate
14570
+ type: object
14571
+ WhitelabelBrandingPatch:
14572
+ description: 'Public patch body. Neither field is a purchase, so nothing here
14573
+ touches the subscription or
14552
14574
 
14553
- `hostname` is the bare domain). The owning org comes from auth context, and
14575
+ its price: `label` moves the base subdomain to a different label (base tier
14576
+ only - a plus
14554
14577
 
14555
- `verification_domain` is derived server-side (the registrable domain of the
14556
- composed
14578
+ whitelabel is re-pointed by its hostnames through recheck), and `enabled`
14579
+ starts or stops
14557
14580
 
14558
- dashboard host), so neither is accepted here.'
14581
+ serving it. At least one must be given.'
14559
14582
  properties:
14560
- auth_subdomain:
14561
- description: Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
14562
- maxLength: 255
14563
- minLength: 1
14564
- title: Auth Subdomain
14565
- type: string
14566
- dashboard_subdomain:
14583
+ enabled:
14567
14584
  anyOf:
14568
- - maxLength: 255
14585
+ - type: boolean
14586
+ - type: 'null'
14587
+ description: Whether this whitelabel should be served
14588
+ title: Enabled
14589
+ label:
14590
+ anyOf:
14591
+ - maxLength: 45
14569
14592
  minLength: 1
14570
14593
  type: string
14571
14594
  - type: 'null'
14572
- description: Subdomain the dashboard is served on (e.g. dash -> dash.customer.com);
14573
- omit for the apex
14574
- title: Dashboard Subdomain
14575
- hostname:
14576
- description: Domain the whitelabel runs under (e.g. customer.com); must
14577
- be an OpusDNS-hosted zone
14578
- maxLength: 255
14579
- minLength: 1
14580
- title: Hostname
14581
- type: string
14582
- period:
14583
- $ref: '#/components/schemas/Period'
14584
- description: 'Billing period for the subscription; offered: 1 month or 1
14585
- year'
14586
- required:
14587
- - hostname
14588
- - auth_subdomain
14589
- - period
14590
- title: WhitelabelBrandingCreate
14595
+ description: New base-tier label; the hostnames become <label>-<hash>.<base-tier
14596
+ suffix>. Base tier only.
14597
+ title: Label
14598
+ title: WhitelabelBrandingPatch
14591
14599
  type: object
14592
14600
  WhitelabelBrandingRecheck:
14593
14601
  description: 'Public recheck body. Empty = re-run onboarding against the stored
@@ -14596,10 +14604,10 @@ components:
14596
14604
  fixing DNS). hostname + auth_subdomain present = re-point a wrong domain before
14597
14605
  re-running
14598
14606
 
14599
- (pre-provisioning only; server rejects once a Keycloak client exists). Same
14600
- composition
14607
+ (pre-provisioning only; server rejects once a Keycloak client exists). Plus
14608
+ tier only - a
14601
14609
 
14602
- rules as WhitelabelBrandingCreate.'
14610
+ base whitelabel is re-labelled through PATCH instead.'
14603
14611
  properties:
14604
14612
  auth_subdomain:
14605
14613
  anyOf:
@@ -14632,10 +14640,19 @@ components:
14632
14640
  minLength: 1
14633
14641
  title: Auth Hostname
14634
14642
  type: string
14643
+ base_label:
14644
+ maxLength: 255
14645
+ minLength: 1
14646
+ title: Base Label
14647
+ type: string
14635
14648
  created_on:
14636
14649
  format: date-time
14637
14650
  title: Created On
14638
14651
  type: string
14652
+ enabled:
14653
+ default: true
14654
+ title: Enabled
14655
+ type: boolean
14639
14656
  failure_code:
14640
14657
  anyOf:
14641
14658
  - $ref: '#/components/schemas/WhitelabelOnboardingFailureCode'
@@ -14672,6 +14689,8 @@ components:
14672
14689
  title: Organization Id
14673
14690
  type: string
14674
14691
  x-typeid-prefix: organization
14692
+ tier:
14693
+ $ref: '#/components/schemas/WhitelabelBrandingTier'
14675
14694
  updated_on:
14676
14695
  format: date-time
14677
14696
  title: Updated On
@@ -14692,9 +14711,11 @@ components:
14692
14711
  required:
14693
14712
  - whitelabel_branding_id
14694
14713
  - organization_id
14714
+ - tier
14695
14715
  - onboarding_status
14696
14716
  - hostname
14697
14717
  - auth_hostname
14718
+ - base_label
14698
14719
  - verification_domain
14699
14720
  - keycloak_client_id
14700
14721
  - created_on
@@ -14702,6 +14723,29 @@ components:
14702
14723
  - failure_type
14703
14724
  title: WhitelabelBrandingResponse
14704
14725
  type: object
14726
+ WhitelabelBrandingTier:
14727
+ description: 'Which tier a whitelabel config is on. One config per organization,
14728
+ one tier at a time.
14729
+
14730
+
14731
+ BASE serves the customer on a subdomain of an OpusDNS-owned zone; PLUS serves
14732
+ them on their
14733
+
14734
+ own domain. A whitelabel switches between the two in place (a plan change),
14735
+ so `tier` is a
14736
+
14737
+ mutable attribute of the single config row, never a discriminator between
14738
+ two rows. Deliberately
14739
+
14740
+ stored rather than inferred from the hostname, so a base-zone rename can never
14741
+ re-route the row
14742
+
14743
+ down the wrong onboarding path.'
14744
+ enum:
14745
+ - base
14746
+ - plus
14747
+ title: WhitelabelBrandingTier
14748
+ type: string
14705
14749
  WhitelabelOnboardingFailureCode:
14706
14750
  description: 'Stable, frontend-facing reason a terminal onboarding failure happened.
14707
14751
  The free-text
@@ -14734,6 +14778,99 @@ components:
14734
14778
  - failed
14735
14779
  title: WhitelabelOnboardingStatus
14736
14780
  type: string
14781
+ WhitelabelPlusCreate:
14782
+ additionalProperties: false
14783
+ description: 'Create the plus tier: served on the customer''s own domain; `label`
14784
+ still reserves a base
14785
+
14786
+ subdomain (kept for the redirect/downgrade).'
14787
+ properties:
14788
+ auth_subdomain:
14789
+ description: Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
14790
+ maxLength: 255
14791
+ minLength: 1
14792
+ title: Auth Subdomain
14793
+ type: string
14794
+ dashboard_subdomain:
14795
+ anyOf:
14796
+ - maxLength: 255
14797
+ minLength: 1
14798
+ type: string
14799
+ - type: 'null'
14800
+ description: Subdomain the dashboard is served on (e.g. dash -> dash.customer.com);
14801
+ omit for apex
14802
+ title: Dashboard Subdomain
14803
+ hostname:
14804
+ description: Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted
14805
+ zone owned by the org
14806
+ maxLength: 255
14807
+ minLength: 1
14808
+ title: Hostname
14809
+ type: string
14810
+ label:
14811
+ description: Managed-subdomain label reserved for the redirect/downgrade
14812
+ maxLength: 45
14813
+ minLength: 1
14814
+ title: Label
14815
+ type: string
14816
+ period:
14817
+ $ref: '#/components/schemas/Period'
14818
+ description: 'Billing period; offered: 1 month or 1 year'
14819
+ tier:
14820
+ const: plus
14821
+ title: Tier
14822
+ type: string
14823
+ required:
14824
+ - hostname
14825
+ - auth_subdomain
14826
+ - tier
14827
+ - label
14828
+ - period
14829
+ title: WhitelabelPlusCreate
14830
+ type: object
14831
+ WhitelabelUpgradeToPlus:
14832
+ additionalProperties: false
14833
+ description: 'Upgrade the whitelabel to the plus tier, served on the customer''s
14834
+ own domain. This is NOT a
14835
+
14836
+ term change: the subscription keeps its period and renewal date and simply
14837
+ renews at the plus
14838
+
14839
+ price. A yearly upgrade bills a one-time prorated difference for the remaining
14840
+ whole months; a
14841
+
14842
+ monthly upgrade bills nothing now. Downgrades (plus -> base) are not supported
14843
+ - cancel + rebook
14844
+
14845
+ instead - so this body only ever moves to plus (no tier field, no period).'
14846
+ properties:
14847
+ auth_subdomain:
14848
+ description: Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
14849
+ maxLength: 255
14850
+ minLength: 1
14851
+ title: Auth Subdomain
14852
+ type: string
14853
+ dashboard_subdomain:
14854
+ anyOf:
14855
+ - maxLength: 255
14856
+ minLength: 1
14857
+ type: string
14858
+ - type: 'null'
14859
+ description: Subdomain the dashboard is served on (e.g. dash -> dash.customer.com);
14860
+ omit for apex
14861
+ title: Dashboard Subdomain
14862
+ hostname:
14863
+ description: Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted
14864
+ zone owned by the org
14865
+ maxLength: 255
14866
+ minLength: 1
14867
+ title: Hostname
14868
+ type: string
14869
+ required:
14870
+ - hostname
14871
+ - auth_subdomain
14872
+ title: WhitelabelUpgradeToPlus
14873
+ type: object
14737
14874
  WhoisBase:
14738
14875
  properties:
14739
14876
  whois_server:
@@ -15176,7 +15313,7 @@ info:
15176
15313
  \n\n"
15177
15314
  summary: OpusDNS - your gateway to a seamless domain management experience.
15178
15315
  title: OpusDNS API
15179
- version: 2026-08-12-133338
15316
+ version: 2026-08-12-140327
15180
15317
  x-logo:
15181
15318
  altText: OpusDNS API Reference
15182
15319
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -32182,6 +32319,37 @@ paths:
32182
32319
  - whitelabel
32183
32320
  x-required-permissions:
32184
32321
  - whitelabel_branding:read
32322
+ patch:
32323
+ operationId: patch_whitelabel_branding_v1_whitelabel_branding_patch
32324
+ parameters:
32325
+ - $ref: '#/components/parameters/DatetimeFormatHeader'
32326
+ requestBody:
32327
+ content:
32328
+ application/json:
32329
+ schema:
32330
+ $ref: '#/components/schemas/WhitelabelBrandingPatch'
32331
+ required: true
32332
+ responses:
32333
+ '202':
32334
+ content:
32335
+ application/json:
32336
+ schema:
32337
+ $ref: '#/components/schemas/WhitelabelBrandingResponse'
32338
+ description: Successful Response
32339
+ '422':
32340
+ content:
32341
+ application/problem+json:
32342
+ schema:
32343
+ $ref: '#/components/schemas/HTTPValidationError'
32344
+ description: Validation Error
32345
+ security:
32346
+ - OAuth2PasswordBearer: []
32347
+ - APIKeyHeader: []
32348
+ summary: Change the organization's whitelabel branding config (relabel / enable)
32349
+ tags:
32350
+ - whitelabel
32351
+ x-required-permissions:
32352
+ - whitelabel_branding:manage
32185
32353
  post:
32186
32354
  operationId: create_whitelabel_branding_v1_whitelabel_branding_post
32187
32355
  parameters:
@@ -32190,7 +32358,15 @@ paths:
32190
32358
  content:
32191
32359
  application/json:
32192
32360
  schema:
32193
- $ref: '#/components/schemas/WhitelabelBrandingCreate'
32361
+ discriminator:
32362
+ mapping:
32363
+ base: '#/components/schemas/WhitelabelBaseCreate'
32364
+ plus: '#/components/schemas/WhitelabelPlusCreate'
32365
+ propertyName: tier
32366
+ oneOf:
32367
+ - $ref: '#/components/schemas/WhitelabelBaseCreate'
32368
+ - $ref: '#/components/schemas/WhitelabelPlusCreate'
32369
+ title: Body
32194
32370
  required: true
32195
32371
  responses:
32196
32372
  '202':
@@ -32208,7 +32384,7 @@ paths:
32208
32384
  security:
32209
32385
  - OAuth2PasswordBearer: []
32210
32386
  - APIKeyHeader: []
32211
- summary: Create the organization's whitelabel branding config
32387
+ summary: Buy the organization's whitelabel branding (base or plus tier)
32212
32388
  tags:
32213
32389
  - whitelabel
32214
32390
  x-required-permissions:
@@ -32305,6 +32481,39 @@ paths:
32305
32481
  - whitelabel
32306
32482
  x-required-permissions:
32307
32483
  - whitelabel_branding:manage
32484
+ /v1/whitelabel-branding/tier:
32485
+ post:
32486
+ operationId: upgrade_whitelabel_to_plus_v1_whitelabel_branding_tier_post
32487
+ parameters:
32488
+ - $ref: '#/components/parameters/DatetimeFormatHeader'
32489
+ requestBody:
32490
+ content:
32491
+ application/json:
32492
+ schema:
32493
+ $ref: '#/components/schemas/WhitelabelUpgradeToPlus'
32494
+ required: true
32495
+ responses:
32496
+ '202':
32497
+ content:
32498
+ application/json:
32499
+ schema:
32500
+ $ref: '#/components/schemas/ProductCreateRes'
32501
+ description: Successful Response
32502
+ '422':
32503
+ content:
32504
+ application/problem+json:
32505
+ schema:
32506
+ $ref: '#/components/schemas/HTTPValidationError'
32507
+ description: Validation Error
32508
+ security:
32509
+ - OAuth2PasswordBearer: []
32510
+ - APIKeyHeader: []
32511
+ summary: Upgrade the whitelabel to the plus tier (served on the customer's own
32512
+ domain)
32513
+ tags:
32514
+ - whitelabel
32515
+ x-required-permissions:
32516
+ - whitelabel_branding:manage
32308
32517
  servers:
32309
32518
  - description: Production environment
32310
32519
  url: https://api.opusdns.com
@@ -32729,10 +32938,94 @@ tags:
32729
32938
  - description: 'Endpoints for managing an organization''s whitelabel branding configuration.
32730
32939
 
32731
32940
 
32732
- The create body carries the customer''s domain plus subdomains: `{"hostname":
32733
- "customer.com", "dashboard_subdomain": "dash", "auth_subdomain": "auth"}` composes
32734
- `dash.customer.com` and `auth.customer.com`; omitting `dashboard_subdomain` serves
32735
- the dashboard on the domain apex itself.
32941
+ An organization has one whitelabel config, on one tier at a time.
32942
+
32943
+ `GET /v1/whitelabel-branding` returns it, or `404` when nothing is set up.
32944
+
32945
+
32946
+ The **base** tier serves the customer on a subdomain of a zone OpusDNS owns, so
32947
+ it needs nothing from them but a name.
32948
+
32949
+ The **plus** tier serves them on their own domain for the fully unbranded experience.
32950
+
32951
+
32952
+ `POST /v1/whitelabel-branding` buys a whitelabel on the chosen tier: `{"tier":
32953
+ "base", "label": "acme", "period": {"value": 1, "unit": "y"}}`, or for plus `{"tier":
32954
+ "plus", "label": "acme", "hostname": "customer.com", "dashboard_subdomain": "dash",
32955
+ "auth_subdomain": "auth", "period": {...}}`.
32956
+
32957
+ A `label` is required for both tiers: every whitelabel keeps a managed subdomain,
32958
+ composed by branding-service as `<label>-<hash>.<base-tier suffix>` and `<label>-<hash>-auth.<base-tier
32959
+ suffix>`, where the hash comes from a per-organization secret it alone holds.
32960
+
32961
+ For base, that composed pair is what gets served; onboarding skips DNS verification
32962
+ and the edge CNAME, because that zone has wildcard DNS and a wildcard certificate.
32963
+
32964
+ For plus, the customer''s own domain is served instead (omitting `dashboard_subdomain`
32965
+ serves the dashboard on the apex); the domain must be an OpusDNS-hosted zone owned
32966
+ by the organization, which onboarding verifies before pointing both hosts at the
32967
+ whitelabel edge.
32968
+
32969
+ Labels are validated on the way in, and branding-service additionally rejects
32970
+ reserved ones (that rejection surfaces as a 400).
32971
+
32972
+ Because every whitelabel composes its label, both tiers are only purchasable in
32973
+ environments configured with a base-tier zone; elsewhere create answers 403.
32974
+
32975
+
32976
+ Both tiers are paid, and a whitelabel is a single subscription: the tiers are
32977
+ alternatives, not add-ons.
32978
+
32979
+
32980
+ `POST /v1/whitelabel-branding/tier` upgrades a base whitelabel to plus in place,
32981
+ with the plus create''s domain fields (`hostname`, `dashboard_subdomain`, `auth_subdomain`
32982
+ - no `tier`, no `period`).
32983
+
32984
+ The subscription keeps its term and renewal date and simply renews at the plus
32985
+ price; a yearly term additionally settles a one-time prorated fee for the remaining
32986
+ whole months now, a monthly term pays nothing now.
32987
+
32988
+ The managed subdomain label is kept.
32989
+
32990
+ Downgrades are not offered (cancel and rebook instead), so a whitelabel already
32991
+ on plus answers 409.
32992
+
32993
+
32994
+ `POST /v1/whitelabel-branding/recheck` re-runs onboarding - the customer''s retry
32995
+ after fixing their DNS setup.
32996
+
32997
+ A plus recheck may also carry a corrected `hostname` plus subdomains to re-point
32998
+ the config before re-running, which is accepted only before provisioning has started.
32999
+
33000
+ A base whitelabel takes no repoint: its hostnames come from its label, so it is
33001
+ moved with `PATCH` instead.
33002
+
33003
+
33004
+ A disabled whitelabel answers 409 to both `/recheck` and `/tier`: re-enable it
33005
+ first (`PATCH {"enabled": true}` alone re-runs the reconcile).
33006
+
33007
+
33008
+ `PATCH /v1/whitelabel-branding` changes the config without touching its subscription
33009
+ or price.
33010
+
33011
+ `{"label": "newname"}` moves a base-tier whitelabel to a different subdomain,
33012
+ accepted only before provisioning has started (a plus whitelabel has no served
33013
+ label - it is re-pointed by its hostnames through recheck).
33014
+
33015
+ `{"enabled": false}` stops serving the whitelabel: its login client is disabled
33016
+ and OpusDNS withdraws its routing - the managed subdomain is unpublished for base,
33017
+ the DNS edge records are removed for plus (a plus host whose DNS is pointed at
33018
+ the edge manually keeps reaching the branded dashboard, but its login stays disabled).
33019
+
33020
+ The configuration, the branding document and the provisioning history are kept,
33021
+ so `{"enabled": true}` brings it back without re-provisioning.
33022
+
33023
+ Like the other write routes this is asynchronous: the response is `202` once the
33024
+ change is recorded, and a job converges the login client and the routing to it
33025
+ shortly after.
33026
+
33027
+ Disabling a whitelabel does **not** cancel its subscription; billing continues
33028
+ until the subscription itself is cancelled.
32736
33029
 
32737
33030
  '
32738
33031
  name: whitelabel
package/src/schema.d.ts CHANGED
@@ -2937,12 +2937,13 @@ export interface paths {
2937
2937
  /** Get the organization's whitelabel branding config */
2938
2938
  get: operations["get_whitelabel_branding_v1_whitelabel_branding_get"];
2939
2939
  put?: never;
2940
- /** Create the organization's whitelabel branding config */
2940
+ /** Buy the organization's whitelabel branding (base or plus tier) */
2941
2941
  post: operations["create_whitelabel_branding_v1_whitelabel_branding_post"];
2942
2942
  delete?: never;
2943
2943
  options?: never;
2944
2944
  head?: never;
2945
- patch?: never;
2945
+ /** Change the organization's whitelabel branding config (relabel / enable) */
2946
+ patch: operations["patch_whitelabel_branding_v1_whitelabel_branding_patch"];
2946
2947
  trace?: never;
2947
2948
  };
2948
2949
  "/v1/whitelabel-branding/email/preview": {
@@ -2996,6 +2997,23 @@ export interface paths {
2996
2997
  patch?: never;
2997
2998
  trace?: never;
2998
2999
  };
3000
+ "/v1/whitelabel-branding/tier": {
3001
+ parameters: {
3002
+ query?: never;
3003
+ header?: never;
3004
+ path?: never;
3005
+ cookie?: never;
3006
+ };
3007
+ get?: never;
3008
+ put?: never;
3009
+ /** Upgrade the whitelabel to the plus tier (served on the customer's own domain) */
3010
+ post: operations["upgrade_whitelabel_to_plus_v1_whitelabel_branding_tier_post"];
3011
+ delete?: never;
3012
+ options?: never;
3013
+ head?: never;
3014
+ patch?: never;
3015
+ trace?: never;
3016
+ };
2999
3017
  }
3000
3018
  export type webhooks = Record<string, never>;
3001
3019
  export interface components {
@@ -3164,12 +3182,12 @@ export interface components {
3164
3182
  * BillingTransactionAction
3165
3183
  * @enum {string}
3166
3184
  */
3167
- BillingTransactionAction: "create" | "transfer" | "renew" | "restore" | "trade" | "application" | "service_fee" | "wallet_top_up";
3185
+ BillingTransactionAction: "create" | "transfer" | "renew" | "restore" | "trade" | "application" | "service_fee" | "upgrade_fee" | "wallet_top_up";
3168
3186
  /**
3169
3187
  * BillingTransactionProductType
3170
3188
  * @enum {string}
3171
3189
  */
3172
- BillingTransactionProductType: "domain" | "zones" | "email_forward" | "domain_forward" | "account_wallet" | "vanity_nameserver" | "whitelabel_branding";
3190
+ BillingTransactionProductType: "domain" | "zones" | "email_forward" | "domain_forward" | "account_wallet" | "vanity_nameserver" | "whitelabel_branding" | "whitelabel_branding_plus";
3173
3191
  /** BillingTransactionResponse */
3174
3192
  BillingTransactionResponse: {
3175
3193
  /** @description The action performed in the transaction */
@@ -12580,39 +12598,48 @@ export interface components {
12580
12598
  unique: number;
12581
12599
  };
12582
12600
  /**
12583
- * WhitelabelBrandingCreate
12584
- * @description Public create request body. The customer supplies their domain plus the subdomains the
12585
- * two whitelabel hosts live on; the full hostnames are composed here. `dashboard_subdomain`
12586
- * is optional - omitted, the dashboard is served on `hostname` itself (the zone apex when
12587
- * `hostname` is the bare domain). The owning org comes from auth context, and
12588
- * `verification_domain` is derived server-side (the registrable domain of the composed
12589
- * dashboard host), so neither is accepted here.
12601
+ * WhitelabelBaseCreate
12602
+ * @description Create the base tier: served on a managed subdomain composed from `label`.
12590
12603
  */
12591
- WhitelabelBrandingCreate: {
12604
+ WhitelabelBaseCreate: {
12592
12605
  /**
12593
- * Auth Subdomain
12594
- * @description Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
12606
+ * Label
12607
+ * @description Managed-subdomain label; composed into <label>-<hash>.<base-tier suffix>
12595
12608
  */
12596
- auth_subdomain: string;
12609
+ label: string;
12610
+ /** @description Billing period; offered: 1 month or 1 year */
12611
+ period: components["schemas"]["Period"];
12597
12612
  /**
12598
- * Dashboard Subdomain
12599
- * @description Subdomain the dashboard is served on (e.g. dash -> dash.customer.com); omit for the apex
12613
+ * @description discriminator enum property added by openapi-typescript
12614
+ * @enum {string}
12600
12615
  */
12601
- dashboard_subdomain?: string | null;
12616
+ tier: "base";
12617
+ };
12618
+ /**
12619
+ * WhitelabelBrandingPatch
12620
+ * @description Public patch body. Neither field is a purchase, so nothing here touches the subscription or
12621
+ * its price: `label` moves the base subdomain to a different label (base tier only - a plus
12622
+ * whitelabel is re-pointed by its hostnames through recheck), and `enabled` starts or stops
12623
+ * serving it. At least one must be given.
12624
+ */
12625
+ WhitelabelBrandingPatch: {
12602
12626
  /**
12603
- * Hostname
12604
- * @description Domain the whitelabel runs under (e.g. customer.com); must be an OpusDNS-hosted zone
12627
+ * Enabled
12628
+ * @description Whether this whitelabel should be served
12605
12629
  */
12606
- hostname: string;
12607
- /** @description Billing period for the subscription; offered: 1 month or 1 year */
12608
- period: components["schemas"]["Period"];
12630
+ enabled?: boolean | null;
12631
+ /**
12632
+ * Label
12633
+ * @description New base-tier label; the hostnames become <label>-<hash>.<base-tier suffix>. Base tier only.
12634
+ */
12635
+ label?: string | null;
12609
12636
  };
12610
12637
  /**
12611
12638
  * WhitelabelBrandingRecheck
12612
12639
  * @description Public recheck body. Empty = re-run onboarding against the stored hosts (retry after
12613
12640
  * fixing DNS). hostname + auth_subdomain present = re-point a wrong domain before re-running
12614
- * (pre-provisioning only; server rejects once a Keycloak client exists). Same composition
12615
- * rules as WhitelabelBrandingCreate.
12641
+ * (pre-provisioning only; server rejects once a Keycloak client exists). Plus tier only - a
12642
+ * base whitelabel is re-labelled through PATCH instead.
12616
12643
  */
12617
12644
  WhitelabelBrandingRecheck: {
12618
12645
  /** Auth Subdomain */
@@ -12629,11 +12656,18 @@ export interface components {
12629
12656
  WhitelabelBrandingResponse: {
12630
12657
  /** Auth Hostname */
12631
12658
  auth_hostname: string;
12659
+ /** Base Label */
12660
+ base_label: string;
12632
12661
  /**
12633
12662
  * Created On
12634
12663
  * Format: date-time
12635
12664
  */
12636
12665
  created_on: Date;
12666
+ /**
12667
+ * Enabled
12668
+ * @default true
12669
+ */
12670
+ enabled: boolean;
12637
12671
  failure_code?: components["schemas"]["WhitelabelOnboardingFailureCode"] | null;
12638
12672
  /** Failure Detail */
12639
12673
  failure_detail?: string | null;
@@ -12649,6 +12683,7 @@ export interface components {
12649
12683
  * @example organization_01h45ytscbebyvny4gc8cr8ma2
12650
12684
  */
12651
12685
  organization_id: TypeId<"organization">;
12686
+ tier: components["schemas"]["WhitelabelBrandingTier"];
12652
12687
  /**
12653
12688
  * Updated On
12654
12689
  * Format: date-time
@@ -12663,6 +12698,18 @@ export interface components {
12663
12698
  */
12664
12699
  whitelabel_branding_id: TypeId<"wlb">;
12665
12700
  };
12701
+ /**
12702
+ * WhitelabelBrandingTier
12703
+ * @description Which tier a whitelabel config is on. One config per organization, one tier at a time.
12704
+ *
12705
+ * BASE serves the customer on a subdomain of an OpusDNS-owned zone; PLUS serves them on their
12706
+ * own domain. A whitelabel switches between the two in place (a plan change), so `tier` is a
12707
+ * mutable attribute of the single config row, never a discriminator between two rows. Deliberately
12708
+ * stored rather than inferred from the hostname, so a base-zone rename can never re-route the row
12709
+ * down the wrong onboarding path.
12710
+ * @enum {string}
12711
+ */
12712
+ WhitelabelBrandingTier: "base" | "plus";
12666
12713
  /**
12667
12714
  * WhitelabelOnboardingFailureCode
12668
12715
  * @description Stable, frontend-facing reason a terminal onboarding failure happened. The free-text
@@ -12680,6 +12727,65 @@ export interface components {
12680
12727
  * @enum {string}
12681
12728
  */
12682
12729
  WhitelabelOnboardingStatus: "pending_domain_verification" | "verifying" | "provisioning" | "active" | "failed";
12730
+ /**
12731
+ * WhitelabelPlusCreate
12732
+ * @description Create the plus tier: served on the customer's own domain; `label` still reserves a base
12733
+ * subdomain (kept for the redirect/downgrade).
12734
+ */
12735
+ WhitelabelPlusCreate: {
12736
+ /**
12737
+ * Auth Subdomain
12738
+ * @description Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
12739
+ */
12740
+ auth_subdomain: string;
12741
+ /**
12742
+ * Dashboard Subdomain
12743
+ * @description Subdomain the dashboard is served on (e.g. dash -> dash.customer.com); omit for apex
12744
+ */
12745
+ dashboard_subdomain?: string | null;
12746
+ /**
12747
+ * Hostname
12748
+ * @description Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted zone owned by the org
12749
+ */
12750
+ hostname: string;
12751
+ /**
12752
+ * Label
12753
+ * @description Managed-subdomain label reserved for the redirect/downgrade
12754
+ */
12755
+ label: string;
12756
+ /** @description Billing period; offered: 1 month or 1 year */
12757
+ period: components["schemas"]["Period"];
12758
+ /**
12759
+ * @description discriminator enum property added by openapi-typescript
12760
+ * @enum {string}
12761
+ */
12762
+ tier: "plus";
12763
+ };
12764
+ /**
12765
+ * WhitelabelUpgradeToPlus
12766
+ * @description Upgrade the whitelabel to the plus tier, served on the customer's own domain. This is NOT a
12767
+ * term change: the subscription keeps its period and renewal date and simply renews at the plus
12768
+ * price. A yearly upgrade bills a one-time prorated difference for the remaining whole months; a
12769
+ * monthly upgrade bills nothing now. Downgrades (plus -> base) are not supported - cancel + rebook
12770
+ * instead - so this body only ever moves to plus (no tier field, no period).
12771
+ */
12772
+ WhitelabelUpgradeToPlus: {
12773
+ /**
12774
+ * Auth Subdomain
12775
+ * @description Subdomain the Keycloak login is served on (e.g. auth -> auth.customer.com)
12776
+ */
12777
+ auth_subdomain: string;
12778
+ /**
12779
+ * Dashboard Subdomain
12780
+ * @description Subdomain the dashboard is served on (e.g. dash -> dash.customer.com); omit for apex
12781
+ */
12782
+ dashboard_subdomain?: string | null;
12783
+ /**
12784
+ * Hostname
12785
+ * @description Domain the whitelabel runs under (e.g. customer.com); an OpusDNS-hosted zone owned by the org
12786
+ */
12787
+ hostname: string;
12788
+ };
12683
12789
  /** WhoisBase */
12684
12790
  WhoisBase: {
12685
12791
  /**
@@ -27050,7 +27156,7 @@ export interface operations {
27050
27156
  };
27051
27157
  requestBody: {
27052
27158
  content: {
27053
- "application/json": components["schemas"]["WhitelabelBrandingCreate"];
27159
+ "application/json": components["schemas"]["WhitelabelBaseCreate"] | components["schemas"]["WhitelabelPlusCreate"];
27054
27160
  };
27055
27161
  };
27056
27162
  responses: {
@@ -27074,6 +27180,45 @@ export interface operations {
27074
27180
  };
27075
27181
  };
27076
27182
  };
27183
+ patch_whitelabel_branding_v1_whitelabel_branding_patch: {
27184
+ parameters: {
27185
+ query?: never;
27186
+ header?: {
27187
+ /**
27188
+ * @description Opt in to RFC 3339 datetime serialization. When set to `rfc3339`, response datetimes are normalized to UTC and serialized with a `Z` suffix. This is opt-in until the announced default cutover date, after which RFC 3339 becomes the default and this header is accepted as a no-op. Any other value or omission uses the current default serialization.
27189
+ * @example rfc3339
27190
+ */
27191
+ "X-Datetime-Format"?: components["parameters"]["DatetimeFormatHeader"];
27192
+ };
27193
+ path?: never;
27194
+ cookie?: never;
27195
+ };
27196
+ requestBody: {
27197
+ content: {
27198
+ "application/json": components["schemas"]["WhitelabelBrandingPatch"];
27199
+ };
27200
+ };
27201
+ responses: {
27202
+ /** @description Successful Response */
27203
+ 202: {
27204
+ headers: {
27205
+ [name: string]: unknown;
27206
+ };
27207
+ content: {
27208
+ "application/json": components["schemas"]["WhitelabelBrandingResponse"];
27209
+ };
27210
+ };
27211
+ /** @description Validation Error */
27212
+ 422: {
27213
+ headers: {
27214
+ [name: string]: unknown;
27215
+ };
27216
+ content: {
27217
+ "application/problem+json": components["schemas"]["HTTPValidationError"];
27218
+ };
27219
+ };
27220
+ };
27221
+ };
27077
27222
  preview_whitelabel_email_v1_whitelabel_branding_email_preview_post: {
27078
27223
  parameters: {
27079
27224
  query?: never;
@@ -27187,4 +27332,43 @@ export interface operations {
27187
27332
  };
27188
27333
  };
27189
27334
  };
27335
+ upgrade_whitelabel_to_plus_v1_whitelabel_branding_tier_post: {
27336
+ parameters: {
27337
+ query?: never;
27338
+ header?: {
27339
+ /**
27340
+ * @description Opt in to RFC 3339 datetime serialization. When set to `rfc3339`, response datetimes are normalized to UTC and serialized with a `Z` suffix. This is opt-in until the announced default cutover date, after which RFC 3339 becomes the default and this header is accepted as a no-op. Any other value or omission uses the current default serialization.
27341
+ * @example rfc3339
27342
+ */
27343
+ "X-Datetime-Format"?: components["parameters"]["DatetimeFormatHeader"];
27344
+ };
27345
+ path?: never;
27346
+ cookie?: never;
27347
+ };
27348
+ requestBody: {
27349
+ content: {
27350
+ "application/json": components["schemas"]["WhitelabelUpgradeToPlus"];
27351
+ };
27352
+ };
27353
+ responses: {
27354
+ /** @description Successful Response */
27355
+ 202: {
27356
+ headers: {
27357
+ [name: string]: unknown;
27358
+ };
27359
+ content: {
27360
+ "application/json": components["schemas"]["ProductCreateRes"];
27361
+ };
27362
+ };
27363
+ /** @description Validation Error */
27364
+ 422: {
27365
+ headers: {
27366
+ [name: string]: unknown;
27367
+ };
27368
+ content: {
27369
+ "application/problem+json": components["schemas"]["HTTPValidationError"];
27370
+ };
27371
+ };
27372
+ };
27373
+ };
27190
27374
  }