@faable/auth-sdk 2.7.81 → 2.7.83

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.
@@ -1196,6 +1196,178 @@ export interface paths {
1196
1196
  patch?: never;
1197
1197
  trace?: never;
1198
1198
  };
1199
+ "/team/{team_id}/organization": {
1200
+ parameters: {
1201
+ query?: never;
1202
+ header?: never;
1203
+ path?: never;
1204
+ cookie?: never;
1205
+ };
1206
+ get?: never;
1207
+ /**
1208
+ * Put a Team in an Organization, or take it out
1209
+ * @description Sets the Organization the Team belongs to (`null` = none). A team is in at most one organization; setting another one moves it. Belonging to an organization grants nobody access to the team. Emits `team.updated`.
1210
+ */
1211
+ put: operations["team/setOrganization"];
1212
+ post?: never;
1213
+ delete?: never;
1214
+ options?: never;
1215
+ head?: never;
1216
+ patch?: never;
1217
+ trace?: never;
1218
+ };
1219
+ "/organization": {
1220
+ parameters: {
1221
+ query?: never;
1222
+ header?: never;
1223
+ path?: never;
1224
+ cookie?: never;
1225
+ };
1226
+ /**
1227
+ * List Organizations
1228
+ * @description List Organizations
1229
+ */
1230
+ get: operations["organization/list"];
1231
+ put?: never;
1232
+ /**
1233
+ * Create Organization
1234
+ * @description Create Organization
1235
+ */
1236
+ post: operations["organization/create"];
1237
+ delete?: never;
1238
+ options?: never;
1239
+ head?: never;
1240
+ patch?: never;
1241
+ trace?: never;
1242
+ };
1243
+ "/organization/{organization_id}": {
1244
+ parameters: {
1245
+ query?: never;
1246
+ header?: never;
1247
+ path?: never;
1248
+ cookie?: never;
1249
+ };
1250
+ /**
1251
+ * Get Organization
1252
+ * @description Get Organization
1253
+ */
1254
+ get: operations["organization/get"];
1255
+ put?: never;
1256
+ /**
1257
+ * Update Organization
1258
+ * @description Update Organization
1259
+ */
1260
+ post: operations["organization/update"];
1261
+ /**
1262
+ * Delete Organization
1263
+ * @description Delete Organization
1264
+ */
1265
+ delete: operations["organization/delete"];
1266
+ options?: never;
1267
+ head?: never;
1268
+ patch?: never;
1269
+ trace?: never;
1270
+ };
1271
+ "/organization/{organization_id}/admin": {
1272
+ parameters: {
1273
+ query?: never;
1274
+ header?: never;
1275
+ path?: never;
1276
+ cookie?: never;
1277
+ };
1278
+ get?: never;
1279
+ put?: never;
1280
+ /**
1281
+ * Add an admin to an Organization
1282
+ * @description Makes a user of this tenant an admin of the Organization. Idempotent. Being an admin does not grant access to any team of the organization. Emits `organization.updated`.
1283
+ */
1284
+ post: operations["organization/addAdmin"];
1285
+ delete?: never;
1286
+ options?: never;
1287
+ head?: never;
1288
+ patch?: never;
1289
+ trace?: never;
1290
+ };
1291
+ "/organization/{organization_id}/admin/{user_id}": {
1292
+ parameters: {
1293
+ query?: never;
1294
+ header?: never;
1295
+ path?: never;
1296
+ cookie?: never;
1297
+ };
1298
+ get?: never;
1299
+ put?: never;
1300
+ post?: never;
1301
+ /**
1302
+ * Remove an admin from an Organization
1303
+ * @description Removes the user from the admins of the Organization (the user is not deleted). An organization keeps at least one admin: removing the last one is `last_organization_admin`. Emits `organization.updated`.
1304
+ */
1305
+ delete: operations["organization/removeAdmin"];
1306
+ options?: never;
1307
+ head?: never;
1308
+ patch?: never;
1309
+ trace?: never;
1310
+ };
1311
+ "/organization/{organization_id}/domain": {
1312
+ parameters: {
1313
+ query?: never;
1314
+ header?: never;
1315
+ path?: never;
1316
+ cookie?: never;
1317
+ };
1318
+ get?: never;
1319
+ put?: never;
1320
+ /**
1321
+ * Claim an email domain for an Organization
1322
+ * @description Adds the domain unverified, with the `verification_token` its TXT record must hold. Idempotent. Nothing changes for anyone until the domain is verified.
1323
+ */
1324
+ post: operations["organization/addDomain"];
1325
+ delete?: never;
1326
+ options?: never;
1327
+ head?: never;
1328
+ patch?: never;
1329
+ trace?: never;
1330
+ };
1331
+ "/organization/{organization_id}/domain/{domain}/verify": {
1332
+ parameters: {
1333
+ query?: never;
1334
+ header?: never;
1335
+ path?: never;
1336
+ cookie?: never;
1337
+ };
1338
+ get?: never;
1339
+ put?: never;
1340
+ /**
1341
+ * Verify an Organization's email domain
1342
+ * @description Looks up the TXT record `_faable-challenge.<domain>` and, when it holds `faable-verification=<verification_token>`, marks the domain verified. Pro plan (`plan_required`; `plan_unavailable` when the plan cannot be checked). A domain is verified by one organization of the tenant at most (`organization_domain_taken`).
1343
+ */
1344
+ post: operations["organization/verifyDomain"];
1345
+ delete?: never;
1346
+ options?: never;
1347
+ head?: never;
1348
+ patch?: never;
1349
+ trace?: never;
1350
+ };
1351
+ "/organization/{organization_id}/domain/{domain}": {
1352
+ parameters: {
1353
+ query?: never;
1354
+ header?: never;
1355
+ path?: never;
1356
+ cookie?: never;
1357
+ };
1358
+ get?: never;
1359
+ put?: never;
1360
+ post?: never;
1361
+ /**
1362
+ * Remove an email domain from an Organization
1363
+ * @description Removes the domain, verified or not. Logins of people already in the organization are unaffected.
1364
+ */
1365
+ delete: operations["organization/removeDomain"];
1366
+ options?: never;
1367
+ head?: never;
1368
+ patch?: never;
1369
+ trace?: never;
1370
+ };
1199
1371
  "/teammember": {
1200
1372
  parameters: {
1201
1373
  query?: never;
@@ -4437,7 +4609,7 @@ export interface paths {
4437
4609
  put?: never;
4438
4610
  /**
4439
4611
  * OpenID Connect Dynamic Client Registration
4440
- * @description Register a new OAuth/OIDC client dynamically (OIDC Dynamic Client Registration 1.0 / RFC 7591). The new client is bound to the Account resolved from the request context.
4612
+ * @description Register a new OAuth/OIDC client dynamically (OIDC Dynamic Client Registration 1.0 / RFC 7591). The new client is bound to the Account resolved from the request context. Only when the tenant has `dynamic_client_registration_enabled`; otherwise `registration_disabled` (403).
4441
4613
  */
4442
4614
  post: operations["oauth/register"];
4443
4615
  delete?: never;
@@ -4725,6 +4897,8 @@ export interface components {
4725
4897
  webauthn_rp_id?: string | null;
4726
4898
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
4727
4899
  logout_confirm_required?: boolean;
4900
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
4901
+ dynamic_client_registration_enabled?: boolean;
4728
4902
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
4729
4903
  canonical_host?: string | null;
4730
4904
  /** @description AuthAccount creation date */
@@ -5603,6 +5777,8 @@ export interface components {
5603
5777
  description: string | null;
5604
5778
  /** @description Optional URL of an image used as the team avatar/logo. */
5605
5779
  logo_url: string | null;
5780
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
5781
+ organization?: string | null;
5606
5782
  /** @description Object is related with this account */
5607
5783
  account: string;
5608
5784
  /**
@@ -5657,6 +5833,104 @@ export interface components {
5657
5833
  TeamUpdateMetadata: {
5658
5834
  [key: string]: unknown;
5659
5835
  };
5836
+ /** @description Organization */
5837
+ Organization: {
5838
+ /** @description Organization ID */
5839
+ id: string;
5840
+ /**
5841
+ * @description Human-readable name of the organization.
5842
+ * @example Acme Inc.
5843
+ */
5844
+ name: string;
5845
+ /**
5846
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
5847
+ * @example acme-inc
5848
+ */
5849
+ slug: string;
5850
+ /** @description Optional free-form description. */
5851
+ description: string | null;
5852
+ /** @description Optional URL of the organization logo. */
5853
+ logo_url: string | null;
5854
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
5855
+ domains: {
5856
+ /** @example acme.com */
5857
+ domain: string;
5858
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
5859
+ verification_token: string;
5860
+ /**
5861
+ * Format: date-time
5862
+ * @description When the TXT record was found. `null` = not verified.
5863
+ */
5864
+ verified_at: string | null;
5865
+ }[];
5866
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
5867
+ admins: string[];
5868
+ /** @description Object is related with this account */
5869
+ account: string;
5870
+ /**
5871
+ * @description OrganizationMetadata
5872
+ * @default {}
5873
+ */
5874
+ metadata: {
5875
+ [key: string]: unknown;
5876
+ };
5877
+ /** @description Organization creation date */
5878
+ createdAt: string;
5879
+ /** @description Organization updated date */
5880
+ updatedAt?: string;
5881
+ };
5882
+ /**
5883
+ * @description OrganizationMetadata
5884
+ * @default {}
5885
+ */
5886
+ OrganizationMetadata: {
5887
+ [key: string]: unknown;
5888
+ };
5889
+ /** @description OrganizationCreate */
5890
+ OrganizationCreate: {
5891
+ /**
5892
+ * @description Human-readable name of the organization.
5893
+ * @example Acme Inc.
5894
+ */
5895
+ name: string;
5896
+ /** @description Optional free-form description. */
5897
+ description?: string;
5898
+ /**
5899
+ * Format: uri
5900
+ * @description Optional URL of the organization logo.
5901
+ */
5902
+ logo_url?: string;
5903
+ /** @description Initial admins (user ids of this tenant). Can be empty and filled later with `POST /organization/{organization_id}/admin`. */
5904
+ admins?: string[];
5905
+ /** @description Add Metadata */
5906
+ metadata?: {
5907
+ [key: string]: unknown;
5908
+ };
5909
+ };
5910
+ /** @description Add Metadata */
5911
+ OrganizationMetadataCreate: {
5912
+ [key: string]: unknown;
5913
+ };
5914
+ /** @description Partial update for an Organization. `slug` is derived from `name` on creation and is not editable; admins change through `/organization/{organization_id}/admin`. */
5915
+ OrganizationUpdate: {
5916
+ /** @description New human-readable name. */
5917
+ name?: string;
5918
+ /** @description New free-form description. */
5919
+ description?: string;
5920
+ /**
5921
+ * Format: uri
5922
+ * @description New URL of the organization logo.
5923
+ */
5924
+ logo_url?: string;
5925
+ /** @description Arbitrary key/value pairs. Replaces the previous metadata entirely. */
5926
+ metadata?: {
5927
+ [key: string]: unknown;
5928
+ };
5929
+ };
5930
+ /** @description Arbitrary key/value pairs. Replaces the previous metadata entirely. */
5931
+ OrganizationUpdateMetadata: {
5932
+ [key: string]: unknown;
5933
+ };
5660
5934
  /** @description TeamMember */
5661
5935
  TeamMember: {
5662
5936
  /** @description TeamMember ID */
@@ -6101,8 +6375,11 @@ export interface components {
6101
6375
  * - `team.invite.created`: An invitation to join a team was created.
6102
6376
  * - `team.invite.revoked`: A pending team invitation was revoked.
6103
6377
  * - `team.invite.accepted`: A team invitation was accepted.
6378
+ * - `organization.created`: An organization was created.
6379
+ * - `organization.updated`: An organization was updated (name, settings or admins).
6380
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
6104
6381
  *
6105
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6382
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6106
6383
  */
6107
6384
  events: string[];
6108
6385
  /** @enum {string} */
@@ -6202,8 +6479,11 @@ export interface components {
6202
6479
  * - `team.invite.created`: An invitation to join a team was created.
6203
6480
  * - `team.invite.revoked`: A pending team invitation was revoked.
6204
6481
  * - `team.invite.accepted`: A team invitation was accepted.
6482
+ * - `organization.created`: An organization was created.
6483
+ * - `organization.updated`: An organization was updated (name, settings or admins).
6484
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
6205
6485
  *
6206
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6486
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6207
6487
  */
6208
6488
  events: string[];
6209
6489
  /** @enum {string} */
@@ -6297,8 +6577,11 @@ export interface components {
6297
6577
  * - `team.invite.created`: An invitation to join a team was created.
6298
6578
  * - `team.invite.revoked`: A pending team invitation was revoked.
6299
6579
  * - `team.invite.accepted`: A team invitation was accepted.
6580
+ * - `organization.created`: An organization was created.
6581
+ * - `organization.updated`: An organization was updated (name, settings or admins).
6582
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
6300
6583
  *
6301
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6584
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6302
6585
  */
6303
6586
  events: string[];
6304
6587
  /** @enum {string} */
@@ -6360,8 +6643,11 @@ export interface components {
6360
6643
  * - `team.invite.created`: An invitation to join a team was created.
6361
6644
  * - `team.invite.revoked`: A pending team invitation was revoked.
6362
6645
  * - `team.invite.accepted`: A team invitation was accepted.
6646
+ * - `organization.created`: An organization was created.
6647
+ * - `organization.updated`: An organization was updated (name, settings or admins).
6648
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
6363
6649
  *
6364
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6650
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6365
6651
  */
6366
6652
  events: string[];
6367
6653
  /** @enum {string} */
@@ -6427,8 +6713,11 @@ export interface components {
6427
6713
  * - `team.invite.created`: An invitation to join a team was created.
6428
6714
  * - `team.invite.revoked`: A pending team invitation was revoked.
6429
6715
  * - `team.invite.accepted`: A team invitation was accepted.
6716
+ * - `organization.created`: An organization was created.
6717
+ * - `organization.updated`: An organization was updated (name, settings or admins).
6718
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
6430
6719
  *
6431
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6720
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
6432
6721
  */
6433
6722
  events?: string[];
6434
6723
  /** @enum {string} */
@@ -6827,6 +7116,7 @@ export interface components {
6827
7116
  default_country_iso?: string | null;
6828
7117
  webauthn_rp_id?: string | null;
6829
7118
  logout_confirm_required?: boolean | null;
7119
+ dynamic_client_registration_enabled?: boolean | null;
6830
7120
  canonical_host?: string | null;
6831
7121
  login_flow?: string | null;
6832
7122
  };
@@ -7037,6 +7327,17 @@ export interface components {
7037
7327
  * - `invite_used` (400): The invite was already accepted.
7038
7328
  * - `already_member` (400): The user is already a member of the team.
7039
7329
  * - `not_a_member` (404): The user is not a member of the team.
7330
+ * - `registration_disabled` (403): Dynamic client registration is turned off for this tenant. Create the client from the dashboard or the Management API, or turn on `dynamic_client_registration_enabled`.
7331
+ * - `invalid_email_domain` (400): Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.
7332
+ * - `public_email_domain` (400): A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.
7333
+ * - `organization_domain_not_found` (404): The organization has no such domain.
7334
+ * - `organization_domain_taken` (409): Another organization of this tenant already verified this domain. A domain belongs to one organization.
7335
+ * - `organization_domain_unverified` (400): The TXT record was not found or does not hold the expected value yet. `details.record` says what was expected and what resolves now; DNS can take a few minutes to propagate.
7336
+ * - `plan_unavailable` (503): The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.
7337
+ * - `organization_not_found` (404): No organization with that id in this account.
7338
+ * - `invalid_user` (400): The user does not exist in this account.
7339
+ * - `not_an_organization_admin` (404): The user is not an admin of the organization.
7340
+ * - `last_organization_admin` (409): An organization keeps at least one admin. Add another admin before removing this one.
7040
7341
  * - `team_id_unavailable` (409): The team id cannot be used in this tenant. Pick another id or let the API generate one.
7041
7342
  * - `use_team_member_route` (400): This generic route cannot create memberships. Use `POST /team/{team_id}/member` for team members or `POST /role/{role_id}/users` for role grants.
7042
7343
  * - `role_not_found` (404): No role with that id in this account.
@@ -7050,7 +7351,7 @@ export interface components {
7050
7351
  * - `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.
7051
7352
  * @enum {string}
7052
7353
  */
7053
- ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
7354
+ ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "registration_disabled" | "invalid_email_domain" | "public_email_domain" | "organization_domain_not_found" | "organization_domain_taken" | "organization_domain_unverified" | "plan_unavailable" | "organization_not_found" | "invalid_user" | "not_an_organization_admin" | "last_organization_admin" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
7054
7355
  /** @description Every error response has this shape. Branch on `error_code`, never on `message`: the message is written for a person and may change. */
7055
7356
  ErrorResponse: {
7056
7357
  /** @description The HTTP status, repeated. */
@@ -7210,6 +7511,8 @@ export interface operations {
7210
7511
  webauthn_rp_id?: string | null;
7211
7512
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
7212
7513
  logout_confirm_required?: boolean;
7514
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
7515
+ dynamic_client_registration_enabled?: boolean;
7213
7516
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
7214
7517
  canonical_host?: string | null;
7215
7518
  /** @description AuthAccount creation date */
@@ -7565,6 +7868,8 @@ export interface operations {
7565
7868
  webauthn_rp_id?: string | null;
7566
7869
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
7567
7870
  logout_confirm_required?: boolean;
7871
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
7872
+ dynamic_client_registration_enabled?: boolean;
7568
7873
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
7569
7874
  canonical_host?: string | null;
7570
7875
  /** @description AuthAccount creation date */
@@ -7808,6 +8113,8 @@ export interface operations {
7808
8113
  webauthn_rp_id?: string | null;
7809
8114
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
7810
8115
  logout_confirm_required?: boolean;
8116
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
8117
+ dynamic_client_registration_enabled?: boolean;
7811
8118
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
7812
8119
  canonical_host?: string | null;
7813
8120
  /** @description AuthAccount creation date */
@@ -8000,6 +8307,7 @@ export interface operations {
8000
8307
  default_country_iso?: string | null;
8001
8308
  webauthn_rp_id?: string | null;
8002
8309
  logout_confirm_required?: boolean | null;
8310
+ dynamic_client_registration_enabled?: boolean | null;
8003
8311
  canonical_host?: string | null;
8004
8312
  login_flow?: string | null;
8005
8313
  };
@@ -8126,6 +8434,8 @@ export interface operations {
8126
8434
  webauthn_rp_id?: string | null;
8127
8435
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
8128
8436
  logout_confirm_required?: boolean;
8437
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
8438
+ dynamic_client_registration_enabled?: boolean;
8129
8439
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
8130
8440
  canonical_host?: string | null;
8131
8441
  /** @description AuthAccount creation date */
@@ -9388,6 +9698,8 @@ export interface operations {
9388
9698
  webauthn_rp_id?: string | null;
9389
9699
  /** @description When true, `/logout` asks the End-User to confirm before ending the session unless the request carries a verified `id_token_hint`. Off by default — a plain link to `/logout` is otherwise enough to sign anyone out (logout CSRF). */
9390
9700
  logout_confirm_required?: boolean;
9701
+ /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
9702
+ dynamic_client_registration_enabled?: boolean;
9391
9703
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
9392
9704
  canonical_host?: string | null;
9393
9705
  /** @description AuthAccount creation date */
@@ -17708,6 +18020,8 @@ export interface operations {
17708
18020
  description: string | null;
17709
18021
  /** @description Optional URL of an image used as the team avatar/logo. */
17710
18022
  logo_url: string | null;
18023
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18024
+ organization?: string | null;
17711
18025
  /** @description Object is related with this account */
17712
18026
  account: string;
17713
18027
  /**
@@ -17842,6 +18156,8 @@ export interface operations {
17842
18156
  description: string | null;
17843
18157
  /** @description Optional URL of an image used as the team avatar/logo. */
17844
18158
  logo_url: string | null;
18159
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18160
+ organization?: string | null;
17845
18161
  /** @description Object is related with this account */
17846
18162
  account: string;
17847
18163
  /**
@@ -18005,6 +18321,8 @@ export interface operations {
18005
18321
  description: string | null;
18006
18322
  /** @description Optional URL of an image used as the team avatar/logo. */
18007
18323
  logo_url: string | null;
18324
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18325
+ organization?: string | null;
18008
18326
  /** @description Object is related with this account */
18009
18327
  account: string;
18010
18328
  /**
@@ -18044,6 +18362,8 @@ export interface operations {
18044
18362
  description: string | null;
18045
18363
  /** @description Optional URL of an image used as the team avatar/logo. */
18046
18364
  logo_url: string | null;
18365
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18366
+ organization?: string | null;
18047
18367
  /** @description Object is related with this account */
18048
18368
  account: string;
18049
18369
  /**
@@ -18204,6 +18524,8 @@ export interface operations {
18204
18524
  description: string | null;
18205
18525
  /** @description Optional URL of an image used as the team avatar/logo. */
18206
18526
  logo_url: string | null;
18527
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18528
+ organization?: string | null;
18207
18529
  /** @description Object is related with this account */
18208
18530
  account: string;
18209
18531
  /**
@@ -18344,6 +18666,8 @@ export interface operations {
18344
18666
  description: string | null;
18345
18667
  /** @description Optional URL of an image used as the team avatar/logo. */
18346
18668
  logo_url: string | null;
18669
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18670
+ organization?: string | null;
18347
18671
  /** @description Object is related with this account */
18348
18672
  account: string;
18349
18673
  /**
@@ -18448,50 +18772,1811 @@ export interface operations {
18448
18772
  };
18449
18773
  };
18450
18774
  };
18451
- "teammember/list": {
18775
+ "team/setOrganization": {
18452
18776
  parameters: {
18453
- query?: {
18454
- /** @description Number of items per page (max 200) */
18455
- pageSize?: number;
18456
- /** @description Cursor for next page */
18457
- cursor?: string;
18458
- /** @description Cursor returned by the previous page */
18459
- next?: string;
18460
- /** @description Exact match on `user`. Equivalent to `?query=user:<value>`. */
18461
- user?: string;
18462
- /** @description Exact match on `team`. Equivalent to `?query=team:<value>`. */
18463
- team?: string;
18464
- /** @description Filter using a FaableQL query */
18465
- query?: string;
18466
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
18467
- expand?: ("user" | "team" | "roles")[];
18468
- };
18777
+ query?: never;
18469
18778
  header?: never;
18470
- path?: never;
18779
+ path: {
18780
+ team_id: string;
18781
+ };
18471
18782
  cookie?: never;
18472
18783
  };
18473
- requestBody?: never;
18784
+ requestBody: {
18785
+ content: {
18786
+ "application/json": {
18787
+ /** @description Id of an Organization of this tenant, or `null` to take the team out of its organization. */
18788
+ organization: string | null;
18789
+ };
18790
+ };
18791
+ };
18474
18792
  responses: {
18475
- /** @description Default Response */
18793
+ /** @description Team */
18476
18794
  200: {
18477
18795
  headers: {
18478
18796
  [name: string]: unknown;
18479
18797
  };
18480
18798
  content: {
18481
18799
  "application/json": {
18482
- next: string | null;
18483
- results: components["schemas"]["TeamMember"][];
18800
+ /** @description Team ID */
18801
+ id: string;
18802
+ /**
18803
+ * @description Human-readable name of the team. Shown in the dashboard and in team-picker UI.
18804
+ * @example Acme Engineering
18805
+ */
18806
+ name: string;
18807
+ /**
18808
+ * @description URL-safe identifier auto-derived from `name`. Unique within the tenant; used in routes that address a team by slug.
18809
+ * @example acme-engineering
18810
+ */
18811
+ slug: string;
18812
+ /** @description Optional free-form description of the team. */
18813
+ description: string | null;
18814
+ /** @description Optional URL of an image used as the team avatar/logo. */
18815
+ logo_url: string | null;
18816
+ /** @description Id of the Organization the team belongs to, or `null`. Changed only with `PUT /team/{team_id}/organization`. */
18817
+ organization?: string | null;
18818
+ /** @description Object is related with this account */
18819
+ account: string;
18820
+ /**
18821
+ * @description TeamMetadata
18822
+ * @default {}
18823
+ */
18824
+ metadata: {
18825
+ [key: string]: unknown;
18826
+ };
18827
+ /** @description Team creation date */
18828
+ createdAt: string;
18829
+ /** @description Team updated date */
18830
+ updatedAt?: string;
18484
18831
  };
18485
18832
  };
18486
18833
  };
18487
- /**
18488
- * @description `invalid_query` — The `?query=` FaableQL expression could not be parsed.
18489
- *
18490
- * `invalid_expand` — An `?expand=` path is not allowed on this resource.
18491
- *
18492
- * `search_not_supported` — This resource does not support `?search=`.
18493
- *
18494
- * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
18834
+ /** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
18835
+ 400: {
18836
+ headers: {
18837
+ [name: string]: unknown;
18838
+ };
18839
+ content: {
18840
+ "application/json": components["schemas"]["ErrorResponse"] & {
18841
+ /** @enum {string} */
18842
+ error_code?: "validation_error";
18843
+ };
18844
+ };
18845
+ };
18846
+ /** @description `unauthorized` — The request carries no valid credentials. */
18847
+ 401: {
18848
+ headers: {
18849
+ [name: string]: unknown;
18850
+ };
18851
+ content: {
18852
+ "application/json": components["schemas"]["ErrorResponse"] & {
18853
+ /** @enum {string} */
18854
+ error_code?: "unauthorized";
18855
+ };
18856
+ };
18857
+ };
18858
+ /**
18859
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
18860
+ *
18861
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
18862
+ *
18863
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
18864
+ */
18865
+ 403: {
18866
+ headers: {
18867
+ [name: string]: unknown;
18868
+ };
18869
+ content: {
18870
+ "application/json": components["schemas"]["ErrorResponse"] & {
18871
+ /** @enum {string} */
18872
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
18873
+ };
18874
+ };
18875
+ };
18876
+ /**
18877
+ * @description `not_found` — The resource does not exist in this account.
18878
+ *
18879
+ * `organization_not_found` — No organization with that id in this account.
18880
+ *
18881
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
18882
+ */
18883
+ 404: {
18884
+ headers: {
18885
+ [name: string]: unknown;
18886
+ };
18887
+ content: {
18888
+ "application/json": components["schemas"]["ErrorResponse"] & {
18889
+ /** @enum {string} */
18890
+ error_code?: "not_found" | "organization_not_found" | "account_not_found";
18891
+ };
18892
+ };
18893
+ };
18894
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
18895
+ 429: {
18896
+ headers: {
18897
+ [name: string]: unknown;
18898
+ };
18899
+ content: {
18900
+ "application/json": components["schemas"]["ErrorResponse"] & {
18901
+ /** @enum {string} */
18902
+ error_code?: "too_many_requests";
18903
+ };
18904
+ };
18905
+ };
18906
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
18907
+ 500: {
18908
+ headers: {
18909
+ [name: string]: unknown;
18910
+ };
18911
+ content: {
18912
+ "application/json": components["schemas"]["ErrorResponse"] & {
18913
+ /** @enum {string} */
18914
+ error_code?: "internal_error";
18915
+ };
18916
+ };
18917
+ };
18918
+ };
18919
+ };
18920
+ "organization/list": {
18921
+ parameters: {
18922
+ query?: {
18923
+ /** @description Number of items per page (max 200) */
18924
+ pageSize?: number;
18925
+ /** @description Cursor for next page */
18926
+ cursor?: string;
18927
+ /** @description Cursor returned by the previous page */
18928
+ next?: string;
18929
+ /** @description Filter using a FaableQL query */
18930
+ query?: string;
18931
+ /** @description Full-text search across: `name`, `slug`. */
18932
+ q?: string;
18933
+ };
18934
+ header?: never;
18935
+ path?: never;
18936
+ cookie?: never;
18937
+ };
18938
+ requestBody?: never;
18939
+ responses: {
18940
+ /** @description Default Response */
18941
+ 200: {
18942
+ headers: {
18943
+ [name: string]: unknown;
18944
+ };
18945
+ content: {
18946
+ "application/json": {
18947
+ next: string | null;
18948
+ results: components["schemas"]["Organization"][];
18949
+ };
18950
+ };
18951
+ };
18952
+ /**
18953
+ * @description `invalid_query` — The `?query=` FaableQL expression could not be parsed.
18954
+ *
18955
+ * `invalid_expand` — An `?expand=` path is not allowed on this resource.
18956
+ *
18957
+ * `search_not_supported` — This resource does not support `?search=`.
18958
+ *
18959
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
18960
+ */
18961
+ 400: {
18962
+ headers: {
18963
+ [name: string]: unknown;
18964
+ };
18965
+ content: {
18966
+ "application/json": components["schemas"]["ErrorResponse"] & {
18967
+ /** @enum {string} */
18968
+ error_code?: "invalid_query" | "invalid_expand" | "search_not_supported" | "validation_error";
18969
+ };
18970
+ };
18971
+ };
18972
+ /** @description `unauthorized` — The request carries no valid credentials. */
18973
+ 401: {
18974
+ headers: {
18975
+ [name: string]: unknown;
18976
+ };
18977
+ content: {
18978
+ "application/json": components["schemas"]["ErrorResponse"] & {
18979
+ /** @enum {string} */
18980
+ error_code?: "unauthorized";
18981
+ };
18982
+ };
18983
+ };
18984
+ /**
18985
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
18986
+ *
18987
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
18988
+ *
18989
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
18990
+ */
18991
+ 403: {
18992
+ headers: {
18993
+ [name: string]: unknown;
18994
+ };
18995
+ content: {
18996
+ "application/json": components["schemas"]["ErrorResponse"] & {
18997
+ /** @enum {string} */
18998
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
18999
+ };
19000
+ };
19001
+ };
19002
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
19003
+ 404: {
19004
+ headers: {
19005
+ [name: string]: unknown;
19006
+ };
19007
+ content: {
19008
+ "application/json": components["schemas"]["ErrorResponse"] & {
19009
+ /** @enum {string} */
19010
+ error_code?: "account_not_found";
19011
+ };
19012
+ };
19013
+ };
19014
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19015
+ 429: {
19016
+ headers: {
19017
+ [name: string]: unknown;
19018
+ };
19019
+ content: {
19020
+ "application/json": components["schemas"]["ErrorResponse"] & {
19021
+ /** @enum {string} */
19022
+ error_code?: "too_many_requests";
19023
+ };
19024
+ };
19025
+ };
19026
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19027
+ 500: {
19028
+ headers: {
19029
+ [name: string]: unknown;
19030
+ };
19031
+ content: {
19032
+ "application/json": components["schemas"]["ErrorResponse"] & {
19033
+ /** @enum {string} */
19034
+ error_code?: "internal_error";
19035
+ };
19036
+ };
19037
+ };
19038
+ };
19039
+ };
19040
+ "organization/create": {
19041
+ parameters: {
19042
+ query?: never;
19043
+ header?: never;
19044
+ path?: never;
19045
+ cookie?: never;
19046
+ };
19047
+ /** @description OrganizationCreate */
19048
+ requestBody: {
19049
+ content: {
19050
+ "application/json": {
19051
+ /**
19052
+ * @description Human-readable name of the organization.
19053
+ * @example Acme Inc.
19054
+ */
19055
+ name: string;
19056
+ /** @description Optional free-form description. */
19057
+ description?: string;
19058
+ /**
19059
+ * Format: uri
19060
+ * @description Optional URL of the organization logo.
19061
+ */
19062
+ logo_url?: string;
19063
+ /** @description Initial admins (user ids of this tenant). Can be empty and filled later with `POST /organization/{organization_id}/admin`. */
19064
+ admins?: string[];
19065
+ /** @description Add Metadata */
19066
+ metadata?: {
19067
+ [key: string]: unknown;
19068
+ };
19069
+ };
19070
+ };
19071
+ };
19072
+ responses: {
19073
+ /** @description Organization */
19074
+ 200: {
19075
+ headers: {
19076
+ [name: string]: unknown;
19077
+ };
19078
+ content: {
19079
+ "application/json": {
19080
+ /** @description Organization ID */
19081
+ id: string;
19082
+ /**
19083
+ * @description Human-readable name of the organization.
19084
+ * @example Acme Inc.
19085
+ */
19086
+ name: string;
19087
+ /**
19088
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19089
+ * @example acme-inc
19090
+ */
19091
+ slug: string;
19092
+ /** @description Optional free-form description. */
19093
+ description: string | null;
19094
+ /** @description Optional URL of the organization logo. */
19095
+ logo_url: string | null;
19096
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19097
+ domains: {
19098
+ /** @example acme.com */
19099
+ domain: string;
19100
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19101
+ verification_token: string;
19102
+ /**
19103
+ * Format: date-time
19104
+ * @description When the TXT record was found. `null` = not verified.
19105
+ */
19106
+ verified_at: string | null;
19107
+ }[];
19108
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19109
+ admins: string[];
19110
+ /** @description Object is related with this account */
19111
+ account: string;
19112
+ /**
19113
+ * @description OrganizationMetadata
19114
+ * @default {}
19115
+ */
19116
+ metadata: {
19117
+ [key: string]: unknown;
19118
+ };
19119
+ /** @description Organization creation date */
19120
+ createdAt: string;
19121
+ /** @description Organization updated date */
19122
+ updatedAt?: string;
19123
+ };
19124
+ };
19125
+ };
19126
+ /**
19127
+ * @description `already_exists` — A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.
19128
+ *
19129
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
19130
+ */
19131
+ 400: {
19132
+ headers: {
19133
+ [name: string]: unknown;
19134
+ };
19135
+ content: {
19136
+ "application/json": components["schemas"]["ErrorResponse"] & {
19137
+ /** @enum {string} */
19138
+ error_code?: "already_exists" | "validation_error";
19139
+ };
19140
+ };
19141
+ };
19142
+ /** @description `unauthorized` — The request carries no valid credentials. */
19143
+ 401: {
19144
+ headers: {
19145
+ [name: string]: unknown;
19146
+ };
19147
+ content: {
19148
+ "application/json": components["schemas"]["ErrorResponse"] & {
19149
+ /** @enum {string} */
19150
+ error_code?: "unauthorized";
19151
+ };
19152
+ };
19153
+ };
19154
+ /**
19155
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19156
+ *
19157
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19158
+ *
19159
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19160
+ */
19161
+ 403: {
19162
+ headers: {
19163
+ [name: string]: unknown;
19164
+ };
19165
+ content: {
19166
+ "application/json": components["schemas"]["ErrorResponse"] & {
19167
+ /** @enum {string} */
19168
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19169
+ };
19170
+ };
19171
+ };
19172
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
19173
+ 404: {
19174
+ headers: {
19175
+ [name: string]: unknown;
19176
+ };
19177
+ content: {
19178
+ "application/json": components["schemas"]["ErrorResponse"] & {
19179
+ /** @enum {string} */
19180
+ error_code?: "account_not_found";
19181
+ };
19182
+ };
19183
+ };
19184
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19185
+ 429: {
19186
+ headers: {
19187
+ [name: string]: unknown;
19188
+ };
19189
+ content: {
19190
+ "application/json": components["schemas"]["ErrorResponse"] & {
19191
+ /** @enum {string} */
19192
+ error_code?: "too_many_requests";
19193
+ };
19194
+ };
19195
+ };
19196
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19197
+ 500: {
19198
+ headers: {
19199
+ [name: string]: unknown;
19200
+ };
19201
+ content: {
19202
+ "application/json": components["schemas"]["ErrorResponse"] & {
19203
+ /** @enum {string} */
19204
+ error_code?: "internal_error";
19205
+ };
19206
+ };
19207
+ };
19208
+ };
19209
+ };
19210
+ "organization/get": {
19211
+ parameters: {
19212
+ query?: never;
19213
+ header?: never;
19214
+ path: {
19215
+ organization_id: string;
19216
+ };
19217
+ cookie?: never;
19218
+ };
19219
+ requestBody?: never;
19220
+ responses: {
19221
+ /** @description Organization */
19222
+ 200: {
19223
+ headers: {
19224
+ [name: string]: unknown;
19225
+ };
19226
+ content: {
19227
+ "application/json": {
19228
+ /** @description Organization ID */
19229
+ id: string;
19230
+ /**
19231
+ * @description Human-readable name of the organization.
19232
+ * @example Acme Inc.
19233
+ */
19234
+ name: string;
19235
+ /**
19236
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19237
+ * @example acme-inc
19238
+ */
19239
+ slug: string;
19240
+ /** @description Optional free-form description. */
19241
+ description: string | null;
19242
+ /** @description Optional URL of the organization logo. */
19243
+ logo_url: string | null;
19244
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19245
+ domains: {
19246
+ /** @example acme.com */
19247
+ domain: string;
19248
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19249
+ verification_token: string;
19250
+ /**
19251
+ * Format: date-time
19252
+ * @description When the TXT record was found. `null` = not verified.
19253
+ */
19254
+ verified_at: string | null;
19255
+ }[];
19256
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19257
+ admins: string[];
19258
+ /** @description Object is related with this account */
19259
+ account: string;
19260
+ /**
19261
+ * @description OrganizationMetadata
19262
+ * @default {}
19263
+ */
19264
+ metadata: {
19265
+ [key: string]: unknown;
19266
+ };
19267
+ /** @description Organization creation date */
19268
+ createdAt: string;
19269
+ /** @description Organization updated date */
19270
+ updatedAt?: string;
19271
+ };
19272
+ };
19273
+ };
19274
+ /**
19275
+ * @description `invalid_id` — The id in the path is not a valid id for this resource.
19276
+ *
19277
+ * `invalid_expand` — An `?expand=` path is not allowed on this resource.
19278
+ *
19279
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
19280
+ */
19281
+ 400: {
19282
+ headers: {
19283
+ [name: string]: unknown;
19284
+ };
19285
+ content: {
19286
+ "application/json": components["schemas"]["ErrorResponse"] & {
19287
+ /** @enum {string} */
19288
+ error_code?: "invalid_id" | "invalid_expand" | "validation_error";
19289
+ };
19290
+ };
19291
+ };
19292
+ /** @description `unauthorized` — The request carries no valid credentials. */
19293
+ 401: {
19294
+ headers: {
19295
+ [name: string]: unknown;
19296
+ };
19297
+ content: {
19298
+ "application/json": components["schemas"]["ErrorResponse"] & {
19299
+ /** @enum {string} */
19300
+ error_code?: "unauthorized";
19301
+ };
19302
+ };
19303
+ };
19304
+ /**
19305
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19306
+ *
19307
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19308
+ *
19309
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19310
+ */
19311
+ 403: {
19312
+ headers: {
19313
+ [name: string]: unknown;
19314
+ };
19315
+ content: {
19316
+ "application/json": components["schemas"]["ErrorResponse"] & {
19317
+ /** @enum {string} */
19318
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19319
+ };
19320
+ };
19321
+ };
19322
+ /**
19323
+ * @description `not_found` — The resource does not exist in this account.
19324
+ *
19325
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
19326
+ */
19327
+ 404: {
19328
+ headers: {
19329
+ [name: string]: unknown;
19330
+ };
19331
+ content: {
19332
+ "application/json": components["schemas"]["ErrorResponse"] & {
19333
+ /** @enum {string} */
19334
+ error_code?: "not_found" | "account_not_found";
19335
+ };
19336
+ };
19337
+ };
19338
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19339
+ 429: {
19340
+ headers: {
19341
+ [name: string]: unknown;
19342
+ };
19343
+ content: {
19344
+ "application/json": components["schemas"]["ErrorResponse"] & {
19345
+ /** @enum {string} */
19346
+ error_code?: "too_many_requests";
19347
+ };
19348
+ };
19349
+ };
19350
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19351
+ 500: {
19352
+ headers: {
19353
+ [name: string]: unknown;
19354
+ };
19355
+ content: {
19356
+ "application/json": components["schemas"]["ErrorResponse"] & {
19357
+ /** @enum {string} */
19358
+ error_code?: "internal_error";
19359
+ };
19360
+ };
19361
+ };
19362
+ };
19363
+ };
19364
+ "organization/update": {
19365
+ parameters: {
19366
+ query?: never;
19367
+ header?: never;
19368
+ path: {
19369
+ organization_id: string;
19370
+ };
19371
+ cookie?: never;
19372
+ };
19373
+ /** @description Partial update for an Organization. `slug` is derived from `name` on creation and is not editable; admins change through `/organization/{organization_id}/admin`. */
19374
+ requestBody: {
19375
+ content: {
19376
+ "application/json": {
19377
+ /** @description New human-readable name. */
19378
+ name?: string;
19379
+ /** @description New free-form description. */
19380
+ description?: string;
19381
+ /**
19382
+ * Format: uri
19383
+ * @description New URL of the organization logo.
19384
+ */
19385
+ logo_url?: string;
19386
+ /** @description Arbitrary key/value pairs. Replaces the previous metadata entirely. */
19387
+ metadata?: {
19388
+ [key: string]: unknown;
19389
+ };
19390
+ };
19391
+ };
19392
+ };
19393
+ responses: {
19394
+ /** @description Organization */
19395
+ 200: {
19396
+ headers: {
19397
+ [name: string]: unknown;
19398
+ };
19399
+ content: {
19400
+ "application/json": {
19401
+ /** @description Organization ID */
19402
+ id: string;
19403
+ /**
19404
+ * @description Human-readable name of the organization.
19405
+ * @example Acme Inc.
19406
+ */
19407
+ name: string;
19408
+ /**
19409
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19410
+ * @example acme-inc
19411
+ */
19412
+ slug: string;
19413
+ /** @description Optional free-form description. */
19414
+ description: string | null;
19415
+ /** @description Optional URL of the organization logo. */
19416
+ logo_url: string | null;
19417
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19418
+ domains: {
19419
+ /** @example acme.com */
19420
+ domain: string;
19421
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19422
+ verification_token: string;
19423
+ /**
19424
+ * Format: date-time
19425
+ * @description When the TXT record was found. `null` = not verified.
19426
+ */
19427
+ verified_at: string | null;
19428
+ }[];
19429
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19430
+ admins: string[];
19431
+ /** @description Object is related with this account */
19432
+ account: string;
19433
+ /**
19434
+ * @description OrganizationMetadata
19435
+ * @default {}
19436
+ */
19437
+ metadata: {
19438
+ [key: string]: unknown;
19439
+ };
19440
+ /** @description Organization creation date */
19441
+ createdAt: string;
19442
+ /** @description Organization updated date */
19443
+ updatedAt?: string;
19444
+ };
19445
+ };
19446
+ };
19447
+ /**
19448
+ * @description `invalid_id` — The id in the path is not a valid id for this resource.
19449
+ *
19450
+ * `already_exists` — A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.
19451
+ *
19452
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
19453
+ */
19454
+ 400: {
19455
+ headers: {
19456
+ [name: string]: unknown;
19457
+ };
19458
+ content: {
19459
+ "application/json": components["schemas"]["ErrorResponse"] & {
19460
+ /** @enum {string} */
19461
+ error_code?: "invalid_id" | "already_exists" | "validation_error";
19462
+ };
19463
+ };
19464
+ };
19465
+ /** @description `unauthorized` — The request carries no valid credentials. */
19466
+ 401: {
19467
+ headers: {
19468
+ [name: string]: unknown;
19469
+ };
19470
+ content: {
19471
+ "application/json": components["schemas"]["ErrorResponse"] & {
19472
+ /** @enum {string} */
19473
+ error_code?: "unauthorized";
19474
+ };
19475
+ };
19476
+ };
19477
+ /**
19478
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19479
+ *
19480
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19481
+ *
19482
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19483
+ */
19484
+ 403: {
19485
+ headers: {
19486
+ [name: string]: unknown;
19487
+ };
19488
+ content: {
19489
+ "application/json": components["schemas"]["ErrorResponse"] & {
19490
+ /** @enum {string} */
19491
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19492
+ };
19493
+ };
19494
+ };
19495
+ /**
19496
+ * @description `not_found` — The resource does not exist in this account.
19497
+ *
19498
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
19499
+ */
19500
+ 404: {
19501
+ headers: {
19502
+ [name: string]: unknown;
19503
+ };
19504
+ content: {
19505
+ "application/json": components["schemas"]["ErrorResponse"] & {
19506
+ /** @enum {string} */
19507
+ error_code?: "not_found" | "account_not_found";
19508
+ };
19509
+ };
19510
+ };
19511
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19512
+ 429: {
19513
+ headers: {
19514
+ [name: string]: unknown;
19515
+ };
19516
+ content: {
19517
+ "application/json": components["schemas"]["ErrorResponse"] & {
19518
+ /** @enum {string} */
19519
+ error_code?: "too_many_requests";
19520
+ };
19521
+ };
19522
+ };
19523
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19524
+ 500: {
19525
+ headers: {
19526
+ [name: string]: unknown;
19527
+ };
19528
+ content: {
19529
+ "application/json": components["schemas"]["ErrorResponse"] & {
19530
+ /** @enum {string} */
19531
+ error_code?: "internal_error";
19532
+ };
19533
+ };
19534
+ };
19535
+ };
19536
+ };
19537
+ "organization/delete": {
19538
+ parameters: {
19539
+ query?: never;
19540
+ header?: never;
19541
+ path: {
19542
+ organization_id: string;
19543
+ };
19544
+ cookie?: never;
19545
+ };
19546
+ requestBody?: never;
19547
+ responses: {
19548
+ /** @description Organization */
19549
+ 200: {
19550
+ headers: {
19551
+ [name: string]: unknown;
19552
+ };
19553
+ content: {
19554
+ "application/json": {
19555
+ /** @description Organization ID */
19556
+ id: string;
19557
+ /**
19558
+ * @description Human-readable name of the organization.
19559
+ * @example Acme Inc.
19560
+ */
19561
+ name: string;
19562
+ /**
19563
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19564
+ * @example acme-inc
19565
+ */
19566
+ slug: string;
19567
+ /** @description Optional free-form description. */
19568
+ description: string | null;
19569
+ /** @description Optional URL of the organization logo. */
19570
+ logo_url: string | null;
19571
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19572
+ domains: {
19573
+ /** @example acme.com */
19574
+ domain: string;
19575
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19576
+ verification_token: string;
19577
+ /**
19578
+ * Format: date-time
19579
+ * @description When the TXT record was found. `null` = not verified.
19580
+ */
19581
+ verified_at: string | null;
19582
+ }[];
19583
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19584
+ admins: string[];
19585
+ /** @description Object is related with this account */
19586
+ account: string;
19587
+ /**
19588
+ * @description OrganizationMetadata
19589
+ * @default {}
19590
+ */
19591
+ metadata: {
19592
+ [key: string]: unknown;
19593
+ };
19594
+ /** @description Organization creation date */
19595
+ createdAt: string;
19596
+ /** @description Organization updated date */
19597
+ updatedAt?: string;
19598
+ };
19599
+ };
19600
+ };
19601
+ /**
19602
+ * @description `invalid_id` — The id in the path is not a valid id for this resource.
19603
+ *
19604
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
19605
+ */
19606
+ 400: {
19607
+ headers: {
19608
+ [name: string]: unknown;
19609
+ };
19610
+ content: {
19611
+ "application/json": components["schemas"]["ErrorResponse"] & {
19612
+ /** @enum {string} */
19613
+ error_code?: "invalid_id" | "validation_error";
19614
+ };
19615
+ };
19616
+ };
19617
+ /** @description `unauthorized` — The request carries no valid credentials. */
19618
+ 401: {
19619
+ headers: {
19620
+ [name: string]: unknown;
19621
+ };
19622
+ content: {
19623
+ "application/json": components["schemas"]["ErrorResponse"] & {
19624
+ /** @enum {string} */
19625
+ error_code?: "unauthorized";
19626
+ };
19627
+ };
19628
+ };
19629
+ /**
19630
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19631
+ *
19632
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19633
+ *
19634
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19635
+ */
19636
+ 403: {
19637
+ headers: {
19638
+ [name: string]: unknown;
19639
+ };
19640
+ content: {
19641
+ "application/json": components["schemas"]["ErrorResponse"] & {
19642
+ /** @enum {string} */
19643
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19644
+ };
19645
+ };
19646
+ };
19647
+ /**
19648
+ * @description `not_found` — The resource does not exist in this account.
19649
+ *
19650
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
19651
+ */
19652
+ 404: {
19653
+ headers: {
19654
+ [name: string]: unknown;
19655
+ };
19656
+ content: {
19657
+ "application/json": components["schemas"]["ErrorResponse"] & {
19658
+ /** @enum {string} */
19659
+ error_code?: "not_found" | "account_not_found";
19660
+ };
19661
+ };
19662
+ };
19663
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19664
+ 429: {
19665
+ headers: {
19666
+ [name: string]: unknown;
19667
+ };
19668
+ content: {
19669
+ "application/json": components["schemas"]["ErrorResponse"] & {
19670
+ /** @enum {string} */
19671
+ error_code?: "too_many_requests";
19672
+ };
19673
+ };
19674
+ };
19675
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19676
+ 500: {
19677
+ headers: {
19678
+ [name: string]: unknown;
19679
+ };
19680
+ content: {
19681
+ "application/json": components["schemas"]["ErrorResponse"] & {
19682
+ /** @enum {string} */
19683
+ error_code?: "internal_error";
19684
+ };
19685
+ };
19686
+ };
19687
+ };
19688
+ };
19689
+ "organization/addAdmin": {
19690
+ parameters: {
19691
+ query?: never;
19692
+ header?: never;
19693
+ path: {
19694
+ organization_id: string;
19695
+ };
19696
+ cookie?: never;
19697
+ };
19698
+ requestBody: {
19699
+ content: {
19700
+ "application/json": {
19701
+ /**
19702
+ * @description Id of a user of this tenant.
19703
+ * @example user_6555fd29a1b2c3d4e5f60718
19704
+ */
19705
+ user_id: string;
19706
+ };
19707
+ };
19708
+ };
19709
+ responses: {
19710
+ /** @description Organization */
19711
+ 200: {
19712
+ headers: {
19713
+ [name: string]: unknown;
19714
+ };
19715
+ content: {
19716
+ "application/json": {
19717
+ /** @description Organization ID */
19718
+ id: string;
19719
+ /**
19720
+ * @description Human-readable name of the organization.
19721
+ * @example Acme Inc.
19722
+ */
19723
+ name: string;
19724
+ /**
19725
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19726
+ * @example acme-inc
19727
+ */
19728
+ slug: string;
19729
+ /** @description Optional free-form description. */
19730
+ description: string | null;
19731
+ /** @description Optional URL of the organization logo. */
19732
+ logo_url: string | null;
19733
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19734
+ domains: {
19735
+ /** @example acme.com */
19736
+ domain: string;
19737
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19738
+ verification_token: string;
19739
+ /**
19740
+ * Format: date-time
19741
+ * @description When the TXT record was found. `null` = not verified.
19742
+ */
19743
+ verified_at: string | null;
19744
+ }[];
19745
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19746
+ admins: string[];
19747
+ /** @description Object is related with this account */
19748
+ account: string;
19749
+ /**
19750
+ * @description OrganizationMetadata
19751
+ * @default {}
19752
+ */
19753
+ metadata: {
19754
+ [key: string]: unknown;
19755
+ };
19756
+ /** @description Organization creation date */
19757
+ createdAt: string;
19758
+ /** @description Organization updated date */
19759
+ updatedAt?: string;
19760
+ };
19761
+ };
19762
+ };
19763
+ /**
19764
+ * @description `invalid_user` — The user does not exist in this account.
19765
+ *
19766
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
19767
+ */
19768
+ 400: {
19769
+ headers: {
19770
+ [name: string]: unknown;
19771
+ };
19772
+ content: {
19773
+ "application/json": components["schemas"]["ErrorResponse"] & {
19774
+ /** @enum {string} */
19775
+ error_code?: "invalid_user" | "validation_error";
19776
+ };
19777
+ };
19778
+ };
19779
+ /** @description `unauthorized` — The request carries no valid credentials. */
19780
+ 401: {
19781
+ headers: {
19782
+ [name: string]: unknown;
19783
+ };
19784
+ content: {
19785
+ "application/json": components["schemas"]["ErrorResponse"] & {
19786
+ /** @enum {string} */
19787
+ error_code?: "unauthorized";
19788
+ };
19789
+ };
19790
+ };
19791
+ /**
19792
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19793
+ *
19794
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19795
+ *
19796
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19797
+ */
19798
+ 403: {
19799
+ headers: {
19800
+ [name: string]: unknown;
19801
+ };
19802
+ content: {
19803
+ "application/json": components["schemas"]["ErrorResponse"] & {
19804
+ /** @enum {string} */
19805
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19806
+ };
19807
+ };
19808
+ };
19809
+ /**
19810
+ * @description `organization_not_found` — No organization with that id in this account.
19811
+ *
19812
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
19813
+ */
19814
+ 404: {
19815
+ headers: {
19816
+ [name: string]: unknown;
19817
+ };
19818
+ content: {
19819
+ "application/json": components["schemas"]["ErrorResponse"] & {
19820
+ /** @enum {string} */
19821
+ error_code?: "organization_not_found" | "account_not_found";
19822
+ };
19823
+ };
19824
+ };
19825
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19826
+ 429: {
19827
+ headers: {
19828
+ [name: string]: unknown;
19829
+ };
19830
+ content: {
19831
+ "application/json": components["schemas"]["ErrorResponse"] & {
19832
+ /** @enum {string} */
19833
+ error_code?: "too_many_requests";
19834
+ };
19835
+ };
19836
+ };
19837
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
19838
+ 500: {
19839
+ headers: {
19840
+ [name: string]: unknown;
19841
+ };
19842
+ content: {
19843
+ "application/json": components["schemas"]["ErrorResponse"] & {
19844
+ /** @enum {string} */
19845
+ error_code?: "internal_error";
19846
+ };
19847
+ };
19848
+ };
19849
+ };
19850
+ };
19851
+ "organization/removeAdmin": {
19852
+ parameters: {
19853
+ query?: never;
19854
+ header?: never;
19855
+ path: {
19856
+ organization_id: string;
19857
+ user_id: string;
19858
+ };
19859
+ cookie?: never;
19860
+ };
19861
+ requestBody?: never;
19862
+ responses: {
19863
+ /** @description Organization */
19864
+ 200: {
19865
+ headers: {
19866
+ [name: string]: unknown;
19867
+ };
19868
+ content: {
19869
+ "application/json": {
19870
+ /** @description Organization ID */
19871
+ id: string;
19872
+ /**
19873
+ * @description Human-readable name of the organization.
19874
+ * @example Acme Inc.
19875
+ */
19876
+ name: string;
19877
+ /**
19878
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
19879
+ * @example acme-inc
19880
+ */
19881
+ slug: string;
19882
+ /** @description Optional free-form description. */
19883
+ description: string | null;
19884
+ /** @description Optional URL of the organization logo. */
19885
+ logo_url: string | null;
19886
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
19887
+ domains: {
19888
+ /** @example acme.com */
19889
+ domain: string;
19890
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
19891
+ verification_token: string;
19892
+ /**
19893
+ * Format: date-time
19894
+ * @description When the TXT record was found. `null` = not verified.
19895
+ */
19896
+ verified_at: string | null;
19897
+ }[];
19898
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
19899
+ admins: string[];
19900
+ /** @description Object is related with this account */
19901
+ account: string;
19902
+ /**
19903
+ * @description OrganizationMetadata
19904
+ * @default {}
19905
+ */
19906
+ metadata: {
19907
+ [key: string]: unknown;
19908
+ };
19909
+ /** @description Organization creation date */
19910
+ createdAt: string;
19911
+ /** @description Organization updated date */
19912
+ updatedAt?: string;
19913
+ };
19914
+ };
19915
+ };
19916
+ /** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
19917
+ 400: {
19918
+ headers: {
19919
+ [name: string]: unknown;
19920
+ };
19921
+ content: {
19922
+ "application/json": components["schemas"]["ErrorResponse"] & {
19923
+ /** @enum {string} */
19924
+ error_code?: "validation_error";
19925
+ };
19926
+ };
19927
+ };
19928
+ /** @description `unauthorized` — The request carries no valid credentials. */
19929
+ 401: {
19930
+ headers: {
19931
+ [name: string]: unknown;
19932
+ };
19933
+ content: {
19934
+ "application/json": components["schemas"]["ErrorResponse"] & {
19935
+ /** @enum {string} */
19936
+ error_code?: "unauthorized";
19937
+ };
19938
+ };
19939
+ };
19940
+ /**
19941
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
19942
+ *
19943
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
19944
+ *
19945
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
19946
+ */
19947
+ 403: {
19948
+ headers: {
19949
+ [name: string]: unknown;
19950
+ };
19951
+ content: {
19952
+ "application/json": components["schemas"]["ErrorResponse"] & {
19953
+ /** @enum {string} */
19954
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
19955
+ };
19956
+ };
19957
+ };
19958
+ /**
19959
+ * @description `organization_not_found` — No organization with that id in this account.
19960
+ *
19961
+ * `not_an_organization_admin` — The user is not an admin of the organization.
19962
+ *
19963
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
19964
+ */
19965
+ 404: {
19966
+ headers: {
19967
+ [name: string]: unknown;
19968
+ };
19969
+ content: {
19970
+ "application/json": components["schemas"]["ErrorResponse"] & {
19971
+ /** @enum {string} */
19972
+ error_code?: "organization_not_found" | "not_an_organization_admin" | "account_not_found";
19973
+ };
19974
+ };
19975
+ };
19976
+ /** @description `last_organization_admin` — An organization keeps at least one admin. Add another admin before removing this one. */
19977
+ 409: {
19978
+ headers: {
19979
+ [name: string]: unknown;
19980
+ };
19981
+ content: {
19982
+ "application/json": components["schemas"]["ErrorResponse"] & {
19983
+ /** @enum {string} */
19984
+ error_code?: "last_organization_admin";
19985
+ };
19986
+ };
19987
+ };
19988
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
19989
+ 429: {
19990
+ headers: {
19991
+ [name: string]: unknown;
19992
+ };
19993
+ content: {
19994
+ "application/json": components["schemas"]["ErrorResponse"] & {
19995
+ /** @enum {string} */
19996
+ error_code?: "too_many_requests";
19997
+ };
19998
+ };
19999
+ };
20000
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20001
+ 500: {
20002
+ headers: {
20003
+ [name: string]: unknown;
20004
+ };
20005
+ content: {
20006
+ "application/json": components["schemas"]["ErrorResponse"] & {
20007
+ /** @enum {string} */
20008
+ error_code?: "internal_error";
20009
+ };
20010
+ };
20011
+ };
20012
+ };
20013
+ };
20014
+ "organization/addDomain": {
20015
+ parameters: {
20016
+ query?: never;
20017
+ header?: never;
20018
+ path: {
20019
+ organization_id: string;
20020
+ };
20021
+ cookie?: never;
20022
+ };
20023
+ requestBody: {
20024
+ content: {
20025
+ "application/json": {
20026
+ /**
20027
+ * @description The email domain, as in `alice@<domain>`.
20028
+ * @example acme.com
20029
+ */
20030
+ domain: string;
20031
+ };
20032
+ };
20033
+ };
20034
+ responses: {
20035
+ /** @description Organization */
20036
+ 200: {
20037
+ headers: {
20038
+ [name: string]: unknown;
20039
+ };
20040
+ content: {
20041
+ "application/json": {
20042
+ /** @description Organization ID */
20043
+ id: string;
20044
+ /**
20045
+ * @description Human-readable name of the organization.
20046
+ * @example Acme Inc.
20047
+ */
20048
+ name: string;
20049
+ /**
20050
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
20051
+ * @example acme-inc
20052
+ */
20053
+ slug: string;
20054
+ /** @description Optional free-form description. */
20055
+ description: string | null;
20056
+ /** @description Optional URL of the organization logo. */
20057
+ logo_url: string | null;
20058
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
20059
+ domains: {
20060
+ /** @example acme.com */
20061
+ domain: string;
20062
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
20063
+ verification_token: string;
20064
+ /**
20065
+ * Format: date-time
20066
+ * @description When the TXT record was found. `null` = not verified.
20067
+ */
20068
+ verified_at: string | null;
20069
+ }[];
20070
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
20071
+ admins: string[];
20072
+ /** @description Object is related with this account */
20073
+ account: string;
20074
+ /**
20075
+ * @description OrganizationMetadata
20076
+ * @default {}
20077
+ */
20078
+ metadata: {
20079
+ [key: string]: unknown;
20080
+ };
20081
+ /** @description Organization creation date */
20082
+ createdAt: string;
20083
+ /** @description Organization updated date */
20084
+ updatedAt?: string;
20085
+ };
20086
+ };
20087
+ };
20088
+ /**
20089
+ * @description `invalid_email_domain` — Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.
20090
+ *
20091
+ * `public_email_domain` — A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.
20092
+ *
20093
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
20094
+ */
20095
+ 400: {
20096
+ headers: {
20097
+ [name: string]: unknown;
20098
+ };
20099
+ content: {
20100
+ "application/json": components["schemas"]["ErrorResponse"] & {
20101
+ /** @enum {string} */
20102
+ error_code?: "invalid_email_domain" | "public_email_domain" | "validation_error";
20103
+ };
20104
+ };
20105
+ };
20106
+ /** @description `unauthorized` — The request carries no valid credentials. */
20107
+ 401: {
20108
+ headers: {
20109
+ [name: string]: unknown;
20110
+ };
20111
+ content: {
20112
+ "application/json": components["schemas"]["ErrorResponse"] & {
20113
+ /** @enum {string} */
20114
+ error_code?: "unauthorized";
20115
+ };
20116
+ };
20117
+ };
20118
+ /**
20119
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
20120
+ *
20121
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
20122
+ *
20123
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
20124
+ */
20125
+ 403: {
20126
+ headers: {
20127
+ [name: string]: unknown;
20128
+ };
20129
+ content: {
20130
+ "application/json": components["schemas"]["ErrorResponse"] & {
20131
+ /** @enum {string} */
20132
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
20133
+ };
20134
+ };
20135
+ };
20136
+ /**
20137
+ * @description `organization_not_found` — No organization with that id in this account.
20138
+ *
20139
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
20140
+ */
20141
+ 404: {
20142
+ headers: {
20143
+ [name: string]: unknown;
20144
+ };
20145
+ content: {
20146
+ "application/json": components["schemas"]["ErrorResponse"] & {
20147
+ /** @enum {string} */
20148
+ error_code?: "organization_not_found" | "account_not_found";
20149
+ };
20150
+ };
20151
+ };
20152
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
20153
+ 429: {
20154
+ headers: {
20155
+ [name: string]: unknown;
20156
+ };
20157
+ content: {
20158
+ "application/json": components["schemas"]["ErrorResponse"] & {
20159
+ /** @enum {string} */
20160
+ error_code?: "too_many_requests";
20161
+ };
20162
+ };
20163
+ };
20164
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20165
+ 500: {
20166
+ headers: {
20167
+ [name: string]: unknown;
20168
+ };
20169
+ content: {
20170
+ "application/json": components["schemas"]["ErrorResponse"] & {
20171
+ /** @enum {string} */
20172
+ error_code?: "internal_error";
20173
+ };
20174
+ };
20175
+ };
20176
+ };
20177
+ };
20178
+ "organization/verifyDomain": {
20179
+ parameters: {
20180
+ query?: never;
20181
+ header?: never;
20182
+ path: {
20183
+ organization_id: string;
20184
+ domain: string;
20185
+ };
20186
+ cookie?: never;
20187
+ };
20188
+ requestBody?: never;
20189
+ responses: {
20190
+ /** @description Default Response */
20191
+ 200: {
20192
+ headers: {
20193
+ [name: string]: unknown;
20194
+ };
20195
+ content: {
20196
+ "application/json": {
20197
+ /** @description Organization */
20198
+ organization: {
20199
+ /** @description Organization ID */
20200
+ id: string;
20201
+ /**
20202
+ * @description Human-readable name of the organization.
20203
+ * @example Acme Inc.
20204
+ */
20205
+ name: string;
20206
+ /**
20207
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
20208
+ * @example acme-inc
20209
+ */
20210
+ slug: string;
20211
+ /** @description Optional free-form description. */
20212
+ description: string | null;
20213
+ /** @description Optional URL of the organization logo. */
20214
+ logo_url: string | null;
20215
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
20216
+ domains: {
20217
+ /** @example acme.com */
20218
+ domain: string;
20219
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
20220
+ verification_token: string;
20221
+ /**
20222
+ * Format: date-time
20223
+ * @description When the TXT record was found. `null` = not verified.
20224
+ */
20225
+ verified_at: string | null;
20226
+ }[];
20227
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
20228
+ admins: string[];
20229
+ /** @description Object is related with this account */
20230
+ account: string;
20231
+ /**
20232
+ * @description OrganizationMetadata
20233
+ * @default {}
20234
+ */
20235
+ metadata: {
20236
+ [key: string]: unknown;
20237
+ };
20238
+ /** @description Organization creation date */
20239
+ createdAt: string;
20240
+ /** @description Organization updated date */
20241
+ updatedAt?: string;
20242
+ };
20243
+ /** @description `null` when the domain was already verified. */
20244
+ record: {
20245
+ /** @enum {string} */
20246
+ type: "TXT";
20247
+ host: string;
20248
+ expected: string;
20249
+ observed: string[];
20250
+ ok: boolean;
20251
+ } | null;
20252
+ };
20253
+ };
20254
+ };
20255
+ /**
20256
+ * @description `organization_domain_unverified` — The TXT record was not found or does not hold the expected value yet. `details.record` says what was expected and what resolves now; DNS can take a few minutes to propagate.
20257
+ *
20258
+ * `invalid_email_domain` — Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.
20259
+ *
20260
+ * `public_email_domain` — A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.
20261
+ *
20262
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
20263
+ */
20264
+ 400: {
20265
+ headers: {
20266
+ [name: string]: unknown;
20267
+ };
20268
+ content: {
20269
+ "application/json": components["schemas"]["ErrorResponse"] & {
20270
+ /** @enum {string} */
20271
+ error_code?: "organization_domain_unverified" | "invalid_email_domain" | "public_email_domain" | "validation_error";
20272
+ };
20273
+ };
20274
+ };
20275
+ /** @description `unauthorized` — The request carries no valid credentials. */
20276
+ 401: {
20277
+ headers: {
20278
+ [name: string]: unknown;
20279
+ };
20280
+ content: {
20281
+ "application/json": components["schemas"]["ErrorResponse"] & {
20282
+ /** @enum {string} */
20283
+ error_code?: "unauthorized";
20284
+ };
20285
+ };
20286
+ };
20287
+ /** @description `plan_required` — The setting requires a higher plan. `message` says which. */
20288
+ 402: {
20289
+ headers: {
20290
+ [name: string]: unknown;
20291
+ };
20292
+ content: {
20293
+ "application/json": components["schemas"]["ErrorResponse"] & {
20294
+ /** @enum {string} */
20295
+ error_code?: "plan_required";
20296
+ };
20297
+ };
20298
+ };
20299
+ /**
20300
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
20301
+ *
20302
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
20303
+ *
20304
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
20305
+ */
20306
+ 403: {
20307
+ headers: {
20308
+ [name: string]: unknown;
20309
+ };
20310
+ content: {
20311
+ "application/json": components["schemas"]["ErrorResponse"] & {
20312
+ /** @enum {string} */
20313
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
20314
+ };
20315
+ };
20316
+ };
20317
+ /**
20318
+ * @description `organization_not_found` — No organization with that id in this account.
20319
+ *
20320
+ * `organization_domain_not_found` — The organization has no such domain.
20321
+ *
20322
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
20323
+ */
20324
+ 404: {
20325
+ headers: {
20326
+ [name: string]: unknown;
20327
+ };
20328
+ content: {
20329
+ "application/json": components["schemas"]["ErrorResponse"] & {
20330
+ /** @enum {string} */
20331
+ error_code?: "organization_not_found" | "organization_domain_not_found" | "account_not_found";
20332
+ };
20333
+ };
20334
+ };
20335
+ /** @description `organization_domain_taken` — Another organization of this tenant already verified this domain. A domain belongs to one organization. */
20336
+ 409: {
20337
+ headers: {
20338
+ [name: string]: unknown;
20339
+ };
20340
+ content: {
20341
+ "application/json": components["schemas"]["ErrorResponse"] & {
20342
+ /** @enum {string} */
20343
+ error_code?: "organization_domain_taken";
20344
+ };
20345
+ };
20346
+ };
20347
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
20348
+ 429: {
20349
+ headers: {
20350
+ [name: string]: unknown;
20351
+ };
20352
+ content: {
20353
+ "application/json": components["schemas"]["ErrorResponse"] & {
20354
+ /** @enum {string} */
20355
+ error_code?: "too_many_requests";
20356
+ };
20357
+ };
20358
+ };
20359
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20360
+ 500: {
20361
+ headers: {
20362
+ [name: string]: unknown;
20363
+ };
20364
+ content: {
20365
+ "application/json": components["schemas"]["ErrorResponse"] & {
20366
+ /** @enum {string} */
20367
+ error_code?: "internal_error";
20368
+ };
20369
+ };
20370
+ };
20371
+ /** @description `plan_unavailable` — The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute. */
20372
+ 503: {
20373
+ headers: {
20374
+ [name: string]: unknown;
20375
+ };
20376
+ content: {
20377
+ "application/json": components["schemas"]["ErrorResponse"] & {
20378
+ /** @enum {string} */
20379
+ error_code?: "plan_unavailable";
20380
+ };
20381
+ };
20382
+ };
20383
+ };
20384
+ };
20385
+ "organization/removeDomain": {
20386
+ parameters: {
20387
+ query?: never;
20388
+ header?: never;
20389
+ path: {
20390
+ organization_id: string;
20391
+ domain: string;
20392
+ };
20393
+ cookie?: never;
20394
+ };
20395
+ requestBody?: never;
20396
+ responses: {
20397
+ /** @description Organization */
20398
+ 200: {
20399
+ headers: {
20400
+ [name: string]: unknown;
20401
+ };
20402
+ content: {
20403
+ "application/json": {
20404
+ /** @description Organization ID */
20405
+ id: string;
20406
+ /**
20407
+ * @description Human-readable name of the organization.
20408
+ * @example Acme Inc.
20409
+ */
20410
+ name: string;
20411
+ /**
20412
+ * @description URL-safe identifier derived from `name`. Unique within the tenant.
20413
+ * @example acme-inc
20414
+ */
20415
+ slug: string;
20416
+ /** @description Optional free-form description. */
20417
+ description: string | null;
20418
+ /** @description Optional URL of the organization logo. */
20419
+ logo_url: string | null;
20420
+ /** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
20421
+ domains: {
20422
+ /** @example acme.com */
20423
+ domain: string;
20424
+ /** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
20425
+ verification_token: string;
20426
+ /**
20427
+ * Format: date-time
20428
+ * @description When the TXT record was found. `null` = not verified.
20429
+ */
20430
+ verified_at: string | null;
20431
+ }[];
20432
+ /** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
20433
+ admins: string[];
20434
+ /** @description Object is related with this account */
20435
+ account: string;
20436
+ /**
20437
+ * @description OrganizationMetadata
20438
+ * @default {}
20439
+ */
20440
+ metadata: {
20441
+ [key: string]: unknown;
20442
+ };
20443
+ /** @description Organization creation date */
20444
+ createdAt: string;
20445
+ /** @description Organization updated date */
20446
+ updatedAt?: string;
20447
+ };
20448
+ };
20449
+ };
20450
+ /** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
20451
+ 400: {
20452
+ headers: {
20453
+ [name: string]: unknown;
20454
+ };
20455
+ content: {
20456
+ "application/json": components["schemas"]["ErrorResponse"] & {
20457
+ /** @enum {string} */
20458
+ error_code?: "validation_error";
20459
+ };
20460
+ };
20461
+ };
20462
+ /** @description `unauthorized` — The request carries no valid credentials. */
20463
+ 401: {
20464
+ headers: {
20465
+ [name: string]: unknown;
20466
+ };
20467
+ content: {
20468
+ "application/json": components["schemas"]["ErrorResponse"] & {
20469
+ /** @enum {string} */
20470
+ error_code?: "unauthorized";
20471
+ };
20472
+ };
20473
+ };
20474
+ /**
20475
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
20476
+ *
20477
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
20478
+ *
20479
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
20480
+ */
20481
+ 403: {
20482
+ headers: {
20483
+ [name: string]: unknown;
20484
+ };
20485
+ content: {
20486
+ "application/json": components["schemas"]["ErrorResponse"] & {
20487
+ /** @enum {string} */
20488
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
20489
+ };
20490
+ };
20491
+ };
20492
+ /**
20493
+ * @description `organization_not_found` — No organization with that id in this account.
20494
+ *
20495
+ * `organization_domain_not_found` — The organization has no such domain.
20496
+ *
20497
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
20498
+ */
20499
+ 404: {
20500
+ headers: {
20501
+ [name: string]: unknown;
20502
+ };
20503
+ content: {
20504
+ "application/json": components["schemas"]["ErrorResponse"] & {
20505
+ /** @enum {string} */
20506
+ error_code?: "organization_not_found" | "organization_domain_not_found" | "account_not_found";
20507
+ };
20508
+ };
20509
+ };
20510
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
20511
+ 429: {
20512
+ headers: {
20513
+ [name: string]: unknown;
20514
+ };
20515
+ content: {
20516
+ "application/json": components["schemas"]["ErrorResponse"] & {
20517
+ /** @enum {string} */
20518
+ error_code?: "too_many_requests";
20519
+ };
20520
+ };
20521
+ };
20522
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20523
+ 500: {
20524
+ headers: {
20525
+ [name: string]: unknown;
20526
+ };
20527
+ content: {
20528
+ "application/json": components["schemas"]["ErrorResponse"] & {
20529
+ /** @enum {string} */
20530
+ error_code?: "internal_error";
20531
+ };
20532
+ };
20533
+ };
20534
+ };
20535
+ };
20536
+ "teammember/list": {
20537
+ parameters: {
20538
+ query?: {
20539
+ /** @description Number of items per page (max 200) */
20540
+ pageSize?: number;
20541
+ /** @description Cursor for next page */
20542
+ cursor?: string;
20543
+ /** @description Cursor returned by the previous page */
20544
+ next?: string;
20545
+ /** @description Exact match on `user`. Equivalent to `?query=user:<value>`. */
20546
+ user?: string;
20547
+ /** @description Exact match on `team`. Equivalent to `?query=team:<value>`. */
20548
+ team?: string;
20549
+ /** @description Filter using a FaableQL query */
20550
+ query?: string;
20551
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
20552
+ expand?: ("user" | "team" | "roles")[];
20553
+ };
20554
+ header?: never;
20555
+ path?: never;
20556
+ cookie?: never;
20557
+ };
20558
+ requestBody?: never;
20559
+ responses: {
20560
+ /** @description Default Response */
20561
+ 200: {
20562
+ headers: {
20563
+ [name: string]: unknown;
20564
+ };
20565
+ content: {
20566
+ "application/json": {
20567
+ next: string | null;
20568
+ results: components["schemas"]["TeamMember"][];
20569
+ };
20570
+ };
20571
+ };
20572
+ /**
20573
+ * @description `invalid_query` — The `?query=` FaableQL expression could not be parsed.
20574
+ *
20575
+ * `invalid_expand` — An `?expand=` path is not allowed on this resource.
20576
+ *
20577
+ * `search_not_supported` — This resource does not support `?search=`.
20578
+ *
20579
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
18495
20580
  */
18496
20581
  400: {
18497
20582
  headers: {
@@ -24211,8 +26296,11 @@ export interface operations {
24211
26296
  * - `team.invite.created`: An invitation to join a team was created.
24212
26297
  * - `team.invite.revoked`: A pending team invitation was revoked.
24213
26298
  * - `team.invite.accepted`: A team invitation was accepted.
26299
+ * - `organization.created`: An organization was created.
26300
+ * - `organization.updated`: An organization was updated (name, settings or admins).
26301
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24214
26302
  *
24215
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
26303
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24216
26304
  */
24217
26305
  events: string[];
24218
26306
  /** @enum {string} */
@@ -24286,8 +26374,11 @@ export interface operations {
24286
26374
  * - `team.invite.created`: An invitation to join a team was created.
24287
26375
  * - `team.invite.revoked`: A pending team invitation was revoked.
24288
26376
  * - `team.invite.accepted`: A team invitation was accepted.
26377
+ * - `organization.created`: An organization was created.
26378
+ * - `organization.updated`: An organization was updated (name, settings or admins).
26379
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24289
26380
  *
24290
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
26381
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24291
26382
  */
24292
26383
  events: string[];
24293
26384
  /** @enum {string} */
@@ -24477,8 +26568,11 @@ export interface operations {
24477
26568
  * - `team.invite.created`: An invitation to join a team was created.
24478
26569
  * - `team.invite.revoked`: A pending team invitation was revoked.
24479
26570
  * - `team.invite.accepted`: A team invitation was accepted.
26571
+ * - `organization.created`: An organization was created.
26572
+ * - `organization.updated`: An organization was updated (name, settings or admins).
26573
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24480
26574
  *
24481
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
26575
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24482
26576
  */
24483
26577
  events: string[];
24484
26578
  /** @enum {string} */
@@ -24656,8 +26750,11 @@ export interface operations {
24656
26750
  * - `team.invite.created`: An invitation to join a team was created.
24657
26751
  * - `team.invite.revoked`: A pending team invitation was revoked.
24658
26752
  * - `team.invite.accepted`: A team invitation was accepted.
26753
+ * - `organization.created`: An organization was created.
26754
+ * - `organization.updated`: An organization was updated (name, settings or admins).
26755
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24659
26756
  *
24660
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
26757
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24661
26758
  */
24662
26759
  events?: string[];
24663
26760
  /** @enum {string} */
@@ -24731,8 +26828,11 @@ export interface operations {
24731
26828
  * - `team.invite.created`: An invitation to join a team was created.
24732
26829
  * - `team.invite.revoked`: A pending team invitation was revoked.
24733
26830
  * - `team.invite.accepted`: A team invitation was accepted.
26831
+ * - `organization.created`: An organization was created.
26832
+ * - `organization.updated`: An organization was updated (name, settings or admins).
26833
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24734
26834
  *
24735
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
26835
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24736
26836
  */
24737
26837
  events: string[];
24738
26838
  /** @enum {string} */
@@ -24928,8 +27028,11 @@ export interface operations {
24928
27028
  * - `team.invite.created`: An invitation to join a team was created.
24929
27029
  * - `team.invite.revoked`: A pending team invitation was revoked.
24930
27030
  * - `team.invite.accepted`: A team invitation was accepted.
27031
+ * - `organization.created`: An organization was created.
27032
+ * - `organization.updated`: An organization was updated (name, settings or admins).
27033
+ * - `organization.deleted`: An organization was deleted. Its teams are no longer in any organization; no `team.updated` is sent for them.
24931
27034
  *
24932
- * `team.*` payloads are notices, not state: they carry ids (`team_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
27035
+ * `team.*` and `organization.*` payloads are notices, not state: they carry ids (`team_id`, `organization_id`, `user_id`, `roles`, `invite_id`...) and the receiver reads whatever else it needs. Use the delivery id (`x-faable-delivery`) to deduplicate: retries keep it.
24933
27036
  */
24934
27037
  events: string[];
24935
27038
  /** @enum {string} */
@@ -29848,6 +31951,18 @@ export interface operations {
29848
31951
  };
29849
31952
  };
29850
31953
  };
31954
+ /** @description `registration_disabled` — Dynamic client registration is turned off for this tenant. Create the client from the dashboard or the Management API, or turn on `dynamic_client_registration_enabled`. */
31955
+ 403: {
31956
+ headers: {
31957
+ [name: string]: unknown;
31958
+ };
31959
+ content: {
31960
+ "application/json": components["schemas"]["ErrorResponse"] & {
31961
+ /** @enum {string} */
31962
+ error_code?: "registration_disabled";
31963
+ };
31964
+ };
31965
+ };
29851
31966
  /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
29852
31967
  404: {
29853
31968
  headers: {