@automagik/omni 2.260727.2 → 2.260728.2

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.
@@ -2151,6 +2151,174 @@ export interface paths {
2151
2151
  patch?: never;
2152
2152
  trace?: never;
2153
2153
  };
2154
+ "/platform/tenants": {
2155
+ parameters: {
2156
+ query?: never;
2157
+ header?: never;
2158
+ path?: never;
2159
+ cookie?: never;
2160
+ };
2161
+ /**
2162
+ * List tenants
2163
+ * @description List tenants, newest first. The read itself is audited. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:read`.
2164
+ */
2165
+ get: operations["listPlatformTenants"];
2166
+ put?: never;
2167
+ /**
2168
+ * Create a tenant
2169
+ * @description Create a tenant with its mandatory credential ceilings. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:write`.
2170
+ */
2171
+ post: operations["createPlatformTenant"];
2172
+ delete?: never;
2173
+ options?: never;
2174
+ head?: never;
2175
+ patch?: never;
2176
+ trace?: never;
2177
+ };
2178
+ "/platform/tenants/{id}": {
2179
+ parameters: {
2180
+ query?: never;
2181
+ header?: never;
2182
+ path?: never;
2183
+ cookie?: never;
2184
+ };
2185
+ /**
2186
+ * Get a tenant
2187
+ * @description Fetch one tenant. The read itself is audited. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:read`.
2188
+ */
2189
+ get: operations["getPlatformTenant"];
2190
+ put?: never;
2191
+ post?: never;
2192
+ delete?: never;
2193
+ options?: never;
2194
+ head?: never;
2195
+ patch?: never;
2196
+ trace?: never;
2197
+ };
2198
+ "/platform/tenants/{id}/suspend": {
2199
+ parameters: {
2200
+ query?: never;
2201
+ header?: never;
2202
+ path?: never;
2203
+ cookie?: never;
2204
+ };
2205
+ get?: never;
2206
+ put?: never;
2207
+ /**
2208
+ * Suspend a tenant
2209
+ * @description Suspend a tenant and bump its revocation epoch, which invalidates the tenant’s credentials on their next auth-bootstrap lookup. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:write`.
2210
+ */
2211
+ post: operations["suspendPlatformTenant"];
2212
+ delete?: never;
2213
+ options?: never;
2214
+ head?: never;
2215
+ patch?: never;
2216
+ trace?: never;
2217
+ };
2218
+ "/platform/tenants/{id}/archive": {
2219
+ parameters: {
2220
+ query?: never;
2221
+ header?: never;
2222
+ path?: never;
2223
+ cookie?: never;
2224
+ };
2225
+ get?: never;
2226
+ put?: never;
2227
+ /**
2228
+ * Archive a tenant
2229
+ * @description Archive a tenant. Archived is TERMINAL — there is no un-archive and no hard delete anywhere on this surface. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:write`.
2230
+ */
2231
+ post: operations["archivePlatformTenant"];
2232
+ delete?: never;
2233
+ options?: never;
2234
+ head?: never;
2235
+ patch?: never;
2236
+ trace?: never;
2237
+ };
2238
+ "/platform/tenants/{id}/memberships": {
2239
+ parameters: {
2240
+ query?: never;
2241
+ header?: never;
2242
+ path?: never;
2243
+ cookie?: never;
2244
+ };
2245
+ /**
2246
+ * List tenant memberships
2247
+ * @description List the memberships of one tenant. The read itself is audited. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:tenants:read`.
2248
+ */
2249
+ get: operations["listPlatformMemberships"];
2250
+ put?: never;
2251
+ /**
2252
+ * Attach a membership
2253
+ * @description Grant a principal a role in the tenant. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:memberships:write`.
2254
+ */
2255
+ post: operations["attachPlatformMembership"];
2256
+ delete?: never;
2257
+ options?: never;
2258
+ head?: never;
2259
+ patch?: never;
2260
+ trace?: never;
2261
+ };
2262
+ "/platform/tenants/{tenantId}/memberships/{id}/disable": {
2263
+ parameters: {
2264
+ query?: never;
2265
+ header?: never;
2266
+ path?: never;
2267
+ cookie?: never;
2268
+ };
2269
+ get?: never;
2270
+ put?: never;
2271
+ /**
2272
+ * Disable a membership
2273
+ * @description Detach a principal from the tenant by disabling the membership. Memberships are never hard-deleted. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:memberships:write`.
2274
+ */
2275
+ post: operations["disablePlatformMembership"];
2276
+ delete?: never;
2277
+ options?: never;
2278
+ head?: never;
2279
+ patch?: never;
2280
+ trace?: never;
2281
+ };
2282
+ "/platform/tenants/{tenantId}/memberships/{id}/status": {
2283
+ parameters: {
2284
+ query?: never;
2285
+ header?: never;
2286
+ path?: never;
2287
+ cookie?: never;
2288
+ };
2289
+ get?: never;
2290
+ put?: never;
2291
+ /**
2292
+ * Set membership status
2293
+ * @description Activate or disable an existing membership. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:memberships:write`.
2294
+ */
2295
+ post: operations["setPlatformMembershipStatus"];
2296
+ delete?: never;
2297
+ options?: never;
2298
+ head?: never;
2299
+ patch?: never;
2300
+ trace?: never;
2301
+ };
2302
+ "/platform/tenants/{tenantId}/memberships/{id}/role": {
2303
+ parameters: {
2304
+ query?: never;
2305
+ header?: never;
2306
+ path?: never;
2307
+ cookie?: never;
2308
+ };
2309
+ get?: never;
2310
+ put?: never;
2311
+ /**
2312
+ * Set membership role
2313
+ * @description Change the role an existing membership acts under. Platform control plane. Mounted only when `OMNI_MULTITENANCY_ENABLED=true`; when the flag is off the entire surface returns 404. Requires a PLATFORM-class credential with the listed scope — tenant and legacy data-plane keys are denied. Every state change requires a reason and writes an append-only platform audit row. Scope: `platform:memberships:write`.
2314
+ */
2315
+ post: operations["setPlatformMembershipRole"];
2316
+ delete?: never;
2317
+ options?: never;
2318
+ head?: never;
2319
+ patch?: never;
2320
+ trace?: never;
2321
+ };
2154
2322
  }
2155
2323
  export type webhooks = Record<string, never>;
2156
2324
  export interface components {
@@ -2310,6 +2478,42 @@ export interface components {
2310
2478
  * ]
2311
2479
  */
2312
2480
  scopes: string[];
2481
+ /** @description Tenant credential context; absent for a legacy credential */
2482
+ credential?: {
2483
+ /**
2484
+ * @description Credential class of the caller
2485
+ * @enum {string}
2486
+ */
2487
+ class: "tenant";
2488
+ /**
2489
+ * Format: uuid
2490
+ * @description Tenant this credential is bound to
2491
+ */
2492
+ tenantId: string;
2493
+ /**
2494
+ * @description Stable tenant slug, or null when unresolved
2495
+ * @example acme
2496
+ */
2497
+ tenantSlug: string | null;
2498
+ /**
2499
+ * @description Tenant role the credential acts under
2500
+ * @example tenant-operator
2501
+ */
2502
+ role: string;
2503
+ /** @description Scopes carried by the tenant credential */
2504
+ scopes: string[];
2505
+ /** @description Immutable resource ceilings inherited from the key lineage */
2506
+ constraints: {
2507
+ [key: string]: string[];
2508
+ };
2509
+ /**
2510
+ * Format: date-time
2511
+ * @description Credential expiry (ISO 8601), or null when it does not expire
2512
+ */
2513
+ expiresAt: string | null;
2514
+ /** @description Delegation depth: 0 = root key, 1 = child key */
2515
+ delegationDepth: number;
2516
+ };
2313
2517
  };
2314
2518
  };
2315
2519
  HealthCheck: {
@@ -2374,16 +2578,6 @@ export interface components {
2374
2578
  };
2375
2579
  };
2376
2580
  };
2377
- instances?: {
2378
- /** @description Total instance count */
2379
- total: number;
2380
- /** @description Connected instance count */
2381
- connected: number;
2382
- /** @description Count by channel type */
2383
- byChannel: {
2384
- [key: string]: number;
2385
- };
2386
- };
2387
2581
  };
2388
2582
  InfoResponse: {
2389
2583
  /** @description API version */
@@ -2392,14 +2586,6 @@ export interface components {
2392
2586
  environment: string;
2393
2587
  /** @description Uptime in seconds */
2394
2588
  uptime: number;
2395
- instances: {
2396
- total: number;
2397
- connected: number;
2398
- };
2399
- events: {
2400
- today: number;
2401
- total: number;
2402
- };
2403
2589
  };
2404
2590
  InternalHealthResponse: {
2405
2591
  /** @description Health status */
@@ -4899,6 +5085,144 @@ export interface components {
4899
5085
  /** @description Voice session ID to leave */
4900
5086
  sessionId: string;
4901
5087
  };
5088
+ PlatformTenant: {
5089
+ /**
5090
+ * Format: uuid
5091
+ * @description Tenant id
5092
+ */
5093
+ id: string;
5094
+ /**
5095
+ * @description Immutable lowercase DNS-like slug
5096
+ * @example acme
5097
+ */
5098
+ slug: string;
5099
+ /** @description Human-readable tenant name */
5100
+ displayName: string;
5101
+ /**
5102
+ * @description Tenant lifecycle status
5103
+ * @enum {string}
5104
+ */
5105
+ status: "active" | "suspended" | "archived";
5106
+ /** @description Policy epoch, bumped on policy change */
5107
+ policyVersion: number;
5108
+ /** @description Revocation epoch, bumped on suspend/archive */
5109
+ revocationEpoch: number;
5110
+ /** @description Ceiling for credential TTL, in seconds */
5111
+ maxKeyTtlSeconds: number;
5112
+ /** @description Ceiling for credential rate limit */
5113
+ maxKeyRateLimit: number;
5114
+ /** @description Ceiling for credential budget */
5115
+ maxKeyBudget: number;
5116
+ /**
5117
+ * Format: uuid
5118
+ * @description Creator principal, or null for bootstrap/system tenants
5119
+ */
5120
+ createdByPrincipalId: string | null;
5121
+ /**
5122
+ * Format: date-time
5123
+ * @description Creation timestamp
5124
+ */
5125
+ createdAt: string;
5126
+ /**
5127
+ * Format: date-time
5128
+ * @description Last update timestamp
5129
+ */
5130
+ updatedAt: string;
5131
+ /**
5132
+ * Format: date-time
5133
+ * @description When the tenant was suspended, if ever
5134
+ */
5135
+ suspendedAt: string | null;
5136
+ /**
5137
+ * Format: date-time
5138
+ * @description When the tenant was archived, if ever
5139
+ */
5140
+ archivedAt: string | null;
5141
+ };
5142
+ PlatformMembership: {
5143
+ /**
5144
+ * Format: uuid
5145
+ * @description Membership id
5146
+ */
5147
+ id: string;
5148
+ /**
5149
+ * Format: uuid
5150
+ * @description Tenant the membership belongs to
5151
+ */
5152
+ tenantId: string;
5153
+ /**
5154
+ * Format: uuid
5155
+ * @description Principal granted access
5156
+ */
5157
+ principalId: string;
5158
+ /**
5159
+ * @description Tenant role
5160
+ * @enum {string}
5161
+ */
5162
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
5163
+ /**
5164
+ * @description Membership status
5165
+ * @enum {string}
5166
+ */
5167
+ status: "active" | "disabled";
5168
+ /**
5169
+ * Format: uuid
5170
+ * @description Principal that granted the membership, when known
5171
+ */
5172
+ invitedByPrincipalId: string | null;
5173
+ /**
5174
+ * Format: date-time
5175
+ * @description Creation timestamp
5176
+ */
5177
+ createdAt: string;
5178
+ /**
5179
+ * Format: date-time
5180
+ * @description Last update timestamp
5181
+ */
5182
+ updatedAt: string;
5183
+ /**
5184
+ * Format: date-time
5185
+ * @description When the membership was disabled, if ever
5186
+ */
5187
+ disabledAt: string | null;
5188
+ };
5189
+ CreateTenantRequest: {
5190
+ /**
5191
+ * @description Immutable lowercase DNS-like slug
5192
+ * @example acme
5193
+ */
5194
+ slug: string;
5195
+ /** @description Human-readable tenant name */
5196
+ displayName: string;
5197
+ /** @description Ceiling for credential TTL, in seconds */
5198
+ maxKeyTtlSeconds: number;
5199
+ /** @description Ceiling for credential rate limit */
5200
+ maxKeyRateLimit: number;
5201
+ /** @description Ceiling for credential budget */
5202
+ maxKeyBudget: number;
5203
+ /**
5204
+ * @description Audited justification for the change
5205
+ * @example onboarding request OPS-1421
5206
+ */
5207
+ reason: string;
5208
+ };
5209
+ AttachMembershipRequest: {
5210
+ /**
5211
+ * Format: uuid
5212
+ * @description Principal to grant access to
5213
+ */
5214
+ principalId: string;
5215
+ /**
5216
+ * @description Tenant role
5217
+ * @enum {string}
5218
+ */
5219
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
5220
+ /**
5221
+ * @description Audited justification for the change
5222
+ * @example onboarding request OPS-1421
5223
+ */
5224
+ reason: string;
5225
+ };
4902
5226
  };
4903
5227
  responses: never;
4904
5228
  parameters: never;
@@ -5486,6 +5810,42 @@ export interface operations {
5486
5810
  * ]
5487
5811
  */
5488
5812
  scopes: string[];
5813
+ /** @description Tenant credential context; absent for a legacy credential */
5814
+ credential?: {
5815
+ /**
5816
+ * @description Credential class of the caller
5817
+ * @enum {string}
5818
+ */
5819
+ class: "tenant";
5820
+ /**
5821
+ * Format: uuid
5822
+ * @description Tenant this credential is bound to
5823
+ */
5824
+ tenantId: string;
5825
+ /**
5826
+ * @description Stable tenant slug, or null when unresolved
5827
+ * @example acme
5828
+ */
5829
+ tenantSlug: string | null;
5830
+ /**
5831
+ * @description Tenant role the credential acts under
5832
+ * @example tenant-operator
5833
+ */
5834
+ role: string;
5835
+ /** @description Scopes carried by the tenant credential */
5836
+ scopes: string[];
5837
+ /** @description Immutable resource ceilings inherited from the key lineage */
5838
+ constraints: {
5839
+ [key: string]: string[];
5840
+ };
5841
+ /**
5842
+ * Format: date-time
5843
+ * @description Credential expiry (ISO 8601), or null when it does not expire
5844
+ */
5845
+ expiresAt: string | null;
5846
+ /** @description Delegation depth: 0 = root key, 1 = child key */
5847
+ delegationDepth: number;
5848
+ };
5489
5849
  };
5490
5850
  };
5491
5851
  };
@@ -5568,16 +5928,6 @@ export interface operations {
5568
5928
  };
5569
5929
  };
5570
5930
  };
5571
- instances?: {
5572
- /** @description Total instance count */
5573
- total: number;
5574
- /** @description Connected instance count */
5575
- connected: number;
5576
- /** @description Count by channel type */
5577
- byChannel: {
5578
- [key: string]: number;
5579
- };
5580
- };
5581
5931
  };
5582
5932
  };
5583
5933
  };
@@ -5634,16 +5984,6 @@ export interface operations {
5634
5984
  };
5635
5985
  };
5636
5986
  };
5637
- instances?: {
5638
- /** @description Total instance count */
5639
- total: number;
5640
- /** @description Connected instance count */
5641
- connected: number;
5642
- /** @description Count by channel type */
5643
- byChannel: {
5644
- [key: string]: number;
5645
- };
5646
- };
5647
5987
  };
5648
5988
  };
5649
5989
  };
@@ -5671,14 +6011,6 @@ export interface operations {
5671
6011
  environment: string;
5672
6012
  /** @description Uptime in seconds */
5673
6013
  uptime: number;
5674
- instances: {
5675
- total: number;
5676
- connected: number;
5677
- };
5678
- events: {
5679
- today: number;
5680
- total: number;
5681
- };
5682
6014
  };
5683
6015
  };
5684
6016
  };
@@ -17103,5 +17435,1394 @@ export interface operations {
17103
17435
  };
17104
17436
  };
17105
17437
  };
17438
+ listPlatformTenants: {
17439
+ parameters: {
17440
+ query?: never;
17441
+ header: {
17442
+ "x-platform-reason": string;
17443
+ };
17444
+ path?: never;
17445
+ cookie?: never;
17446
+ };
17447
+ requestBody?: never;
17448
+ responses: {
17449
+ /** @description Tenants */
17450
+ 200: {
17451
+ headers: {
17452
+ [name: string]: unknown;
17453
+ };
17454
+ content: {
17455
+ "application/json": {
17456
+ items: {
17457
+ /**
17458
+ * Format: uuid
17459
+ * @description Tenant id
17460
+ */
17461
+ id: string;
17462
+ /**
17463
+ * @description Immutable lowercase DNS-like slug
17464
+ * @example acme
17465
+ */
17466
+ slug: string;
17467
+ /** @description Human-readable tenant name */
17468
+ displayName: string;
17469
+ /**
17470
+ * @description Tenant lifecycle status
17471
+ * @enum {string}
17472
+ */
17473
+ status: "active" | "suspended" | "archived";
17474
+ /** @description Policy epoch, bumped on policy change */
17475
+ policyVersion: number;
17476
+ /** @description Revocation epoch, bumped on suspend/archive */
17477
+ revocationEpoch: number;
17478
+ /** @description Ceiling for credential TTL, in seconds */
17479
+ maxKeyTtlSeconds: number;
17480
+ /** @description Ceiling for credential rate limit */
17481
+ maxKeyRateLimit: number;
17482
+ /** @description Ceiling for credential budget */
17483
+ maxKeyBudget: number;
17484
+ /**
17485
+ * Format: uuid
17486
+ * @description Creator principal, or null for bootstrap/system tenants
17487
+ */
17488
+ createdByPrincipalId: string | null;
17489
+ /**
17490
+ * Format: date-time
17491
+ * @description Creation timestamp
17492
+ */
17493
+ createdAt: string;
17494
+ /**
17495
+ * Format: date-time
17496
+ * @description Last update timestamp
17497
+ */
17498
+ updatedAt: string;
17499
+ /**
17500
+ * Format: date-time
17501
+ * @description When the tenant was suspended, if ever
17502
+ */
17503
+ suspendedAt: string | null;
17504
+ /**
17505
+ * Format: date-time
17506
+ * @description When the tenant was archived, if ever
17507
+ */
17508
+ archivedAt: string | null;
17509
+ }[];
17510
+ };
17511
+ };
17512
+ };
17513
+ /** @description Missing, non-platform, or insufficiently scoped credential */
17514
+ 401: {
17515
+ headers: {
17516
+ [name: string]: unknown;
17517
+ };
17518
+ content: {
17519
+ "application/json": {
17520
+ error: {
17521
+ /**
17522
+ * @description Error code
17523
+ * @example NOT_FOUND
17524
+ */
17525
+ code: string;
17526
+ /** @description Human-readable error message */
17527
+ message: string;
17528
+ /** @description Additional error details */
17529
+ details?: unknown;
17530
+ };
17531
+ };
17532
+ };
17533
+ };
17534
+ };
17535
+ };
17536
+ createPlatformTenant: {
17537
+ parameters: {
17538
+ query?: never;
17539
+ header?: never;
17540
+ path?: never;
17541
+ cookie?: never;
17542
+ };
17543
+ requestBody?: {
17544
+ content: {
17545
+ "application/json": {
17546
+ /**
17547
+ * @description Immutable lowercase DNS-like slug
17548
+ * @example acme
17549
+ */
17550
+ slug: string;
17551
+ /** @description Human-readable tenant name */
17552
+ displayName: string;
17553
+ /** @description Ceiling for credential TTL, in seconds */
17554
+ maxKeyTtlSeconds: number;
17555
+ /** @description Ceiling for credential rate limit */
17556
+ maxKeyRateLimit: number;
17557
+ /** @description Ceiling for credential budget */
17558
+ maxKeyBudget: number;
17559
+ /**
17560
+ * @description Audited justification for the change
17561
+ * @example onboarding request OPS-1421
17562
+ */
17563
+ reason: string;
17564
+ };
17565
+ };
17566
+ };
17567
+ responses: {
17568
+ /** @description Tenant created */
17569
+ 201: {
17570
+ headers: {
17571
+ [name: string]: unknown;
17572
+ };
17573
+ content: {
17574
+ "application/json": {
17575
+ data: {
17576
+ /**
17577
+ * Format: uuid
17578
+ * @description Tenant id
17579
+ */
17580
+ id: string;
17581
+ /**
17582
+ * @description Immutable lowercase DNS-like slug
17583
+ * @example acme
17584
+ */
17585
+ slug: string;
17586
+ /** @description Human-readable tenant name */
17587
+ displayName: string;
17588
+ /**
17589
+ * @description Tenant lifecycle status
17590
+ * @enum {string}
17591
+ */
17592
+ status: "active" | "suspended" | "archived";
17593
+ /** @description Policy epoch, bumped on policy change */
17594
+ policyVersion: number;
17595
+ /** @description Revocation epoch, bumped on suspend/archive */
17596
+ revocationEpoch: number;
17597
+ /** @description Ceiling for credential TTL, in seconds */
17598
+ maxKeyTtlSeconds: number;
17599
+ /** @description Ceiling for credential rate limit */
17600
+ maxKeyRateLimit: number;
17601
+ /** @description Ceiling for credential budget */
17602
+ maxKeyBudget: number;
17603
+ /**
17604
+ * Format: uuid
17605
+ * @description Creator principal, or null for bootstrap/system tenants
17606
+ */
17607
+ createdByPrincipalId: string | null;
17608
+ /**
17609
+ * Format: date-time
17610
+ * @description Creation timestamp
17611
+ */
17612
+ createdAt: string;
17613
+ /**
17614
+ * Format: date-time
17615
+ * @description Last update timestamp
17616
+ */
17617
+ updatedAt: string;
17618
+ /**
17619
+ * Format: date-time
17620
+ * @description When the tenant was suspended, if ever
17621
+ */
17622
+ suspendedAt: string | null;
17623
+ /**
17624
+ * Format: date-time
17625
+ * @description When the tenant was archived, if ever
17626
+ */
17627
+ archivedAt: string | null;
17628
+ };
17629
+ };
17630
+ };
17631
+ };
17632
+ /** @description Missing, non-platform, or insufficiently scoped credential */
17633
+ 401: {
17634
+ headers: {
17635
+ [name: string]: unknown;
17636
+ };
17637
+ content: {
17638
+ "application/json": {
17639
+ error: {
17640
+ /**
17641
+ * @description Error code
17642
+ * @example NOT_FOUND
17643
+ */
17644
+ code: string;
17645
+ /** @description Human-readable error message */
17646
+ message: string;
17647
+ /** @description Additional error details */
17648
+ details?: unknown;
17649
+ };
17650
+ };
17651
+ };
17652
+ };
17653
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
17654
+ 404: {
17655
+ headers: {
17656
+ [name: string]: unknown;
17657
+ };
17658
+ content: {
17659
+ "application/json": {
17660
+ error: {
17661
+ /**
17662
+ * @description Error code
17663
+ * @example NOT_FOUND
17664
+ */
17665
+ code: string;
17666
+ /** @description Human-readable error message */
17667
+ message: string;
17668
+ /** @description Additional error details */
17669
+ details?: unknown;
17670
+ };
17671
+ };
17672
+ };
17673
+ };
17674
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
17675
+ 409: {
17676
+ headers: {
17677
+ [name: string]: unknown;
17678
+ };
17679
+ content: {
17680
+ "application/json": {
17681
+ error: {
17682
+ /**
17683
+ * @description Error code
17684
+ * @example NOT_FOUND
17685
+ */
17686
+ code: string;
17687
+ /** @description Human-readable error message */
17688
+ message: string;
17689
+ /** @description Additional error details */
17690
+ details?: unknown;
17691
+ };
17692
+ };
17693
+ };
17694
+ };
17695
+ };
17696
+ };
17697
+ getPlatformTenant: {
17698
+ parameters: {
17699
+ query?: never;
17700
+ header: {
17701
+ "x-platform-reason": string;
17702
+ };
17703
+ path: {
17704
+ id: string;
17705
+ };
17706
+ cookie?: never;
17707
+ };
17708
+ requestBody?: never;
17709
+ responses: {
17710
+ /** @description Tenant */
17711
+ 200: {
17712
+ headers: {
17713
+ [name: string]: unknown;
17714
+ };
17715
+ content: {
17716
+ "application/json": {
17717
+ data: {
17718
+ /**
17719
+ * Format: uuid
17720
+ * @description Tenant id
17721
+ */
17722
+ id: string;
17723
+ /**
17724
+ * @description Immutable lowercase DNS-like slug
17725
+ * @example acme
17726
+ */
17727
+ slug: string;
17728
+ /** @description Human-readable tenant name */
17729
+ displayName: string;
17730
+ /**
17731
+ * @description Tenant lifecycle status
17732
+ * @enum {string}
17733
+ */
17734
+ status: "active" | "suspended" | "archived";
17735
+ /** @description Policy epoch, bumped on policy change */
17736
+ policyVersion: number;
17737
+ /** @description Revocation epoch, bumped on suspend/archive */
17738
+ revocationEpoch: number;
17739
+ /** @description Ceiling for credential TTL, in seconds */
17740
+ maxKeyTtlSeconds: number;
17741
+ /** @description Ceiling for credential rate limit */
17742
+ maxKeyRateLimit: number;
17743
+ /** @description Ceiling for credential budget */
17744
+ maxKeyBudget: number;
17745
+ /**
17746
+ * Format: uuid
17747
+ * @description Creator principal, or null for bootstrap/system tenants
17748
+ */
17749
+ createdByPrincipalId: string | null;
17750
+ /**
17751
+ * Format: date-time
17752
+ * @description Creation timestamp
17753
+ */
17754
+ createdAt: string;
17755
+ /**
17756
+ * Format: date-time
17757
+ * @description Last update timestamp
17758
+ */
17759
+ updatedAt: string;
17760
+ /**
17761
+ * Format: date-time
17762
+ * @description When the tenant was suspended, if ever
17763
+ */
17764
+ suspendedAt: string | null;
17765
+ /**
17766
+ * Format: date-time
17767
+ * @description When the tenant was archived, if ever
17768
+ */
17769
+ archivedAt: string | null;
17770
+ };
17771
+ };
17772
+ };
17773
+ };
17774
+ /** @description Missing, non-platform, or insufficiently scoped credential */
17775
+ 401: {
17776
+ headers: {
17777
+ [name: string]: unknown;
17778
+ };
17779
+ content: {
17780
+ "application/json": {
17781
+ error: {
17782
+ /**
17783
+ * @description Error code
17784
+ * @example NOT_FOUND
17785
+ */
17786
+ code: string;
17787
+ /** @description Human-readable error message */
17788
+ message: string;
17789
+ /** @description Additional error details */
17790
+ details?: unknown;
17791
+ };
17792
+ };
17793
+ };
17794
+ };
17795
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
17796
+ 404: {
17797
+ headers: {
17798
+ [name: string]: unknown;
17799
+ };
17800
+ content: {
17801
+ "application/json": {
17802
+ error: {
17803
+ /**
17804
+ * @description Error code
17805
+ * @example NOT_FOUND
17806
+ */
17807
+ code: string;
17808
+ /** @description Human-readable error message */
17809
+ message: string;
17810
+ /** @description Additional error details */
17811
+ details?: unknown;
17812
+ };
17813
+ };
17814
+ };
17815
+ };
17816
+ };
17817
+ };
17818
+ suspendPlatformTenant: {
17819
+ parameters: {
17820
+ query?: never;
17821
+ header?: never;
17822
+ path: {
17823
+ id: string;
17824
+ };
17825
+ cookie?: never;
17826
+ };
17827
+ requestBody?: {
17828
+ content: {
17829
+ "application/json": {
17830
+ /**
17831
+ * @description Audited justification for the change
17832
+ * @example onboarding request OPS-1421
17833
+ */
17834
+ reason: string;
17835
+ };
17836
+ };
17837
+ };
17838
+ responses: {
17839
+ /** @description Tenant suspended */
17840
+ 200: {
17841
+ headers: {
17842
+ [name: string]: unknown;
17843
+ };
17844
+ content: {
17845
+ "application/json": {
17846
+ data: {
17847
+ /**
17848
+ * Format: uuid
17849
+ * @description Tenant id
17850
+ */
17851
+ id: string;
17852
+ /**
17853
+ * @description Immutable lowercase DNS-like slug
17854
+ * @example acme
17855
+ */
17856
+ slug: string;
17857
+ /** @description Human-readable tenant name */
17858
+ displayName: string;
17859
+ /**
17860
+ * @description Tenant lifecycle status
17861
+ * @enum {string}
17862
+ */
17863
+ status: "active" | "suspended" | "archived";
17864
+ /** @description Policy epoch, bumped on policy change */
17865
+ policyVersion: number;
17866
+ /** @description Revocation epoch, bumped on suspend/archive */
17867
+ revocationEpoch: number;
17868
+ /** @description Ceiling for credential TTL, in seconds */
17869
+ maxKeyTtlSeconds: number;
17870
+ /** @description Ceiling for credential rate limit */
17871
+ maxKeyRateLimit: number;
17872
+ /** @description Ceiling for credential budget */
17873
+ maxKeyBudget: number;
17874
+ /**
17875
+ * Format: uuid
17876
+ * @description Creator principal, or null for bootstrap/system tenants
17877
+ */
17878
+ createdByPrincipalId: string | null;
17879
+ /**
17880
+ * Format: date-time
17881
+ * @description Creation timestamp
17882
+ */
17883
+ createdAt: string;
17884
+ /**
17885
+ * Format: date-time
17886
+ * @description Last update timestamp
17887
+ */
17888
+ updatedAt: string;
17889
+ /**
17890
+ * Format: date-time
17891
+ * @description When the tenant was suspended, if ever
17892
+ */
17893
+ suspendedAt: string | null;
17894
+ /**
17895
+ * Format: date-time
17896
+ * @description When the tenant was archived, if ever
17897
+ */
17898
+ archivedAt: string | null;
17899
+ };
17900
+ };
17901
+ };
17902
+ };
17903
+ /** @description Missing, non-platform, or insufficiently scoped credential */
17904
+ 401: {
17905
+ headers: {
17906
+ [name: string]: unknown;
17907
+ };
17908
+ content: {
17909
+ "application/json": {
17910
+ error: {
17911
+ /**
17912
+ * @description Error code
17913
+ * @example NOT_FOUND
17914
+ */
17915
+ code: string;
17916
+ /** @description Human-readable error message */
17917
+ message: string;
17918
+ /** @description Additional error details */
17919
+ details?: unknown;
17920
+ };
17921
+ };
17922
+ };
17923
+ };
17924
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
17925
+ 404: {
17926
+ headers: {
17927
+ [name: string]: unknown;
17928
+ };
17929
+ content: {
17930
+ "application/json": {
17931
+ error: {
17932
+ /**
17933
+ * @description Error code
17934
+ * @example NOT_FOUND
17935
+ */
17936
+ code: string;
17937
+ /** @description Human-readable error message */
17938
+ message: string;
17939
+ /** @description Additional error details */
17940
+ details?: unknown;
17941
+ };
17942
+ };
17943
+ };
17944
+ };
17945
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
17946
+ 409: {
17947
+ headers: {
17948
+ [name: string]: unknown;
17949
+ };
17950
+ content: {
17951
+ "application/json": {
17952
+ error: {
17953
+ /**
17954
+ * @description Error code
17955
+ * @example NOT_FOUND
17956
+ */
17957
+ code: string;
17958
+ /** @description Human-readable error message */
17959
+ message: string;
17960
+ /** @description Additional error details */
17961
+ details?: unknown;
17962
+ };
17963
+ };
17964
+ };
17965
+ };
17966
+ };
17967
+ };
17968
+ archivePlatformTenant: {
17969
+ parameters: {
17970
+ query?: never;
17971
+ header?: never;
17972
+ path: {
17973
+ id: string;
17974
+ };
17975
+ cookie?: never;
17976
+ };
17977
+ requestBody?: {
17978
+ content: {
17979
+ "application/json": {
17980
+ /**
17981
+ * @description Audited justification for the change
17982
+ * @example onboarding request OPS-1421
17983
+ */
17984
+ reason: string;
17985
+ };
17986
+ };
17987
+ };
17988
+ responses: {
17989
+ /** @description Tenant archived */
17990
+ 200: {
17991
+ headers: {
17992
+ [name: string]: unknown;
17993
+ };
17994
+ content: {
17995
+ "application/json": {
17996
+ data: {
17997
+ /**
17998
+ * Format: uuid
17999
+ * @description Tenant id
18000
+ */
18001
+ id: string;
18002
+ /**
18003
+ * @description Immutable lowercase DNS-like slug
18004
+ * @example acme
18005
+ */
18006
+ slug: string;
18007
+ /** @description Human-readable tenant name */
18008
+ displayName: string;
18009
+ /**
18010
+ * @description Tenant lifecycle status
18011
+ * @enum {string}
18012
+ */
18013
+ status: "active" | "suspended" | "archived";
18014
+ /** @description Policy epoch, bumped on policy change */
18015
+ policyVersion: number;
18016
+ /** @description Revocation epoch, bumped on suspend/archive */
18017
+ revocationEpoch: number;
18018
+ /** @description Ceiling for credential TTL, in seconds */
18019
+ maxKeyTtlSeconds: number;
18020
+ /** @description Ceiling for credential rate limit */
18021
+ maxKeyRateLimit: number;
18022
+ /** @description Ceiling for credential budget */
18023
+ maxKeyBudget: number;
18024
+ /**
18025
+ * Format: uuid
18026
+ * @description Creator principal, or null for bootstrap/system tenants
18027
+ */
18028
+ createdByPrincipalId: string | null;
18029
+ /**
18030
+ * Format: date-time
18031
+ * @description Creation timestamp
18032
+ */
18033
+ createdAt: string;
18034
+ /**
18035
+ * Format: date-time
18036
+ * @description Last update timestamp
18037
+ */
18038
+ updatedAt: string;
18039
+ /**
18040
+ * Format: date-time
18041
+ * @description When the tenant was suspended, if ever
18042
+ */
18043
+ suspendedAt: string | null;
18044
+ /**
18045
+ * Format: date-time
18046
+ * @description When the tenant was archived, if ever
18047
+ */
18048
+ archivedAt: string | null;
18049
+ };
18050
+ };
18051
+ };
18052
+ };
18053
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18054
+ 401: {
18055
+ headers: {
18056
+ [name: string]: unknown;
18057
+ };
18058
+ content: {
18059
+ "application/json": {
18060
+ error: {
18061
+ /**
18062
+ * @description Error code
18063
+ * @example NOT_FOUND
18064
+ */
18065
+ code: string;
18066
+ /** @description Human-readable error message */
18067
+ message: string;
18068
+ /** @description Additional error details */
18069
+ details?: unknown;
18070
+ };
18071
+ };
18072
+ };
18073
+ };
18074
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18075
+ 404: {
18076
+ headers: {
18077
+ [name: string]: unknown;
18078
+ };
18079
+ content: {
18080
+ "application/json": {
18081
+ error: {
18082
+ /**
18083
+ * @description Error code
18084
+ * @example NOT_FOUND
18085
+ */
18086
+ code: string;
18087
+ /** @description Human-readable error message */
18088
+ message: string;
18089
+ /** @description Additional error details */
18090
+ details?: unknown;
18091
+ };
18092
+ };
18093
+ };
18094
+ };
18095
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
18096
+ 409: {
18097
+ headers: {
18098
+ [name: string]: unknown;
18099
+ };
18100
+ content: {
18101
+ "application/json": {
18102
+ error: {
18103
+ /**
18104
+ * @description Error code
18105
+ * @example NOT_FOUND
18106
+ */
18107
+ code: string;
18108
+ /** @description Human-readable error message */
18109
+ message: string;
18110
+ /** @description Additional error details */
18111
+ details?: unknown;
18112
+ };
18113
+ };
18114
+ };
18115
+ };
18116
+ };
18117
+ };
18118
+ listPlatformMemberships: {
18119
+ parameters: {
18120
+ query?: never;
18121
+ header: {
18122
+ "x-platform-reason": string;
18123
+ };
18124
+ path: {
18125
+ id: string;
18126
+ };
18127
+ cookie?: never;
18128
+ };
18129
+ requestBody?: never;
18130
+ responses: {
18131
+ /** @description Memberships */
18132
+ 200: {
18133
+ headers: {
18134
+ [name: string]: unknown;
18135
+ };
18136
+ content: {
18137
+ "application/json": {
18138
+ items: {
18139
+ /**
18140
+ * Format: uuid
18141
+ * @description Membership id
18142
+ */
18143
+ id: string;
18144
+ /**
18145
+ * Format: uuid
18146
+ * @description Tenant the membership belongs to
18147
+ */
18148
+ tenantId: string;
18149
+ /**
18150
+ * Format: uuid
18151
+ * @description Principal granted access
18152
+ */
18153
+ principalId: string;
18154
+ /**
18155
+ * @description Tenant role
18156
+ * @enum {string}
18157
+ */
18158
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18159
+ /**
18160
+ * @description Membership status
18161
+ * @enum {string}
18162
+ */
18163
+ status: "active" | "disabled";
18164
+ /**
18165
+ * Format: uuid
18166
+ * @description Principal that granted the membership, when known
18167
+ */
18168
+ invitedByPrincipalId: string | null;
18169
+ /**
18170
+ * Format: date-time
18171
+ * @description Creation timestamp
18172
+ */
18173
+ createdAt: string;
18174
+ /**
18175
+ * Format: date-time
18176
+ * @description Last update timestamp
18177
+ */
18178
+ updatedAt: string;
18179
+ /**
18180
+ * Format: date-time
18181
+ * @description When the membership was disabled, if ever
18182
+ */
18183
+ disabledAt: string | null;
18184
+ }[];
18185
+ };
18186
+ };
18187
+ };
18188
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18189
+ 401: {
18190
+ headers: {
18191
+ [name: string]: unknown;
18192
+ };
18193
+ content: {
18194
+ "application/json": {
18195
+ error: {
18196
+ /**
18197
+ * @description Error code
18198
+ * @example NOT_FOUND
18199
+ */
18200
+ code: string;
18201
+ /** @description Human-readable error message */
18202
+ message: string;
18203
+ /** @description Additional error details */
18204
+ details?: unknown;
18205
+ };
18206
+ };
18207
+ };
18208
+ };
18209
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18210
+ 404: {
18211
+ headers: {
18212
+ [name: string]: unknown;
18213
+ };
18214
+ content: {
18215
+ "application/json": {
18216
+ error: {
18217
+ /**
18218
+ * @description Error code
18219
+ * @example NOT_FOUND
18220
+ */
18221
+ code: string;
18222
+ /** @description Human-readable error message */
18223
+ message: string;
18224
+ /** @description Additional error details */
18225
+ details?: unknown;
18226
+ };
18227
+ };
18228
+ };
18229
+ };
18230
+ };
18231
+ };
18232
+ attachPlatformMembership: {
18233
+ parameters: {
18234
+ query?: never;
18235
+ header?: never;
18236
+ path: {
18237
+ id: string;
18238
+ };
18239
+ cookie?: never;
18240
+ };
18241
+ requestBody?: {
18242
+ content: {
18243
+ "application/json": {
18244
+ /**
18245
+ * Format: uuid
18246
+ * @description Principal to grant access to
18247
+ */
18248
+ principalId: string;
18249
+ /**
18250
+ * @description Tenant role
18251
+ * @enum {string}
18252
+ */
18253
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18254
+ /**
18255
+ * @description Audited justification for the change
18256
+ * @example onboarding request OPS-1421
18257
+ */
18258
+ reason: string;
18259
+ };
18260
+ };
18261
+ };
18262
+ responses: {
18263
+ /** @description Membership attached */
18264
+ 201: {
18265
+ headers: {
18266
+ [name: string]: unknown;
18267
+ };
18268
+ content: {
18269
+ "application/json": {
18270
+ data: {
18271
+ /**
18272
+ * Format: uuid
18273
+ * @description Membership id
18274
+ */
18275
+ id: string;
18276
+ /**
18277
+ * Format: uuid
18278
+ * @description Tenant the membership belongs to
18279
+ */
18280
+ tenantId: string;
18281
+ /**
18282
+ * Format: uuid
18283
+ * @description Principal granted access
18284
+ */
18285
+ principalId: string;
18286
+ /**
18287
+ * @description Tenant role
18288
+ * @enum {string}
18289
+ */
18290
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18291
+ /**
18292
+ * @description Membership status
18293
+ * @enum {string}
18294
+ */
18295
+ status: "active" | "disabled";
18296
+ /**
18297
+ * Format: uuid
18298
+ * @description Principal that granted the membership, when known
18299
+ */
18300
+ invitedByPrincipalId: string | null;
18301
+ /**
18302
+ * Format: date-time
18303
+ * @description Creation timestamp
18304
+ */
18305
+ createdAt: string;
18306
+ /**
18307
+ * Format: date-time
18308
+ * @description Last update timestamp
18309
+ */
18310
+ updatedAt: string;
18311
+ /**
18312
+ * Format: date-time
18313
+ * @description When the membership was disabled, if ever
18314
+ */
18315
+ disabledAt: string | null;
18316
+ };
18317
+ };
18318
+ };
18319
+ };
18320
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18321
+ 401: {
18322
+ headers: {
18323
+ [name: string]: unknown;
18324
+ };
18325
+ content: {
18326
+ "application/json": {
18327
+ error: {
18328
+ /**
18329
+ * @description Error code
18330
+ * @example NOT_FOUND
18331
+ */
18332
+ code: string;
18333
+ /** @description Human-readable error message */
18334
+ message: string;
18335
+ /** @description Additional error details */
18336
+ details?: unknown;
18337
+ };
18338
+ };
18339
+ };
18340
+ };
18341
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18342
+ 404: {
18343
+ headers: {
18344
+ [name: string]: unknown;
18345
+ };
18346
+ content: {
18347
+ "application/json": {
18348
+ error: {
18349
+ /**
18350
+ * @description Error code
18351
+ * @example NOT_FOUND
18352
+ */
18353
+ code: string;
18354
+ /** @description Human-readable error message */
18355
+ message: string;
18356
+ /** @description Additional error details */
18357
+ details?: unknown;
18358
+ };
18359
+ };
18360
+ };
18361
+ };
18362
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
18363
+ 409: {
18364
+ headers: {
18365
+ [name: string]: unknown;
18366
+ };
18367
+ content: {
18368
+ "application/json": {
18369
+ error: {
18370
+ /**
18371
+ * @description Error code
18372
+ * @example NOT_FOUND
18373
+ */
18374
+ code: string;
18375
+ /** @description Human-readable error message */
18376
+ message: string;
18377
+ /** @description Additional error details */
18378
+ details?: unknown;
18379
+ };
18380
+ };
18381
+ };
18382
+ };
18383
+ };
18384
+ };
18385
+ disablePlatformMembership: {
18386
+ parameters: {
18387
+ query?: never;
18388
+ header?: never;
18389
+ path: {
18390
+ tenantId: string;
18391
+ id: string;
18392
+ };
18393
+ cookie?: never;
18394
+ };
18395
+ requestBody?: {
18396
+ content: {
18397
+ "application/json": {
18398
+ /**
18399
+ * @description Audited justification for the change
18400
+ * @example onboarding request OPS-1421
18401
+ */
18402
+ reason: string;
18403
+ };
18404
+ };
18405
+ };
18406
+ responses: {
18407
+ /** @description Membership disabled */
18408
+ 200: {
18409
+ headers: {
18410
+ [name: string]: unknown;
18411
+ };
18412
+ content: {
18413
+ "application/json": {
18414
+ data: {
18415
+ /**
18416
+ * Format: uuid
18417
+ * @description Membership id
18418
+ */
18419
+ id: string;
18420
+ /**
18421
+ * Format: uuid
18422
+ * @description Tenant the membership belongs to
18423
+ */
18424
+ tenantId: string;
18425
+ /**
18426
+ * Format: uuid
18427
+ * @description Principal granted access
18428
+ */
18429
+ principalId: string;
18430
+ /**
18431
+ * @description Tenant role
18432
+ * @enum {string}
18433
+ */
18434
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18435
+ /**
18436
+ * @description Membership status
18437
+ * @enum {string}
18438
+ */
18439
+ status: "active" | "disabled";
18440
+ /**
18441
+ * Format: uuid
18442
+ * @description Principal that granted the membership, when known
18443
+ */
18444
+ invitedByPrincipalId: string | null;
18445
+ /**
18446
+ * Format: date-time
18447
+ * @description Creation timestamp
18448
+ */
18449
+ createdAt: string;
18450
+ /**
18451
+ * Format: date-time
18452
+ * @description Last update timestamp
18453
+ */
18454
+ updatedAt: string;
18455
+ /**
18456
+ * Format: date-time
18457
+ * @description When the membership was disabled, if ever
18458
+ */
18459
+ disabledAt: string | null;
18460
+ };
18461
+ };
18462
+ };
18463
+ };
18464
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18465
+ 401: {
18466
+ headers: {
18467
+ [name: string]: unknown;
18468
+ };
18469
+ content: {
18470
+ "application/json": {
18471
+ error: {
18472
+ /**
18473
+ * @description Error code
18474
+ * @example NOT_FOUND
18475
+ */
18476
+ code: string;
18477
+ /** @description Human-readable error message */
18478
+ message: string;
18479
+ /** @description Additional error details */
18480
+ details?: unknown;
18481
+ };
18482
+ };
18483
+ };
18484
+ };
18485
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18486
+ 404: {
18487
+ headers: {
18488
+ [name: string]: unknown;
18489
+ };
18490
+ content: {
18491
+ "application/json": {
18492
+ error: {
18493
+ /**
18494
+ * @description Error code
18495
+ * @example NOT_FOUND
18496
+ */
18497
+ code: string;
18498
+ /** @description Human-readable error message */
18499
+ message: string;
18500
+ /** @description Additional error details */
18501
+ details?: unknown;
18502
+ };
18503
+ };
18504
+ };
18505
+ };
18506
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
18507
+ 409: {
18508
+ headers: {
18509
+ [name: string]: unknown;
18510
+ };
18511
+ content: {
18512
+ "application/json": {
18513
+ error: {
18514
+ /**
18515
+ * @description Error code
18516
+ * @example NOT_FOUND
18517
+ */
18518
+ code: string;
18519
+ /** @description Human-readable error message */
18520
+ message: string;
18521
+ /** @description Additional error details */
18522
+ details?: unknown;
18523
+ };
18524
+ };
18525
+ };
18526
+ };
18527
+ };
18528
+ };
18529
+ setPlatformMembershipStatus: {
18530
+ parameters: {
18531
+ query?: never;
18532
+ header?: never;
18533
+ path: {
18534
+ tenantId: string;
18535
+ id: string;
18536
+ };
18537
+ cookie?: never;
18538
+ };
18539
+ requestBody?: {
18540
+ content: {
18541
+ "application/json": {
18542
+ /**
18543
+ * @description Target membership status
18544
+ * @enum {string}
18545
+ */
18546
+ status: "active" | "disabled";
18547
+ /**
18548
+ * @description Audited justification for the change
18549
+ * @example onboarding request OPS-1421
18550
+ */
18551
+ reason: string;
18552
+ };
18553
+ };
18554
+ };
18555
+ responses: {
18556
+ /** @description Membership status updated */
18557
+ 200: {
18558
+ headers: {
18559
+ [name: string]: unknown;
18560
+ };
18561
+ content: {
18562
+ "application/json": {
18563
+ data: {
18564
+ /**
18565
+ * Format: uuid
18566
+ * @description Membership id
18567
+ */
18568
+ id: string;
18569
+ /**
18570
+ * Format: uuid
18571
+ * @description Tenant the membership belongs to
18572
+ */
18573
+ tenantId: string;
18574
+ /**
18575
+ * Format: uuid
18576
+ * @description Principal granted access
18577
+ */
18578
+ principalId: string;
18579
+ /**
18580
+ * @description Tenant role
18581
+ * @enum {string}
18582
+ */
18583
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18584
+ /**
18585
+ * @description Membership status
18586
+ * @enum {string}
18587
+ */
18588
+ status: "active" | "disabled";
18589
+ /**
18590
+ * Format: uuid
18591
+ * @description Principal that granted the membership, when known
18592
+ */
18593
+ invitedByPrincipalId: string | null;
18594
+ /**
18595
+ * Format: date-time
18596
+ * @description Creation timestamp
18597
+ */
18598
+ createdAt: string;
18599
+ /**
18600
+ * Format: date-time
18601
+ * @description Last update timestamp
18602
+ */
18603
+ updatedAt: string;
18604
+ /**
18605
+ * Format: date-time
18606
+ * @description When the membership was disabled, if ever
18607
+ */
18608
+ disabledAt: string | null;
18609
+ };
18610
+ };
18611
+ };
18612
+ };
18613
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18614
+ 401: {
18615
+ headers: {
18616
+ [name: string]: unknown;
18617
+ };
18618
+ content: {
18619
+ "application/json": {
18620
+ error: {
18621
+ /**
18622
+ * @description Error code
18623
+ * @example NOT_FOUND
18624
+ */
18625
+ code: string;
18626
+ /** @description Human-readable error message */
18627
+ message: string;
18628
+ /** @description Additional error details */
18629
+ details?: unknown;
18630
+ };
18631
+ };
18632
+ };
18633
+ };
18634
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18635
+ 404: {
18636
+ headers: {
18637
+ [name: string]: unknown;
18638
+ };
18639
+ content: {
18640
+ "application/json": {
18641
+ error: {
18642
+ /**
18643
+ * @description Error code
18644
+ * @example NOT_FOUND
18645
+ */
18646
+ code: string;
18647
+ /** @description Human-readable error message */
18648
+ message: string;
18649
+ /** @description Additional error details */
18650
+ details?: unknown;
18651
+ };
18652
+ };
18653
+ };
18654
+ };
18655
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
18656
+ 409: {
18657
+ headers: {
18658
+ [name: string]: unknown;
18659
+ };
18660
+ content: {
18661
+ "application/json": {
18662
+ error: {
18663
+ /**
18664
+ * @description Error code
18665
+ * @example NOT_FOUND
18666
+ */
18667
+ code: string;
18668
+ /** @description Human-readable error message */
18669
+ message: string;
18670
+ /** @description Additional error details */
18671
+ details?: unknown;
18672
+ };
18673
+ };
18674
+ };
18675
+ };
18676
+ };
18677
+ };
18678
+ setPlatformMembershipRole: {
18679
+ parameters: {
18680
+ query?: never;
18681
+ header?: never;
18682
+ path: {
18683
+ tenantId: string;
18684
+ id: string;
18685
+ };
18686
+ cookie?: never;
18687
+ };
18688
+ requestBody?: {
18689
+ content: {
18690
+ "application/json": {
18691
+ /**
18692
+ * @description Tenant role
18693
+ * @enum {string}
18694
+ */
18695
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18696
+ /**
18697
+ * @description Audited justification for the change
18698
+ * @example onboarding request OPS-1421
18699
+ */
18700
+ reason: string;
18701
+ };
18702
+ };
18703
+ };
18704
+ responses: {
18705
+ /** @description Membership role updated */
18706
+ 200: {
18707
+ headers: {
18708
+ [name: string]: unknown;
18709
+ };
18710
+ content: {
18711
+ "application/json": {
18712
+ data: {
18713
+ /**
18714
+ * Format: uuid
18715
+ * @description Membership id
18716
+ */
18717
+ id: string;
18718
+ /**
18719
+ * Format: uuid
18720
+ * @description Tenant the membership belongs to
18721
+ */
18722
+ tenantId: string;
18723
+ /**
18724
+ * Format: uuid
18725
+ * @description Principal granted access
18726
+ */
18727
+ principalId: string;
18728
+ /**
18729
+ * @description Tenant role
18730
+ * @enum {string}
18731
+ */
18732
+ role: "tenant-owner" | "tenant-admin" | "tenant-operator" | "tenant-viewer";
18733
+ /**
18734
+ * @description Membership status
18735
+ * @enum {string}
18736
+ */
18737
+ status: "active" | "disabled";
18738
+ /**
18739
+ * Format: uuid
18740
+ * @description Principal that granted the membership, when known
18741
+ */
18742
+ invitedByPrincipalId: string | null;
18743
+ /**
18744
+ * Format: date-time
18745
+ * @description Creation timestamp
18746
+ */
18747
+ createdAt: string;
18748
+ /**
18749
+ * Format: date-time
18750
+ * @description Last update timestamp
18751
+ */
18752
+ updatedAt: string;
18753
+ /**
18754
+ * Format: date-time
18755
+ * @description When the membership was disabled, if ever
18756
+ */
18757
+ disabledAt: string | null;
18758
+ };
18759
+ };
18760
+ };
18761
+ };
18762
+ /** @description Missing, non-platform, or insufficiently scoped credential */
18763
+ 401: {
18764
+ headers: {
18765
+ [name: string]: unknown;
18766
+ };
18767
+ content: {
18768
+ "application/json": {
18769
+ error: {
18770
+ /**
18771
+ * @description Error code
18772
+ * @example NOT_FOUND
18773
+ */
18774
+ code: string;
18775
+ /** @description Human-readable error message */
18776
+ message: string;
18777
+ /** @description Additional error details */
18778
+ details?: unknown;
18779
+ };
18780
+ };
18781
+ };
18782
+ };
18783
+ /** @description Not found. Non-enumerating: an unknown id yields a bare 404 with no metadata. */
18784
+ 404: {
18785
+ headers: {
18786
+ [name: string]: unknown;
18787
+ };
18788
+ content: {
18789
+ "application/json": {
18790
+ error: {
18791
+ /**
18792
+ * @description Error code
18793
+ * @example NOT_FOUND
18794
+ */
18795
+ code: string;
18796
+ /** @description Human-readable error message */
18797
+ message: string;
18798
+ /** @description Additional error details */
18799
+ details?: unknown;
18800
+ };
18801
+ };
18802
+ };
18803
+ };
18804
+ /** @description Lifecycle conflict (e.g. duplicate slug, or a transition out of the terminal archived state) */
18805
+ 409: {
18806
+ headers: {
18807
+ [name: string]: unknown;
18808
+ };
18809
+ content: {
18810
+ "application/json": {
18811
+ error: {
18812
+ /**
18813
+ * @description Error code
18814
+ * @example NOT_FOUND
18815
+ */
18816
+ code: string;
18817
+ /** @description Human-readable error message */
18818
+ message: string;
18819
+ /** @description Additional error details */
18820
+ details?: unknown;
18821
+ };
18822
+ };
18823
+ };
18824
+ };
18825
+ };
18826
+ };
17106
18827
  }
17107
18828
  //# sourceMappingURL=types.generated.d.ts.map