@faable/auth-sdk 2.7.82 → 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.
- package/dist/api/generated-client.d.ts +223 -3
- package/dist/api/generated-client.js +75 -0
- package/dist/api/types.d.ts +673 -1
- package/dist/version.js +2 -2
- package/package.json +1 -1
- package/spec/openapi.json +1475 -251
package/spec/openapi.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "@faablecloud/auth",
|
|
5
5
|
"description": "Auth Platform made by Faable. Manage Users and Roles",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.66.0",
|
|
7
7
|
"license": {
|
|
8
8
|
"name": "private",
|
|
9
9
|
"url": "https://faable.com/docs/platform/privacy-policy"
|
|
@@ -3673,6 +3673,7 @@
|
|
|
3673
3673
|
"slug",
|
|
3674
3674
|
"description",
|
|
3675
3675
|
"logo_url",
|
|
3676
|
+
"domains",
|
|
3676
3677
|
"admins",
|
|
3677
3678
|
"account",
|
|
3678
3679
|
"createdAt"
|
|
@@ -3702,6 +3703,34 @@
|
|
|
3702
3703
|
"description": "Optional URL of the organization logo.",
|
|
3703
3704
|
"nullable": true
|
|
3704
3705
|
},
|
|
3706
|
+
"domains": {
|
|
3707
|
+
"type": "array",
|
|
3708
|
+
"items": {
|
|
3709
|
+
"type": "object",
|
|
3710
|
+
"required": [
|
|
3711
|
+
"domain",
|
|
3712
|
+
"verification_token",
|
|
3713
|
+
"verified_at"
|
|
3714
|
+
],
|
|
3715
|
+
"properties": {
|
|
3716
|
+
"domain": {
|
|
3717
|
+
"type": "string",
|
|
3718
|
+
"example": "acme.com"
|
|
3719
|
+
},
|
|
3720
|
+
"verification_token": {
|
|
3721
|
+
"type": "string",
|
|
3722
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
3723
|
+
},
|
|
3724
|
+
"verified_at": {
|
|
3725
|
+
"type": "string",
|
|
3726
|
+
"format": "date-time",
|
|
3727
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
3728
|
+
"nullable": true
|
|
3729
|
+
}
|
|
3730
|
+
}
|
|
3731
|
+
},
|
|
3732
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
3733
|
+
},
|
|
3705
3734
|
"admins": {
|
|
3706
3735
|
"type": "array",
|
|
3707
3736
|
"items": {
|
|
@@ -7780,7 +7809,7 @@
|
|
|
7780
7809
|
},
|
|
7781
7810
|
"ErrorCode": {
|
|
7782
7811
|
"type": "string",
|
|
7783
|
-
"description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `email_sender_domain_not_allowed` (400): The sender address is not in a domain this platform signs email for (AUTH_EMAIL_SENDER_DOMAINS).\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `invalid_canonical_host` (400): `canonical_host` must be this account's own platform host or one of its verified custom domains.\n- `canonical_host_breaks_passkeys` (400): `canonical_host` is outside the account's current WebAuthn RP ID — every passkey already enrolled would stop working. Set `webauthn_rp_id` in the same request to a suffix that covers both.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `session_already_revoked` (409): The session was already revoked.\n- `invalid_token` (401): The bearer token is missing, malformed, expired or has no subject.\n- `not_owner` (403): The caller may only perform this operation on their own user.\n- `user_suspended` (403): The user is suspended and cannot sign in or be modified.\n- `invalid_credentials` (400): The email/username or password is incorrect.\n- `login_denied` (401): A post-login Action denied the sign-in. `message` carries the reason it gave. On token grants it is a 403 with `error: invalid_grant`.\n- `signup_denied` (403): A pre-signup Action or an active block denied the sign-up. `message` carries the reason.\n- `client_credentials_denied` (401): An Action denied the client_credentials grant. `message` carries the reason.\n- `m2m_quota_exceeded` (402): The project used the machine-to-machine tokens its plan includes this month. Free is capped; Hobby and Pro are billed per token instead.\n- `signup_disabled` (403): Self-service sign-up is disabled on this connection.\n- `email_taken` (409): Another user in this account already uses that email.\n- `username_taken` (409): Another user of this database connection already uses that username.\n- `invalid_username` (400): The username is empty, or contains an `@` or whitespace. `message` says which.\n- `invalid_email` (400): The email address is not valid.\n- `invalid_name` (400): The name contains a link. `message` says which field.\n- `same_email` (400): The new email is the same as the current one.\n- `user_has_no_email` (400): The operation needs an email but the user has none.\n- `password_too_weak` (400): The password does not meet the connection policy. `message` lists each unmet rule.\n- `invalid_password_hash` (400): The imported password hash cannot be read, or its cost is above what a login can afford. `message` names the field.\n- `weak_password_hash` (400): The imported password hash uses a fast digest (MD5, SHA-1, SHA-2) or a cost below the minimum. `message` says which.\n- `invalid_code` (400): The verification code is wrong, expired or already used.\n- `invalid_phone` (400): The phone number is not E.164 and could not be resolved with the account default country. Include the country code.\n- `phone_changed` (400): The phone on the user changed after the code was sent. Start again.\n- `phone_already_verified` (409): The user already has a verified phone; the number cannot be swapped from the screen.\n- `sms_unavailable` (409): This account cannot send SMS right now. The suffix says why: `sms_unavailable:plan`, `:quota`, `:provider`.\n- `sms_failed` (409): The SMS provider rejected the message.\n- `invalid_state` (400): The `state` is missing, expired, or does not describe a resumable step.\n- `state_mismatch` (401): The `state` belongs to another account, session, client or ceremony.\n- `invalid_ticket` (400): The ticket does not exist or is not the kind this endpoint accepts.\n- `ticket_used` (400): The ticket was already consumed.\n- `ticket_expired` (400): The ticket is past its expiry.\n- `ticket_not_found` (404): No ticket with that id belongs to this user.\n- `credential_not_found` (404): The user has no password credential on this connection.\n- `invalid_link` (400): The magic link is malformed.\n- `expired_link` (400): The magic link token was not found or has expired.\n- `invalid_otp` (401): The one-time password is wrong or expired.\n- `invalid_client` (400): The `client_id` in the request does not name a client of this account.\n- `client_not_found` (404): No client with that `client_id`.\n- `client_mismatch` (401): The client belongs to a different account.\n- `invalid_client_metadata` (400): Dynamic client registration rejected a field (RFC 7591). `message` names it.\n- `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.\n- `no_database_connection` (400): The tenant has no database connection, so there is nowhere to store a password. Create one and retry.\n- `connection_required` (400): No connection was given and the client has no `default_connection`.\n- `connection_misconfigured` (400): The connection is missing settings needed to talk to its provider.\n- `passwordless_unavailable` (400): No passwordless connection is configured or enabled for this client.\n- `ambiguous_connection` (400): Several connections match; pass `connection_id`.\n- `invalid_redirect_uri` (400): The redirect URI is not registered for the client.\n- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `invalid_invite_url` (400): An invite's `accept_url` or `redirect_uri` is not an http(s) URL at an origin of this tenant's client callbacks or `callback_hostnames`, or it carries a fragment.\n- `invite_email_mismatch` (403): The invite is for another email address than the accepting user's. `details.invited_email` shows it masked.\n- `invite_email_unverified` (403): The accepting user's email matches the invite but is not verified yet.\n- `invite_not_found` (404): No invite with that id in this account.\n- `invite_used` (400): The invite was already accepted.\n- `already_member` (400): The user is already a member of the team.\n- `not_a_member` (404): The user is not a member of the team.\n- `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`.\n- `organization_not_found` (404): No organization with that id in this account.\n- `invalid_user` (400): The user does not exist in this account.\n- `not_an_organization_admin` (404): The user is not an admin of the organization.\n- `last_organization_admin` (409): An organization keeps at least one admin. Add another admin before removing this one.\n- `team_id_unavailable` (409): The team id cannot be used in this tenant. Pick another id or let the API generate one.\n- `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.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `flow_not_found` (400): The login flow does not exist in this account.\n- `revision_not_found` (404): The revision is not in the flow history.\n- `invalid_webhook_event` (400): An event is not in the webhook event catalog. `message` and `details.valid_events` list the valid ones.\n- `invalid_webhook_url` (400): The webhook URL must be an absolute `https` URL.\n- `not_a_webhook` (400): The operation only applies to `webhook` subscriptions.\n- `delivery_not_found` (404): No webhook delivery with that id for this subscription.\n- `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.",
|
|
7812
|
+
"description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `email_sender_domain_not_allowed` (400): The sender address is not in a domain this platform signs email for (AUTH_EMAIL_SENDER_DOMAINS).\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `invalid_canonical_host` (400): `canonical_host` must be this account's own platform host or one of its verified custom domains.\n- `canonical_host_breaks_passkeys` (400): `canonical_host` is outside the account's current WebAuthn RP ID — every passkey already enrolled would stop working. Set `webauthn_rp_id` in the same request to a suffix that covers both.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `session_already_revoked` (409): The session was already revoked.\n- `invalid_token` (401): The bearer token is missing, malformed, expired or has no subject.\n- `not_owner` (403): The caller may only perform this operation on their own user.\n- `user_suspended` (403): The user is suspended and cannot sign in or be modified.\n- `invalid_credentials` (400): The email/username or password is incorrect.\n- `login_denied` (401): A post-login Action denied the sign-in. `message` carries the reason it gave. On token grants it is a 403 with `error: invalid_grant`.\n- `signup_denied` (403): A pre-signup Action or an active block denied the sign-up. `message` carries the reason.\n- `client_credentials_denied` (401): An Action denied the client_credentials grant. `message` carries the reason.\n- `m2m_quota_exceeded` (402): The project used the machine-to-machine tokens its plan includes this month. Free is capped; Hobby and Pro are billed per token instead.\n- `signup_disabled` (403): Self-service sign-up is disabled on this connection.\n- `email_taken` (409): Another user in this account already uses that email.\n- `username_taken` (409): Another user of this database connection already uses that username.\n- `invalid_username` (400): The username is empty, or contains an `@` or whitespace. `message` says which.\n- `invalid_email` (400): The email address is not valid.\n- `invalid_name` (400): The name contains a link. `message` says which field.\n- `same_email` (400): The new email is the same as the current one.\n- `user_has_no_email` (400): The operation needs an email but the user has none.\n- `password_too_weak` (400): The password does not meet the connection policy. `message` lists each unmet rule.\n- `invalid_password_hash` (400): The imported password hash cannot be read, or its cost is above what a login can afford. `message` names the field.\n- `weak_password_hash` (400): The imported password hash uses a fast digest (MD5, SHA-1, SHA-2) or a cost below the minimum. `message` says which.\n- `invalid_code` (400): The verification code is wrong, expired or already used.\n- `invalid_phone` (400): The phone number is not E.164 and could not be resolved with the account default country. Include the country code.\n- `phone_changed` (400): The phone on the user changed after the code was sent. Start again.\n- `phone_already_verified` (409): The user already has a verified phone; the number cannot be swapped from the screen.\n- `sms_unavailable` (409): This account cannot send SMS right now. The suffix says why: `sms_unavailable:plan`, `:quota`, `:provider`.\n- `sms_failed` (409): The SMS provider rejected the message.\n- `invalid_state` (400): The `state` is missing, expired, or does not describe a resumable step.\n- `state_mismatch` (401): The `state` belongs to another account, session, client or ceremony.\n- `invalid_ticket` (400): The ticket does not exist or is not the kind this endpoint accepts.\n- `ticket_used` (400): The ticket was already consumed.\n- `ticket_expired` (400): The ticket is past its expiry.\n- `ticket_not_found` (404): No ticket with that id belongs to this user.\n- `credential_not_found` (404): The user has no password credential on this connection.\n- `invalid_link` (400): The magic link is malformed.\n- `expired_link` (400): The magic link token was not found or has expired.\n- `invalid_otp` (401): The one-time password is wrong or expired.\n- `invalid_client` (400): The `client_id` in the request does not name a client of this account.\n- `client_not_found` (404): No client with that `client_id`.\n- `client_mismatch` (401): The client belongs to a different account.\n- `invalid_client_metadata` (400): Dynamic client registration rejected a field (RFC 7591). `message` names it.\n- `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.\n- `no_database_connection` (400): The tenant has no database connection, so there is nowhere to store a password. Create one and retry.\n- `connection_required` (400): No connection was given and the client has no `default_connection`.\n- `connection_misconfigured` (400): The connection is missing settings needed to talk to its provider.\n- `passwordless_unavailable` (400): No passwordless connection is configured or enabled for this client.\n- `ambiguous_connection` (400): Several connections match; pass `connection_id`.\n- `invalid_redirect_uri` (400): The redirect URI is not registered for the client.\n- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `invalid_invite_url` (400): An invite's `accept_url` or `redirect_uri` is not an http(s) URL at an origin of this tenant's client callbacks or `callback_hostnames`, or it carries a fragment.\n- `invite_email_mismatch` (403): The invite is for another email address than the accepting user's. `details.invited_email` shows it masked.\n- `invite_email_unverified` (403): The accepting user's email matches the invite but is not verified yet.\n- `invite_not_found` (404): No invite with that id in this account.\n- `invite_used` (400): The invite was already accepted.\n- `already_member` (400): The user is already a member of the team.\n- `not_a_member` (404): The user is not a member of the team.\n- `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`.\n- `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.\n- `public_email_domain` (400): A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.\n- `organization_domain_not_found` (404): The organization has no such domain.\n- `organization_domain_taken` (409): Another organization of this tenant already verified this domain. A domain belongs to one organization.\n- `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.\n- `plan_unavailable` (503): The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.\n- `organization_not_found` (404): No organization with that id in this account.\n- `invalid_user` (400): The user does not exist in this account.\n- `not_an_organization_admin` (404): The user is not an admin of the organization.\n- `last_organization_admin` (409): An organization keeps at least one admin. Add another admin before removing this one.\n- `team_id_unavailable` (409): The team id cannot be used in this tenant. Pick another id or let the API generate one.\n- `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.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `flow_not_found` (400): The login flow does not exist in this account.\n- `revision_not_found` (404): The revision is not in the flow history.\n- `invalid_webhook_event` (400): An event is not in the webhook event catalog. `message` and `details.valid_events` list the valid ones.\n- `invalid_webhook_url` (400): The webhook URL must be an absolute `https` URL.\n- `not_a_webhook` (400): The operation only applies to `webhook` subscriptions.\n- `delivery_not_found` (404): No webhook delivery with that id for this subscription.\n- `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.",
|
|
7784
7813
|
"enum": [
|
|
7785
7814
|
"bad_request",
|
|
7786
7815
|
"validation_error",
|
|
@@ -7901,6 +7930,12 @@
|
|
|
7901
7930
|
"already_member",
|
|
7902
7931
|
"not_a_member",
|
|
7903
7932
|
"registration_disabled",
|
|
7933
|
+
"invalid_email_domain",
|
|
7934
|
+
"public_email_domain",
|
|
7935
|
+
"organization_domain_not_found",
|
|
7936
|
+
"organization_domain_taken",
|
|
7937
|
+
"organization_domain_unverified",
|
|
7938
|
+
"plan_unavailable",
|
|
7904
7939
|
"organization_not_found",
|
|
7905
7940
|
"invalid_user",
|
|
7906
7941
|
"not_an_organization_admin",
|
|
@@ -35775,6 +35810,7 @@
|
|
|
35775
35810
|
"slug",
|
|
35776
35811
|
"description",
|
|
35777
35812
|
"logo_url",
|
|
35813
|
+
"domains",
|
|
35778
35814
|
"admins",
|
|
35779
35815
|
"account",
|
|
35780
35816
|
"createdAt"
|
|
@@ -35804,258 +35840,315 @@
|
|
|
35804
35840
|
"description": "Optional URL of the organization logo.",
|
|
35805
35841
|
"nullable": true
|
|
35806
35842
|
},
|
|
35807
|
-
"
|
|
35843
|
+
"domains": {
|
|
35808
35844
|
"type": "array",
|
|
35809
35845
|
"items": {
|
|
35810
|
-
"type": "
|
|
35811
|
-
|
|
35812
|
-
|
|
35813
|
-
|
|
35814
|
-
|
|
35815
|
-
|
|
35816
|
-
|
|
35817
|
-
|
|
35818
|
-
|
|
35819
|
-
|
|
35820
|
-
|
|
35821
|
-
|
|
35822
|
-
|
|
35823
|
-
|
|
35824
|
-
|
|
35825
|
-
|
|
35826
|
-
|
|
35827
|
-
|
|
35828
|
-
|
|
35829
|
-
|
|
35830
|
-
|
|
35831
|
-
"description": "Organization updated date"
|
|
35832
|
-
}
|
|
35833
|
-
},
|
|
35834
|
-
"description": "Organization"
|
|
35835
|
-
}
|
|
35836
|
-
}
|
|
35837
|
-
}
|
|
35838
|
-
},
|
|
35839
|
-
"400": {
|
|
35840
|
-
"description": "`already_exists` — A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
35841
|
-
"content": {
|
|
35842
|
-
"application/json": {
|
|
35843
|
-
"schema": {
|
|
35844
|
-
"allOf": [
|
|
35845
|
-
{
|
|
35846
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35847
|
-
},
|
|
35848
|
-
{
|
|
35849
|
-
"type": "object",
|
|
35850
|
-
"properties": {
|
|
35851
|
-
"error_code": {
|
|
35852
|
-
"type": "string",
|
|
35853
|
-
"enum": [
|
|
35854
|
-
"already_exists",
|
|
35855
|
-
"validation_error"
|
|
35856
|
-
]
|
|
35857
|
-
}
|
|
35858
|
-
}
|
|
35859
|
-
}
|
|
35860
|
-
]
|
|
35861
|
-
}
|
|
35862
|
-
}
|
|
35863
|
-
}
|
|
35864
|
-
},
|
|
35865
|
-
"401": {
|
|
35866
|
-
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
35867
|
-
"content": {
|
|
35868
|
-
"application/json": {
|
|
35869
|
-
"schema": {
|
|
35870
|
-
"allOf": [
|
|
35871
|
-
{
|
|
35872
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35873
|
-
},
|
|
35874
|
-
{
|
|
35875
|
-
"type": "object",
|
|
35876
|
-
"properties": {
|
|
35877
|
-
"error_code": {
|
|
35878
|
-
"type": "string",
|
|
35879
|
-
"enum": [
|
|
35880
|
-
"unauthorized"
|
|
35881
|
-
]
|
|
35882
|
-
}
|
|
35883
|
-
}
|
|
35884
|
-
}
|
|
35885
|
-
]
|
|
35886
|
-
}
|
|
35887
|
-
}
|
|
35888
|
-
}
|
|
35889
|
-
},
|
|
35890
|
-
"403": {
|
|
35891
|
-
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
35892
|
-
"content": {
|
|
35893
|
-
"application/json": {
|
|
35894
|
-
"schema": {
|
|
35895
|
-
"allOf": [
|
|
35896
|
-
{
|
|
35897
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35898
|
-
},
|
|
35899
|
-
{
|
|
35900
|
-
"type": "object",
|
|
35901
|
-
"properties": {
|
|
35902
|
-
"error_code": {
|
|
35903
|
-
"type": "string",
|
|
35904
|
-
"enum": [
|
|
35905
|
-
"forbidden",
|
|
35906
|
-
"insufficient_scope",
|
|
35907
|
-
"user_suspended"
|
|
35908
|
-
]
|
|
35909
|
-
}
|
|
35910
|
-
}
|
|
35911
|
-
}
|
|
35912
|
-
]
|
|
35913
|
-
}
|
|
35914
|
-
}
|
|
35915
|
-
}
|
|
35916
|
-
},
|
|
35917
|
-
"404": {
|
|
35918
|
-
"description": "`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
35919
|
-
"content": {
|
|
35920
|
-
"application/json": {
|
|
35921
|
-
"schema": {
|
|
35922
|
-
"allOf": [
|
|
35923
|
-
{
|
|
35924
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35925
|
-
},
|
|
35926
|
-
{
|
|
35927
|
-
"type": "object",
|
|
35928
|
-
"properties": {
|
|
35929
|
-
"error_code": {
|
|
35930
|
-
"type": "string",
|
|
35931
|
-
"enum": [
|
|
35932
|
-
"account_not_found"
|
|
35933
|
-
]
|
|
35934
|
-
}
|
|
35935
|
-
}
|
|
35936
|
-
}
|
|
35937
|
-
]
|
|
35938
|
-
}
|
|
35939
|
-
}
|
|
35940
|
-
}
|
|
35941
|
-
},
|
|
35942
|
-
"429": {
|
|
35943
|
-
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
35944
|
-
"content": {
|
|
35945
|
-
"application/json": {
|
|
35946
|
-
"schema": {
|
|
35947
|
-
"allOf": [
|
|
35948
|
-
{
|
|
35949
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35950
|
-
},
|
|
35951
|
-
{
|
|
35952
|
-
"type": "object",
|
|
35953
|
-
"properties": {
|
|
35954
|
-
"error_code": {
|
|
35955
|
-
"type": "string",
|
|
35956
|
-
"enum": [
|
|
35957
|
-
"too_many_requests"
|
|
35958
|
-
]
|
|
35959
|
-
}
|
|
35960
|
-
}
|
|
35961
|
-
}
|
|
35962
|
-
]
|
|
35963
|
-
}
|
|
35964
|
-
}
|
|
35965
|
-
}
|
|
35966
|
-
},
|
|
35967
|
-
"500": {
|
|
35968
|
-
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
35969
|
-
"content": {
|
|
35970
|
-
"application/json": {
|
|
35971
|
-
"schema": {
|
|
35972
|
-
"allOf": [
|
|
35973
|
-
{
|
|
35974
|
-
"$ref": "#/components/schemas/ErrorResponse"
|
|
35975
|
-
},
|
|
35976
|
-
{
|
|
35977
|
-
"type": "object",
|
|
35978
|
-
"properties": {
|
|
35979
|
-
"error_code": {
|
|
35980
|
-
"type": "string",
|
|
35981
|
-
"enum": [
|
|
35982
|
-
"internal_error"
|
|
35983
|
-
]
|
|
35846
|
+
"type": "object",
|
|
35847
|
+
"required": [
|
|
35848
|
+
"domain",
|
|
35849
|
+
"verification_token",
|
|
35850
|
+
"verified_at"
|
|
35851
|
+
],
|
|
35852
|
+
"properties": {
|
|
35853
|
+
"domain": {
|
|
35854
|
+
"type": "string",
|
|
35855
|
+
"example": "acme.com"
|
|
35856
|
+
},
|
|
35857
|
+
"verification_token": {
|
|
35858
|
+
"type": "string",
|
|
35859
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
35860
|
+
},
|
|
35861
|
+
"verified_at": {
|
|
35862
|
+
"type": "string",
|
|
35863
|
+
"format": "date-time",
|
|
35864
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
35865
|
+
"nullable": true
|
|
35866
|
+
}
|
|
35984
35867
|
}
|
|
35985
|
-
}
|
|
35986
|
-
|
|
35987
|
-
|
|
35988
|
-
|
|
35989
|
-
|
|
35990
|
-
|
|
35991
|
-
|
|
35992
|
-
|
|
35993
|
-
|
|
35994
|
-
|
|
35995
|
-
|
|
35996
|
-
|
|
35997
|
-
|
|
35998
|
-
|
|
35999
|
-
|
|
36000
|
-
|
|
36001
|
-
|
|
36002
|
-
|
|
36003
|
-
|
|
36004
|
-
|
|
36005
|
-
|
|
36006
|
-
|
|
36007
|
-
|
|
36008
|
-
|
|
36009
|
-
|
|
36010
|
-
|
|
36011
|
-
|
|
36012
|
-
|
|
36013
|
-
|
|
36014
|
-
|
|
36015
|
-
|
|
36016
|
-
|
|
36017
|
-
|
|
36018
|
-
|
|
36019
|
-
|
|
36020
|
-
|
|
36021
|
-
"
|
|
36022
|
-
|
|
36023
|
-
|
|
36024
|
-
|
|
36025
|
-
"
|
|
36026
|
-
|
|
36027
|
-
|
|
36028
|
-
|
|
36029
|
-
|
|
36030
|
-
|
|
36031
|
-
|
|
36032
|
-
|
|
36033
|
-
|
|
36034
|
-
|
|
36035
|
-
|
|
36036
|
-
|
|
36037
|
-
|
|
36038
|
-
|
|
36039
|
-
|
|
36040
|
-
|
|
36041
|
-
|
|
36042
|
-
|
|
36043
|
-
|
|
36044
|
-
|
|
36045
|
-
|
|
36046
|
-
|
|
36047
|
-
|
|
36048
|
-
|
|
36049
|
-
|
|
36050
|
-
|
|
36051
|
-
|
|
36052
|
-
|
|
36053
|
-
"
|
|
36054
|
-
},
|
|
36055
|
-
|
|
36056
|
-
"type": "
|
|
36057
|
-
"
|
|
36058
|
-
|
|
35868
|
+
},
|
|
35869
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
35870
|
+
},
|
|
35871
|
+
"admins": {
|
|
35872
|
+
"type": "array",
|
|
35873
|
+
"items": {
|
|
35874
|
+
"type": "string"
|
|
35875
|
+
},
|
|
35876
|
+
"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."
|
|
35877
|
+
},
|
|
35878
|
+
"account": {
|
|
35879
|
+
"type": "string",
|
|
35880
|
+
"description": "Object is related with this account"
|
|
35881
|
+
},
|
|
35882
|
+
"metadata": {
|
|
35883
|
+
"type": "object",
|
|
35884
|
+
"properties": {},
|
|
35885
|
+
"additionalProperties": true,
|
|
35886
|
+
"description": "OrganizationMetadata",
|
|
35887
|
+
"default": {}
|
|
35888
|
+
},
|
|
35889
|
+
"createdAt": {
|
|
35890
|
+
"type": "string",
|
|
35891
|
+
"description": "Organization creation date"
|
|
35892
|
+
},
|
|
35893
|
+
"updatedAt": {
|
|
35894
|
+
"type": "string",
|
|
35895
|
+
"description": "Organization updated date"
|
|
35896
|
+
}
|
|
35897
|
+
},
|
|
35898
|
+
"description": "Organization"
|
|
35899
|
+
}
|
|
35900
|
+
}
|
|
35901
|
+
}
|
|
35902
|
+
},
|
|
35903
|
+
"400": {
|
|
35904
|
+
"description": "`already_exists` — A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
35905
|
+
"content": {
|
|
35906
|
+
"application/json": {
|
|
35907
|
+
"schema": {
|
|
35908
|
+
"allOf": [
|
|
35909
|
+
{
|
|
35910
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
35911
|
+
},
|
|
35912
|
+
{
|
|
35913
|
+
"type": "object",
|
|
35914
|
+
"properties": {
|
|
35915
|
+
"error_code": {
|
|
35916
|
+
"type": "string",
|
|
35917
|
+
"enum": [
|
|
35918
|
+
"already_exists",
|
|
35919
|
+
"validation_error"
|
|
35920
|
+
]
|
|
35921
|
+
}
|
|
35922
|
+
}
|
|
35923
|
+
}
|
|
35924
|
+
]
|
|
35925
|
+
}
|
|
35926
|
+
}
|
|
35927
|
+
}
|
|
35928
|
+
},
|
|
35929
|
+
"401": {
|
|
35930
|
+
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
35931
|
+
"content": {
|
|
35932
|
+
"application/json": {
|
|
35933
|
+
"schema": {
|
|
35934
|
+
"allOf": [
|
|
35935
|
+
{
|
|
35936
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
35937
|
+
},
|
|
35938
|
+
{
|
|
35939
|
+
"type": "object",
|
|
35940
|
+
"properties": {
|
|
35941
|
+
"error_code": {
|
|
35942
|
+
"type": "string",
|
|
35943
|
+
"enum": [
|
|
35944
|
+
"unauthorized"
|
|
35945
|
+
]
|
|
35946
|
+
}
|
|
35947
|
+
}
|
|
35948
|
+
}
|
|
35949
|
+
]
|
|
35950
|
+
}
|
|
35951
|
+
}
|
|
35952
|
+
}
|
|
35953
|
+
},
|
|
35954
|
+
"403": {
|
|
35955
|
+
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
35956
|
+
"content": {
|
|
35957
|
+
"application/json": {
|
|
35958
|
+
"schema": {
|
|
35959
|
+
"allOf": [
|
|
35960
|
+
{
|
|
35961
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
35962
|
+
},
|
|
35963
|
+
{
|
|
35964
|
+
"type": "object",
|
|
35965
|
+
"properties": {
|
|
35966
|
+
"error_code": {
|
|
35967
|
+
"type": "string",
|
|
35968
|
+
"enum": [
|
|
35969
|
+
"forbidden",
|
|
35970
|
+
"insufficient_scope",
|
|
35971
|
+
"user_suspended"
|
|
35972
|
+
]
|
|
35973
|
+
}
|
|
35974
|
+
}
|
|
35975
|
+
}
|
|
35976
|
+
]
|
|
35977
|
+
}
|
|
35978
|
+
}
|
|
35979
|
+
}
|
|
35980
|
+
},
|
|
35981
|
+
"404": {
|
|
35982
|
+
"description": "`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
35983
|
+
"content": {
|
|
35984
|
+
"application/json": {
|
|
35985
|
+
"schema": {
|
|
35986
|
+
"allOf": [
|
|
35987
|
+
{
|
|
35988
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
35989
|
+
},
|
|
35990
|
+
{
|
|
35991
|
+
"type": "object",
|
|
35992
|
+
"properties": {
|
|
35993
|
+
"error_code": {
|
|
35994
|
+
"type": "string",
|
|
35995
|
+
"enum": [
|
|
35996
|
+
"account_not_found"
|
|
35997
|
+
]
|
|
35998
|
+
}
|
|
35999
|
+
}
|
|
36000
|
+
}
|
|
36001
|
+
]
|
|
36002
|
+
}
|
|
36003
|
+
}
|
|
36004
|
+
}
|
|
36005
|
+
},
|
|
36006
|
+
"429": {
|
|
36007
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
36008
|
+
"content": {
|
|
36009
|
+
"application/json": {
|
|
36010
|
+
"schema": {
|
|
36011
|
+
"allOf": [
|
|
36012
|
+
{
|
|
36013
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
36014
|
+
},
|
|
36015
|
+
{
|
|
36016
|
+
"type": "object",
|
|
36017
|
+
"properties": {
|
|
36018
|
+
"error_code": {
|
|
36019
|
+
"type": "string",
|
|
36020
|
+
"enum": [
|
|
36021
|
+
"too_many_requests"
|
|
36022
|
+
]
|
|
36023
|
+
}
|
|
36024
|
+
}
|
|
36025
|
+
}
|
|
36026
|
+
]
|
|
36027
|
+
}
|
|
36028
|
+
}
|
|
36029
|
+
}
|
|
36030
|
+
},
|
|
36031
|
+
"500": {
|
|
36032
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
36033
|
+
"content": {
|
|
36034
|
+
"application/json": {
|
|
36035
|
+
"schema": {
|
|
36036
|
+
"allOf": [
|
|
36037
|
+
{
|
|
36038
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
36039
|
+
},
|
|
36040
|
+
{
|
|
36041
|
+
"type": "object",
|
|
36042
|
+
"properties": {
|
|
36043
|
+
"error_code": {
|
|
36044
|
+
"type": "string",
|
|
36045
|
+
"enum": [
|
|
36046
|
+
"internal_error"
|
|
36047
|
+
]
|
|
36048
|
+
}
|
|
36049
|
+
}
|
|
36050
|
+
}
|
|
36051
|
+
]
|
|
36052
|
+
}
|
|
36053
|
+
}
|
|
36054
|
+
}
|
|
36055
|
+
}
|
|
36056
|
+
}
|
|
36057
|
+
}
|
|
36058
|
+
},
|
|
36059
|
+
"/organization/{organization_id}": {
|
|
36060
|
+
"get": {
|
|
36061
|
+
"operationId": "organization/get",
|
|
36062
|
+
"summary": "Get Organization",
|
|
36063
|
+
"tags": [
|
|
36064
|
+
"organization"
|
|
36065
|
+
],
|
|
36066
|
+
"description": "Get Organization",
|
|
36067
|
+
"parameters": [
|
|
36068
|
+
{
|
|
36069
|
+
"schema": {
|
|
36070
|
+
"type": "string"
|
|
36071
|
+
},
|
|
36072
|
+
"in": "path",
|
|
36073
|
+
"name": "organization_id",
|
|
36074
|
+
"required": true
|
|
36075
|
+
}
|
|
36076
|
+
],
|
|
36077
|
+
"security": [
|
|
36078
|
+
{
|
|
36079
|
+
"bearerAuth": []
|
|
36080
|
+
}
|
|
36081
|
+
],
|
|
36082
|
+
"responses": {
|
|
36083
|
+
"200": {
|
|
36084
|
+
"description": "Organization",
|
|
36085
|
+
"content": {
|
|
36086
|
+
"application/json": {
|
|
36087
|
+
"schema": {
|
|
36088
|
+
"type": "object",
|
|
36089
|
+
"required": [
|
|
36090
|
+
"id",
|
|
36091
|
+
"name",
|
|
36092
|
+
"slug",
|
|
36093
|
+
"description",
|
|
36094
|
+
"logo_url",
|
|
36095
|
+
"domains",
|
|
36096
|
+
"admins",
|
|
36097
|
+
"account",
|
|
36098
|
+
"createdAt"
|
|
36099
|
+
],
|
|
36100
|
+
"properties": {
|
|
36101
|
+
"id": {
|
|
36102
|
+
"type": "string",
|
|
36103
|
+
"description": "Organization ID"
|
|
36104
|
+
},
|
|
36105
|
+
"name": {
|
|
36106
|
+
"type": "string",
|
|
36107
|
+
"description": "Human-readable name of the organization.",
|
|
36108
|
+
"example": "Acme Inc."
|
|
36109
|
+
},
|
|
36110
|
+
"slug": {
|
|
36111
|
+
"type": "string",
|
|
36112
|
+
"description": "URL-safe identifier derived from `name`. Unique within the tenant.",
|
|
36113
|
+
"example": "acme-inc"
|
|
36114
|
+
},
|
|
36115
|
+
"description": {
|
|
36116
|
+
"type": "string",
|
|
36117
|
+
"description": "Optional free-form description.",
|
|
36118
|
+
"nullable": true
|
|
36119
|
+
},
|
|
36120
|
+
"logo_url": {
|
|
36121
|
+
"type": "string",
|
|
36122
|
+
"description": "Optional URL of the organization logo.",
|
|
36123
|
+
"nullable": true
|
|
36124
|
+
},
|
|
36125
|
+
"domains": {
|
|
36126
|
+
"type": "array",
|
|
36127
|
+
"items": {
|
|
36128
|
+
"type": "object",
|
|
36129
|
+
"required": [
|
|
36130
|
+
"domain",
|
|
36131
|
+
"verification_token",
|
|
36132
|
+
"verified_at"
|
|
36133
|
+
],
|
|
36134
|
+
"properties": {
|
|
36135
|
+
"domain": {
|
|
36136
|
+
"type": "string",
|
|
36137
|
+
"example": "acme.com"
|
|
36138
|
+
},
|
|
36139
|
+
"verification_token": {
|
|
36140
|
+
"type": "string",
|
|
36141
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
36142
|
+
},
|
|
36143
|
+
"verified_at": {
|
|
36144
|
+
"type": "string",
|
|
36145
|
+
"format": "date-time",
|
|
36146
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
36147
|
+
"nullable": true
|
|
36148
|
+
}
|
|
36149
|
+
}
|
|
36150
|
+
},
|
|
36151
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36059
36152
|
},
|
|
36060
36153
|
"admins": {
|
|
36061
36154
|
"type": "array",
|
|
@@ -36316,6 +36409,7 @@
|
|
|
36316
36409
|
"slug",
|
|
36317
36410
|
"description",
|
|
36318
36411
|
"logo_url",
|
|
36412
|
+
"domains",
|
|
36319
36413
|
"admins",
|
|
36320
36414
|
"account",
|
|
36321
36415
|
"createdAt"
|
|
@@ -36345,6 +36439,34 @@
|
|
|
36345
36439
|
"description": "Optional URL of the organization logo.",
|
|
36346
36440
|
"nullable": true
|
|
36347
36441
|
},
|
|
36442
|
+
"domains": {
|
|
36443
|
+
"type": "array",
|
|
36444
|
+
"items": {
|
|
36445
|
+
"type": "object",
|
|
36446
|
+
"required": [
|
|
36447
|
+
"domain",
|
|
36448
|
+
"verification_token",
|
|
36449
|
+
"verified_at"
|
|
36450
|
+
],
|
|
36451
|
+
"properties": {
|
|
36452
|
+
"domain": {
|
|
36453
|
+
"type": "string",
|
|
36454
|
+
"example": "acme.com"
|
|
36455
|
+
},
|
|
36456
|
+
"verification_token": {
|
|
36457
|
+
"type": "string",
|
|
36458
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
36459
|
+
},
|
|
36460
|
+
"verified_at": {
|
|
36461
|
+
"type": "string",
|
|
36462
|
+
"format": "date-time",
|
|
36463
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
36464
|
+
"nullable": true
|
|
36465
|
+
}
|
|
36466
|
+
}
|
|
36467
|
+
},
|
|
36468
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36469
|
+
},
|
|
36348
36470
|
"admins": {
|
|
36349
36471
|
"type": "array",
|
|
36350
36472
|
"items": {
|
|
@@ -36569,6 +36691,7 @@
|
|
|
36569
36691
|
"slug",
|
|
36570
36692
|
"description",
|
|
36571
36693
|
"logo_url",
|
|
36694
|
+
"domains",
|
|
36572
36695
|
"admins",
|
|
36573
36696
|
"account",
|
|
36574
36697
|
"createdAt"
|
|
@@ -36598,6 +36721,34 @@
|
|
|
36598
36721
|
"description": "Optional URL of the organization logo.",
|
|
36599
36722
|
"nullable": true
|
|
36600
36723
|
},
|
|
36724
|
+
"domains": {
|
|
36725
|
+
"type": "array",
|
|
36726
|
+
"items": {
|
|
36727
|
+
"type": "object",
|
|
36728
|
+
"required": [
|
|
36729
|
+
"domain",
|
|
36730
|
+
"verification_token",
|
|
36731
|
+
"verified_at"
|
|
36732
|
+
],
|
|
36733
|
+
"properties": {
|
|
36734
|
+
"domain": {
|
|
36735
|
+
"type": "string",
|
|
36736
|
+
"example": "acme.com"
|
|
36737
|
+
},
|
|
36738
|
+
"verification_token": {
|
|
36739
|
+
"type": "string",
|
|
36740
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
36741
|
+
},
|
|
36742
|
+
"verified_at": {
|
|
36743
|
+
"type": "string",
|
|
36744
|
+
"format": "date-time",
|
|
36745
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
36746
|
+
"nullable": true
|
|
36747
|
+
}
|
|
36748
|
+
}
|
|
36749
|
+
},
|
|
36750
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36751
|
+
},
|
|
36601
36752
|
"admins": {
|
|
36602
36753
|
"type": "array",
|
|
36603
36754
|
"items": {
|
|
@@ -36844,6 +36995,7 @@
|
|
|
36844
36995
|
"slug",
|
|
36845
36996
|
"description",
|
|
36846
36997
|
"logo_url",
|
|
36998
|
+
"domains",
|
|
36847
36999
|
"admins",
|
|
36848
37000
|
"account",
|
|
36849
37001
|
"createdAt"
|
|
@@ -36873,6 +37025,34 @@
|
|
|
36873
37025
|
"description": "Optional URL of the organization logo.",
|
|
36874
37026
|
"nullable": true
|
|
36875
37027
|
},
|
|
37028
|
+
"domains": {
|
|
37029
|
+
"type": "array",
|
|
37030
|
+
"items": {
|
|
37031
|
+
"type": "object",
|
|
37032
|
+
"required": [
|
|
37033
|
+
"domain",
|
|
37034
|
+
"verification_token",
|
|
37035
|
+
"verified_at"
|
|
37036
|
+
],
|
|
37037
|
+
"properties": {
|
|
37038
|
+
"domain": {
|
|
37039
|
+
"type": "string",
|
|
37040
|
+
"example": "acme.com"
|
|
37041
|
+
},
|
|
37042
|
+
"verification_token": {
|
|
37043
|
+
"type": "string",
|
|
37044
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
37045
|
+
},
|
|
37046
|
+
"verified_at": {
|
|
37047
|
+
"type": "string",
|
|
37048
|
+
"format": "date-time",
|
|
37049
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
37050
|
+
"nullable": true
|
|
37051
|
+
}
|
|
37052
|
+
}
|
|
37053
|
+
},
|
|
37054
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37055
|
+
},
|
|
36876
37056
|
"admins": {
|
|
36877
37057
|
"type": "array",
|
|
36878
37058
|
"items": {
|
|
@@ -37106,6 +37286,7 @@
|
|
|
37106
37286
|
"slug",
|
|
37107
37287
|
"description",
|
|
37108
37288
|
"logo_url",
|
|
37289
|
+
"domains",
|
|
37109
37290
|
"admins",
|
|
37110
37291
|
"account",
|
|
37111
37292
|
"createdAt"
|
|
@@ -37135,6 +37316,34 @@
|
|
|
37135
37316
|
"description": "Optional URL of the organization logo.",
|
|
37136
37317
|
"nullable": true
|
|
37137
37318
|
},
|
|
37319
|
+
"domains": {
|
|
37320
|
+
"type": "array",
|
|
37321
|
+
"items": {
|
|
37322
|
+
"type": "object",
|
|
37323
|
+
"required": [
|
|
37324
|
+
"domain",
|
|
37325
|
+
"verification_token",
|
|
37326
|
+
"verified_at"
|
|
37327
|
+
],
|
|
37328
|
+
"properties": {
|
|
37329
|
+
"domain": {
|
|
37330
|
+
"type": "string",
|
|
37331
|
+
"example": "acme.com"
|
|
37332
|
+
},
|
|
37333
|
+
"verification_token": {
|
|
37334
|
+
"type": "string",
|
|
37335
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
37336
|
+
},
|
|
37337
|
+
"verified_at": {
|
|
37338
|
+
"type": "string",
|
|
37339
|
+
"format": "date-time",
|
|
37340
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
37341
|
+
"nullable": true
|
|
37342
|
+
}
|
|
37343
|
+
}
|
|
37344
|
+
},
|
|
37345
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37346
|
+
},
|
|
37138
37347
|
"admins": {
|
|
37139
37348
|
"type": "array",
|
|
37140
37349
|
"items": {
|
|
@@ -37349,6 +37558,1021 @@
|
|
|
37349
37558
|
}
|
|
37350
37559
|
}
|
|
37351
37560
|
},
|
|
37561
|
+
"/organization/{organization_id}/domain": {
|
|
37562
|
+
"post": {
|
|
37563
|
+
"operationId": "organization/addDomain",
|
|
37564
|
+
"summary": "Claim an email domain for an Organization",
|
|
37565
|
+
"tags": [
|
|
37566
|
+
"organization"
|
|
37567
|
+
],
|
|
37568
|
+
"description": "Adds the domain unverified, with the `verification_token` its TXT record must hold. Idempotent. Nothing changes for anyone until the domain is verified.",
|
|
37569
|
+
"requestBody": {
|
|
37570
|
+
"required": true,
|
|
37571
|
+
"content": {
|
|
37572
|
+
"application/json": {
|
|
37573
|
+
"schema": {
|
|
37574
|
+
"type": "object",
|
|
37575
|
+
"required": [
|
|
37576
|
+
"domain"
|
|
37577
|
+
],
|
|
37578
|
+
"properties": {
|
|
37579
|
+
"domain": {
|
|
37580
|
+
"type": "string",
|
|
37581
|
+
"description": "The email domain, as in `alice@<domain>`.",
|
|
37582
|
+
"example": "acme.com"
|
|
37583
|
+
}
|
|
37584
|
+
},
|
|
37585
|
+
"additionalProperties": false
|
|
37586
|
+
}
|
|
37587
|
+
}
|
|
37588
|
+
}
|
|
37589
|
+
},
|
|
37590
|
+
"parameters": [
|
|
37591
|
+
{
|
|
37592
|
+
"schema": {
|
|
37593
|
+
"type": "string"
|
|
37594
|
+
},
|
|
37595
|
+
"in": "path",
|
|
37596
|
+
"name": "organization_id",
|
|
37597
|
+
"required": true
|
|
37598
|
+
}
|
|
37599
|
+
],
|
|
37600
|
+
"security": [
|
|
37601
|
+
{
|
|
37602
|
+
"bearerAuth": []
|
|
37603
|
+
}
|
|
37604
|
+
],
|
|
37605
|
+
"responses": {
|
|
37606
|
+
"200": {
|
|
37607
|
+
"description": "Organization",
|
|
37608
|
+
"content": {
|
|
37609
|
+
"application/json": {
|
|
37610
|
+
"schema": {
|
|
37611
|
+
"type": "object",
|
|
37612
|
+
"required": [
|
|
37613
|
+
"id",
|
|
37614
|
+
"name",
|
|
37615
|
+
"slug",
|
|
37616
|
+
"description",
|
|
37617
|
+
"logo_url",
|
|
37618
|
+
"domains",
|
|
37619
|
+
"admins",
|
|
37620
|
+
"account",
|
|
37621
|
+
"createdAt"
|
|
37622
|
+
],
|
|
37623
|
+
"properties": {
|
|
37624
|
+
"id": {
|
|
37625
|
+
"type": "string",
|
|
37626
|
+
"description": "Organization ID"
|
|
37627
|
+
},
|
|
37628
|
+
"name": {
|
|
37629
|
+
"type": "string",
|
|
37630
|
+
"description": "Human-readable name of the organization.",
|
|
37631
|
+
"example": "Acme Inc."
|
|
37632
|
+
},
|
|
37633
|
+
"slug": {
|
|
37634
|
+
"type": "string",
|
|
37635
|
+
"description": "URL-safe identifier derived from `name`. Unique within the tenant.",
|
|
37636
|
+
"example": "acme-inc"
|
|
37637
|
+
},
|
|
37638
|
+
"description": {
|
|
37639
|
+
"type": "string",
|
|
37640
|
+
"description": "Optional free-form description.",
|
|
37641
|
+
"nullable": true
|
|
37642
|
+
},
|
|
37643
|
+
"logo_url": {
|
|
37644
|
+
"type": "string",
|
|
37645
|
+
"description": "Optional URL of the organization logo.",
|
|
37646
|
+
"nullable": true
|
|
37647
|
+
},
|
|
37648
|
+
"domains": {
|
|
37649
|
+
"type": "array",
|
|
37650
|
+
"items": {
|
|
37651
|
+
"type": "object",
|
|
37652
|
+
"required": [
|
|
37653
|
+
"domain",
|
|
37654
|
+
"verification_token",
|
|
37655
|
+
"verified_at"
|
|
37656
|
+
],
|
|
37657
|
+
"properties": {
|
|
37658
|
+
"domain": {
|
|
37659
|
+
"type": "string",
|
|
37660
|
+
"example": "acme.com"
|
|
37661
|
+
},
|
|
37662
|
+
"verification_token": {
|
|
37663
|
+
"type": "string",
|
|
37664
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
37665
|
+
},
|
|
37666
|
+
"verified_at": {
|
|
37667
|
+
"type": "string",
|
|
37668
|
+
"format": "date-time",
|
|
37669
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
37670
|
+
"nullable": true
|
|
37671
|
+
}
|
|
37672
|
+
}
|
|
37673
|
+
},
|
|
37674
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37675
|
+
},
|
|
37676
|
+
"admins": {
|
|
37677
|
+
"type": "array",
|
|
37678
|
+
"items": {
|
|
37679
|
+
"type": "string"
|
|
37680
|
+
},
|
|
37681
|
+
"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."
|
|
37682
|
+
},
|
|
37683
|
+
"account": {
|
|
37684
|
+
"type": "string",
|
|
37685
|
+
"description": "Object is related with this account"
|
|
37686
|
+
},
|
|
37687
|
+
"metadata": {
|
|
37688
|
+
"type": "object",
|
|
37689
|
+
"properties": {},
|
|
37690
|
+
"additionalProperties": true,
|
|
37691
|
+
"description": "OrganizationMetadata",
|
|
37692
|
+
"default": {}
|
|
37693
|
+
},
|
|
37694
|
+
"createdAt": {
|
|
37695
|
+
"type": "string",
|
|
37696
|
+
"description": "Organization creation date"
|
|
37697
|
+
},
|
|
37698
|
+
"updatedAt": {
|
|
37699
|
+
"type": "string",
|
|
37700
|
+
"description": "Organization updated date"
|
|
37701
|
+
}
|
|
37702
|
+
},
|
|
37703
|
+
"description": "Organization"
|
|
37704
|
+
}
|
|
37705
|
+
}
|
|
37706
|
+
}
|
|
37707
|
+
},
|
|
37708
|
+
"400": {
|
|
37709
|
+
"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.\n\n`public_email_domain` — A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
37710
|
+
"content": {
|
|
37711
|
+
"application/json": {
|
|
37712
|
+
"schema": {
|
|
37713
|
+
"allOf": [
|
|
37714
|
+
{
|
|
37715
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37716
|
+
},
|
|
37717
|
+
{
|
|
37718
|
+
"type": "object",
|
|
37719
|
+
"properties": {
|
|
37720
|
+
"error_code": {
|
|
37721
|
+
"type": "string",
|
|
37722
|
+
"enum": [
|
|
37723
|
+
"invalid_email_domain",
|
|
37724
|
+
"public_email_domain",
|
|
37725
|
+
"validation_error"
|
|
37726
|
+
]
|
|
37727
|
+
}
|
|
37728
|
+
}
|
|
37729
|
+
}
|
|
37730
|
+
]
|
|
37731
|
+
}
|
|
37732
|
+
}
|
|
37733
|
+
}
|
|
37734
|
+
},
|
|
37735
|
+
"401": {
|
|
37736
|
+
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
37737
|
+
"content": {
|
|
37738
|
+
"application/json": {
|
|
37739
|
+
"schema": {
|
|
37740
|
+
"allOf": [
|
|
37741
|
+
{
|
|
37742
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37743
|
+
},
|
|
37744
|
+
{
|
|
37745
|
+
"type": "object",
|
|
37746
|
+
"properties": {
|
|
37747
|
+
"error_code": {
|
|
37748
|
+
"type": "string",
|
|
37749
|
+
"enum": [
|
|
37750
|
+
"unauthorized"
|
|
37751
|
+
]
|
|
37752
|
+
}
|
|
37753
|
+
}
|
|
37754
|
+
}
|
|
37755
|
+
]
|
|
37756
|
+
}
|
|
37757
|
+
}
|
|
37758
|
+
}
|
|
37759
|
+
},
|
|
37760
|
+
"403": {
|
|
37761
|
+
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
37762
|
+
"content": {
|
|
37763
|
+
"application/json": {
|
|
37764
|
+
"schema": {
|
|
37765
|
+
"allOf": [
|
|
37766
|
+
{
|
|
37767
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37768
|
+
},
|
|
37769
|
+
{
|
|
37770
|
+
"type": "object",
|
|
37771
|
+
"properties": {
|
|
37772
|
+
"error_code": {
|
|
37773
|
+
"type": "string",
|
|
37774
|
+
"enum": [
|
|
37775
|
+
"forbidden",
|
|
37776
|
+
"insufficient_scope",
|
|
37777
|
+
"user_suspended"
|
|
37778
|
+
]
|
|
37779
|
+
}
|
|
37780
|
+
}
|
|
37781
|
+
}
|
|
37782
|
+
]
|
|
37783
|
+
}
|
|
37784
|
+
}
|
|
37785
|
+
}
|
|
37786
|
+
},
|
|
37787
|
+
"404": {
|
|
37788
|
+
"description": "`organization_not_found` — No organization with that id in this account.\n\n`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
37789
|
+
"content": {
|
|
37790
|
+
"application/json": {
|
|
37791
|
+
"schema": {
|
|
37792
|
+
"allOf": [
|
|
37793
|
+
{
|
|
37794
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37795
|
+
},
|
|
37796
|
+
{
|
|
37797
|
+
"type": "object",
|
|
37798
|
+
"properties": {
|
|
37799
|
+
"error_code": {
|
|
37800
|
+
"type": "string",
|
|
37801
|
+
"enum": [
|
|
37802
|
+
"organization_not_found",
|
|
37803
|
+
"account_not_found"
|
|
37804
|
+
]
|
|
37805
|
+
}
|
|
37806
|
+
}
|
|
37807
|
+
}
|
|
37808
|
+
]
|
|
37809
|
+
}
|
|
37810
|
+
}
|
|
37811
|
+
}
|
|
37812
|
+
},
|
|
37813
|
+
"429": {
|
|
37814
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
37815
|
+
"content": {
|
|
37816
|
+
"application/json": {
|
|
37817
|
+
"schema": {
|
|
37818
|
+
"allOf": [
|
|
37819
|
+
{
|
|
37820
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37821
|
+
},
|
|
37822
|
+
{
|
|
37823
|
+
"type": "object",
|
|
37824
|
+
"properties": {
|
|
37825
|
+
"error_code": {
|
|
37826
|
+
"type": "string",
|
|
37827
|
+
"enum": [
|
|
37828
|
+
"too_many_requests"
|
|
37829
|
+
]
|
|
37830
|
+
}
|
|
37831
|
+
}
|
|
37832
|
+
}
|
|
37833
|
+
]
|
|
37834
|
+
}
|
|
37835
|
+
}
|
|
37836
|
+
}
|
|
37837
|
+
},
|
|
37838
|
+
"500": {
|
|
37839
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
37840
|
+
"content": {
|
|
37841
|
+
"application/json": {
|
|
37842
|
+
"schema": {
|
|
37843
|
+
"allOf": [
|
|
37844
|
+
{
|
|
37845
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
37846
|
+
},
|
|
37847
|
+
{
|
|
37848
|
+
"type": "object",
|
|
37849
|
+
"properties": {
|
|
37850
|
+
"error_code": {
|
|
37851
|
+
"type": "string",
|
|
37852
|
+
"enum": [
|
|
37853
|
+
"internal_error"
|
|
37854
|
+
]
|
|
37855
|
+
}
|
|
37856
|
+
}
|
|
37857
|
+
}
|
|
37858
|
+
]
|
|
37859
|
+
}
|
|
37860
|
+
}
|
|
37861
|
+
}
|
|
37862
|
+
}
|
|
37863
|
+
}
|
|
37864
|
+
}
|
|
37865
|
+
},
|
|
37866
|
+
"/organization/{organization_id}/domain/{domain}/verify": {
|
|
37867
|
+
"post": {
|
|
37868
|
+
"operationId": "organization/verifyDomain",
|
|
37869
|
+
"summary": "Verify an Organization's email domain",
|
|
37870
|
+
"tags": [
|
|
37871
|
+
"organization"
|
|
37872
|
+
],
|
|
37873
|
+
"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`).",
|
|
37874
|
+
"parameters": [
|
|
37875
|
+
{
|
|
37876
|
+
"schema": {
|
|
37877
|
+
"type": "string"
|
|
37878
|
+
},
|
|
37879
|
+
"in": "path",
|
|
37880
|
+
"name": "organization_id",
|
|
37881
|
+
"required": true
|
|
37882
|
+
},
|
|
37883
|
+
{
|
|
37884
|
+
"schema": {
|
|
37885
|
+
"type": "string"
|
|
37886
|
+
},
|
|
37887
|
+
"in": "path",
|
|
37888
|
+
"name": "domain",
|
|
37889
|
+
"required": true
|
|
37890
|
+
}
|
|
37891
|
+
],
|
|
37892
|
+
"security": [
|
|
37893
|
+
{
|
|
37894
|
+
"bearerAuth": []
|
|
37895
|
+
}
|
|
37896
|
+
],
|
|
37897
|
+
"responses": {
|
|
37898
|
+
"200": {
|
|
37899
|
+
"description": "Default Response",
|
|
37900
|
+
"content": {
|
|
37901
|
+
"application/json": {
|
|
37902
|
+
"schema": {
|
|
37903
|
+
"type": "object",
|
|
37904
|
+
"required": [
|
|
37905
|
+
"organization",
|
|
37906
|
+
"record"
|
|
37907
|
+
],
|
|
37908
|
+
"properties": {
|
|
37909
|
+
"organization": {
|
|
37910
|
+
"type": "object",
|
|
37911
|
+
"required": [
|
|
37912
|
+
"id",
|
|
37913
|
+
"name",
|
|
37914
|
+
"slug",
|
|
37915
|
+
"description",
|
|
37916
|
+
"logo_url",
|
|
37917
|
+
"domains",
|
|
37918
|
+
"admins",
|
|
37919
|
+
"account",
|
|
37920
|
+
"createdAt"
|
|
37921
|
+
],
|
|
37922
|
+
"properties": {
|
|
37923
|
+
"id": {
|
|
37924
|
+
"type": "string",
|
|
37925
|
+
"description": "Organization ID"
|
|
37926
|
+
},
|
|
37927
|
+
"name": {
|
|
37928
|
+
"type": "string",
|
|
37929
|
+
"description": "Human-readable name of the organization.",
|
|
37930
|
+
"example": "Acme Inc."
|
|
37931
|
+
},
|
|
37932
|
+
"slug": {
|
|
37933
|
+
"type": "string",
|
|
37934
|
+
"description": "URL-safe identifier derived from `name`. Unique within the tenant.",
|
|
37935
|
+
"example": "acme-inc"
|
|
37936
|
+
},
|
|
37937
|
+
"description": {
|
|
37938
|
+
"type": "string",
|
|
37939
|
+
"description": "Optional free-form description.",
|
|
37940
|
+
"nullable": true
|
|
37941
|
+
},
|
|
37942
|
+
"logo_url": {
|
|
37943
|
+
"type": "string",
|
|
37944
|
+
"description": "Optional URL of the organization logo.",
|
|
37945
|
+
"nullable": true
|
|
37946
|
+
},
|
|
37947
|
+
"domains": {
|
|
37948
|
+
"type": "array",
|
|
37949
|
+
"items": {
|
|
37950
|
+
"type": "object",
|
|
37951
|
+
"required": [
|
|
37952
|
+
"domain",
|
|
37953
|
+
"verification_token",
|
|
37954
|
+
"verified_at"
|
|
37955
|
+
],
|
|
37956
|
+
"properties": {
|
|
37957
|
+
"domain": {
|
|
37958
|
+
"type": "string",
|
|
37959
|
+
"example": "acme.com"
|
|
37960
|
+
},
|
|
37961
|
+
"verification_token": {
|
|
37962
|
+
"type": "string",
|
|
37963
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
37964
|
+
},
|
|
37965
|
+
"verified_at": {
|
|
37966
|
+
"type": "string",
|
|
37967
|
+
"format": "date-time",
|
|
37968
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
37969
|
+
"nullable": true
|
|
37970
|
+
}
|
|
37971
|
+
}
|
|
37972
|
+
},
|
|
37973
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37974
|
+
},
|
|
37975
|
+
"admins": {
|
|
37976
|
+
"type": "array",
|
|
37977
|
+
"items": {
|
|
37978
|
+
"type": "string"
|
|
37979
|
+
},
|
|
37980
|
+
"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."
|
|
37981
|
+
},
|
|
37982
|
+
"account": {
|
|
37983
|
+
"type": "string",
|
|
37984
|
+
"description": "Object is related with this account"
|
|
37985
|
+
},
|
|
37986
|
+
"metadata": {
|
|
37987
|
+
"type": "object",
|
|
37988
|
+
"properties": {},
|
|
37989
|
+
"additionalProperties": true,
|
|
37990
|
+
"description": "OrganizationMetadata",
|
|
37991
|
+
"default": {}
|
|
37992
|
+
},
|
|
37993
|
+
"createdAt": {
|
|
37994
|
+
"type": "string",
|
|
37995
|
+
"description": "Organization creation date"
|
|
37996
|
+
},
|
|
37997
|
+
"updatedAt": {
|
|
37998
|
+
"type": "string",
|
|
37999
|
+
"description": "Organization updated date"
|
|
38000
|
+
}
|
|
38001
|
+
},
|
|
38002
|
+
"description": "Organization"
|
|
38003
|
+
},
|
|
38004
|
+
"record": {
|
|
38005
|
+
"anyOf": [
|
|
38006
|
+
{
|
|
38007
|
+
"type": "object",
|
|
38008
|
+
"required": [
|
|
38009
|
+
"type",
|
|
38010
|
+
"host",
|
|
38011
|
+
"expected",
|
|
38012
|
+
"observed",
|
|
38013
|
+
"ok"
|
|
38014
|
+
],
|
|
38015
|
+
"properties": {
|
|
38016
|
+
"type": {
|
|
38017
|
+
"type": "string",
|
|
38018
|
+
"enum": [
|
|
38019
|
+
"TXT"
|
|
38020
|
+
]
|
|
38021
|
+
},
|
|
38022
|
+
"host": {
|
|
38023
|
+
"type": "string"
|
|
38024
|
+
},
|
|
38025
|
+
"expected": {
|
|
38026
|
+
"type": "string"
|
|
38027
|
+
},
|
|
38028
|
+
"observed": {
|
|
38029
|
+
"type": "array",
|
|
38030
|
+
"items": {
|
|
38031
|
+
"type": "string"
|
|
38032
|
+
}
|
|
38033
|
+
},
|
|
38034
|
+
"ok": {
|
|
38035
|
+
"type": "boolean"
|
|
38036
|
+
}
|
|
38037
|
+
}
|
|
38038
|
+
},
|
|
38039
|
+
{
|
|
38040
|
+
"type": "null"
|
|
38041
|
+
}
|
|
38042
|
+
],
|
|
38043
|
+
"description": "`null` when the domain was already verified."
|
|
38044
|
+
}
|
|
38045
|
+
}
|
|
38046
|
+
}
|
|
38047
|
+
}
|
|
38048
|
+
}
|
|
38049
|
+
},
|
|
38050
|
+
"400": {
|
|
38051
|
+
"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.\n\n`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.\n\n`public_email_domain` — A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
38052
|
+
"content": {
|
|
38053
|
+
"application/json": {
|
|
38054
|
+
"schema": {
|
|
38055
|
+
"allOf": [
|
|
38056
|
+
{
|
|
38057
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38058
|
+
},
|
|
38059
|
+
{
|
|
38060
|
+
"type": "object",
|
|
38061
|
+
"properties": {
|
|
38062
|
+
"error_code": {
|
|
38063
|
+
"type": "string",
|
|
38064
|
+
"enum": [
|
|
38065
|
+
"organization_domain_unverified",
|
|
38066
|
+
"invalid_email_domain",
|
|
38067
|
+
"public_email_domain",
|
|
38068
|
+
"validation_error"
|
|
38069
|
+
]
|
|
38070
|
+
}
|
|
38071
|
+
}
|
|
38072
|
+
}
|
|
38073
|
+
]
|
|
38074
|
+
}
|
|
38075
|
+
}
|
|
38076
|
+
}
|
|
38077
|
+
},
|
|
38078
|
+
"401": {
|
|
38079
|
+
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
38080
|
+
"content": {
|
|
38081
|
+
"application/json": {
|
|
38082
|
+
"schema": {
|
|
38083
|
+
"allOf": [
|
|
38084
|
+
{
|
|
38085
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38086
|
+
},
|
|
38087
|
+
{
|
|
38088
|
+
"type": "object",
|
|
38089
|
+
"properties": {
|
|
38090
|
+
"error_code": {
|
|
38091
|
+
"type": "string",
|
|
38092
|
+
"enum": [
|
|
38093
|
+
"unauthorized"
|
|
38094
|
+
]
|
|
38095
|
+
}
|
|
38096
|
+
}
|
|
38097
|
+
}
|
|
38098
|
+
]
|
|
38099
|
+
}
|
|
38100
|
+
}
|
|
38101
|
+
}
|
|
38102
|
+
},
|
|
38103
|
+
"402": {
|
|
38104
|
+
"description": "`plan_required` — The setting requires a higher plan. `message` says which.",
|
|
38105
|
+
"content": {
|
|
38106
|
+
"application/json": {
|
|
38107
|
+
"schema": {
|
|
38108
|
+
"allOf": [
|
|
38109
|
+
{
|
|
38110
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38111
|
+
},
|
|
38112
|
+
{
|
|
38113
|
+
"type": "object",
|
|
38114
|
+
"properties": {
|
|
38115
|
+
"error_code": {
|
|
38116
|
+
"type": "string",
|
|
38117
|
+
"enum": [
|
|
38118
|
+
"plan_required"
|
|
38119
|
+
]
|
|
38120
|
+
}
|
|
38121
|
+
}
|
|
38122
|
+
}
|
|
38123
|
+
]
|
|
38124
|
+
}
|
|
38125
|
+
}
|
|
38126
|
+
}
|
|
38127
|
+
},
|
|
38128
|
+
"403": {
|
|
38129
|
+
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
38130
|
+
"content": {
|
|
38131
|
+
"application/json": {
|
|
38132
|
+
"schema": {
|
|
38133
|
+
"allOf": [
|
|
38134
|
+
{
|
|
38135
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38136
|
+
},
|
|
38137
|
+
{
|
|
38138
|
+
"type": "object",
|
|
38139
|
+
"properties": {
|
|
38140
|
+
"error_code": {
|
|
38141
|
+
"type": "string",
|
|
38142
|
+
"enum": [
|
|
38143
|
+
"forbidden",
|
|
38144
|
+
"insufficient_scope",
|
|
38145
|
+
"user_suspended"
|
|
38146
|
+
]
|
|
38147
|
+
}
|
|
38148
|
+
}
|
|
38149
|
+
}
|
|
38150
|
+
]
|
|
38151
|
+
}
|
|
38152
|
+
}
|
|
38153
|
+
}
|
|
38154
|
+
},
|
|
38155
|
+
"404": {
|
|
38156
|
+
"description": "`organization_not_found` — No organization with that id in this account.\n\n`organization_domain_not_found` — The organization has no such domain.\n\n`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
38157
|
+
"content": {
|
|
38158
|
+
"application/json": {
|
|
38159
|
+
"schema": {
|
|
38160
|
+
"allOf": [
|
|
38161
|
+
{
|
|
38162
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38163
|
+
},
|
|
38164
|
+
{
|
|
38165
|
+
"type": "object",
|
|
38166
|
+
"properties": {
|
|
38167
|
+
"error_code": {
|
|
38168
|
+
"type": "string",
|
|
38169
|
+
"enum": [
|
|
38170
|
+
"organization_not_found",
|
|
38171
|
+
"organization_domain_not_found",
|
|
38172
|
+
"account_not_found"
|
|
38173
|
+
]
|
|
38174
|
+
}
|
|
38175
|
+
}
|
|
38176
|
+
}
|
|
38177
|
+
]
|
|
38178
|
+
}
|
|
38179
|
+
}
|
|
38180
|
+
}
|
|
38181
|
+
},
|
|
38182
|
+
"409": {
|
|
38183
|
+
"description": "`organization_domain_taken` — Another organization of this tenant already verified this domain. A domain belongs to one organization.",
|
|
38184
|
+
"content": {
|
|
38185
|
+
"application/json": {
|
|
38186
|
+
"schema": {
|
|
38187
|
+
"allOf": [
|
|
38188
|
+
{
|
|
38189
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38190
|
+
},
|
|
38191
|
+
{
|
|
38192
|
+
"type": "object",
|
|
38193
|
+
"properties": {
|
|
38194
|
+
"error_code": {
|
|
38195
|
+
"type": "string",
|
|
38196
|
+
"enum": [
|
|
38197
|
+
"organization_domain_taken"
|
|
38198
|
+
]
|
|
38199
|
+
}
|
|
38200
|
+
}
|
|
38201
|
+
}
|
|
38202
|
+
]
|
|
38203
|
+
}
|
|
38204
|
+
}
|
|
38205
|
+
}
|
|
38206
|
+
},
|
|
38207
|
+
"429": {
|
|
38208
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
38209
|
+
"content": {
|
|
38210
|
+
"application/json": {
|
|
38211
|
+
"schema": {
|
|
38212
|
+
"allOf": [
|
|
38213
|
+
{
|
|
38214
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38215
|
+
},
|
|
38216
|
+
{
|
|
38217
|
+
"type": "object",
|
|
38218
|
+
"properties": {
|
|
38219
|
+
"error_code": {
|
|
38220
|
+
"type": "string",
|
|
38221
|
+
"enum": [
|
|
38222
|
+
"too_many_requests"
|
|
38223
|
+
]
|
|
38224
|
+
}
|
|
38225
|
+
}
|
|
38226
|
+
}
|
|
38227
|
+
]
|
|
38228
|
+
}
|
|
38229
|
+
}
|
|
38230
|
+
}
|
|
38231
|
+
},
|
|
38232
|
+
"500": {
|
|
38233
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
38234
|
+
"content": {
|
|
38235
|
+
"application/json": {
|
|
38236
|
+
"schema": {
|
|
38237
|
+
"allOf": [
|
|
38238
|
+
{
|
|
38239
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38240
|
+
},
|
|
38241
|
+
{
|
|
38242
|
+
"type": "object",
|
|
38243
|
+
"properties": {
|
|
38244
|
+
"error_code": {
|
|
38245
|
+
"type": "string",
|
|
38246
|
+
"enum": [
|
|
38247
|
+
"internal_error"
|
|
38248
|
+
]
|
|
38249
|
+
}
|
|
38250
|
+
}
|
|
38251
|
+
}
|
|
38252
|
+
]
|
|
38253
|
+
}
|
|
38254
|
+
}
|
|
38255
|
+
}
|
|
38256
|
+
},
|
|
38257
|
+
"503": {
|
|
38258
|
+
"description": "`plan_unavailable` — The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.",
|
|
38259
|
+
"content": {
|
|
38260
|
+
"application/json": {
|
|
38261
|
+
"schema": {
|
|
38262
|
+
"allOf": [
|
|
38263
|
+
{
|
|
38264
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38265
|
+
},
|
|
38266
|
+
{
|
|
38267
|
+
"type": "object",
|
|
38268
|
+
"properties": {
|
|
38269
|
+
"error_code": {
|
|
38270
|
+
"type": "string",
|
|
38271
|
+
"enum": [
|
|
38272
|
+
"plan_unavailable"
|
|
38273
|
+
]
|
|
38274
|
+
}
|
|
38275
|
+
}
|
|
38276
|
+
}
|
|
38277
|
+
]
|
|
38278
|
+
}
|
|
38279
|
+
}
|
|
38280
|
+
}
|
|
38281
|
+
}
|
|
38282
|
+
}
|
|
38283
|
+
}
|
|
38284
|
+
},
|
|
38285
|
+
"/organization/{organization_id}/domain/{domain}": {
|
|
38286
|
+
"delete": {
|
|
38287
|
+
"operationId": "organization/removeDomain",
|
|
38288
|
+
"summary": "Remove an email domain from an Organization",
|
|
38289
|
+
"tags": [
|
|
38290
|
+
"organization"
|
|
38291
|
+
],
|
|
38292
|
+
"description": "Removes the domain, verified or not. Logins of people already in the organization are unaffected.",
|
|
38293
|
+
"parameters": [
|
|
38294
|
+
{
|
|
38295
|
+
"schema": {
|
|
38296
|
+
"type": "string"
|
|
38297
|
+
},
|
|
38298
|
+
"in": "path",
|
|
38299
|
+
"name": "organization_id",
|
|
38300
|
+
"required": true
|
|
38301
|
+
},
|
|
38302
|
+
{
|
|
38303
|
+
"schema": {
|
|
38304
|
+
"type": "string"
|
|
38305
|
+
},
|
|
38306
|
+
"in": "path",
|
|
38307
|
+
"name": "domain",
|
|
38308
|
+
"required": true
|
|
38309
|
+
}
|
|
38310
|
+
],
|
|
38311
|
+
"security": [
|
|
38312
|
+
{
|
|
38313
|
+
"bearerAuth": []
|
|
38314
|
+
}
|
|
38315
|
+
],
|
|
38316
|
+
"responses": {
|
|
38317
|
+
"200": {
|
|
38318
|
+
"description": "Organization",
|
|
38319
|
+
"content": {
|
|
38320
|
+
"application/json": {
|
|
38321
|
+
"schema": {
|
|
38322
|
+
"type": "object",
|
|
38323
|
+
"required": [
|
|
38324
|
+
"id",
|
|
38325
|
+
"name",
|
|
38326
|
+
"slug",
|
|
38327
|
+
"description",
|
|
38328
|
+
"logo_url",
|
|
38329
|
+
"domains",
|
|
38330
|
+
"admins",
|
|
38331
|
+
"account",
|
|
38332
|
+
"createdAt"
|
|
38333
|
+
],
|
|
38334
|
+
"properties": {
|
|
38335
|
+
"id": {
|
|
38336
|
+
"type": "string",
|
|
38337
|
+
"description": "Organization ID"
|
|
38338
|
+
},
|
|
38339
|
+
"name": {
|
|
38340
|
+
"type": "string",
|
|
38341
|
+
"description": "Human-readable name of the organization.",
|
|
38342
|
+
"example": "Acme Inc."
|
|
38343
|
+
},
|
|
38344
|
+
"slug": {
|
|
38345
|
+
"type": "string",
|
|
38346
|
+
"description": "URL-safe identifier derived from `name`. Unique within the tenant.",
|
|
38347
|
+
"example": "acme-inc"
|
|
38348
|
+
},
|
|
38349
|
+
"description": {
|
|
38350
|
+
"type": "string",
|
|
38351
|
+
"description": "Optional free-form description.",
|
|
38352
|
+
"nullable": true
|
|
38353
|
+
},
|
|
38354
|
+
"logo_url": {
|
|
38355
|
+
"type": "string",
|
|
38356
|
+
"description": "Optional URL of the organization logo.",
|
|
38357
|
+
"nullable": true
|
|
38358
|
+
},
|
|
38359
|
+
"domains": {
|
|
38360
|
+
"type": "array",
|
|
38361
|
+
"items": {
|
|
38362
|
+
"type": "object",
|
|
38363
|
+
"required": [
|
|
38364
|
+
"domain",
|
|
38365
|
+
"verification_token",
|
|
38366
|
+
"verified_at"
|
|
38367
|
+
],
|
|
38368
|
+
"properties": {
|
|
38369
|
+
"domain": {
|
|
38370
|
+
"type": "string",
|
|
38371
|
+
"example": "acme.com"
|
|
38372
|
+
},
|
|
38373
|
+
"verification_token": {
|
|
38374
|
+
"type": "string",
|
|
38375
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
38376
|
+
},
|
|
38377
|
+
"verified_at": {
|
|
38378
|
+
"type": "string",
|
|
38379
|
+
"format": "date-time",
|
|
38380
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
38381
|
+
"nullable": true
|
|
38382
|
+
}
|
|
38383
|
+
}
|
|
38384
|
+
},
|
|
38385
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
38386
|
+
},
|
|
38387
|
+
"admins": {
|
|
38388
|
+
"type": "array",
|
|
38389
|
+
"items": {
|
|
38390
|
+
"type": "string"
|
|
38391
|
+
},
|
|
38392
|
+
"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."
|
|
38393
|
+
},
|
|
38394
|
+
"account": {
|
|
38395
|
+
"type": "string",
|
|
38396
|
+
"description": "Object is related with this account"
|
|
38397
|
+
},
|
|
38398
|
+
"metadata": {
|
|
38399
|
+
"type": "object",
|
|
38400
|
+
"properties": {},
|
|
38401
|
+
"additionalProperties": true,
|
|
38402
|
+
"description": "OrganizationMetadata",
|
|
38403
|
+
"default": {}
|
|
38404
|
+
},
|
|
38405
|
+
"createdAt": {
|
|
38406
|
+
"type": "string",
|
|
38407
|
+
"description": "Organization creation date"
|
|
38408
|
+
},
|
|
38409
|
+
"updatedAt": {
|
|
38410
|
+
"type": "string",
|
|
38411
|
+
"description": "Organization updated date"
|
|
38412
|
+
}
|
|
38413
|
+
},
|
|
38414
|
+
"description": "Organization"
|
|
38415
|
+
}
|
|
38416
|
+
}
|
|
38417
|
+
}
|
|
38418
|
+
},
|
|
38419
|
+
"400": {
|
|
38420
|
+
"description": "`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
38421
|
+
"content": {
|
|
38422
|
+
"application/json": {
|
|
38423
|
+
"schema": {
|
|
38424
|
+
"allOf": [
|
|
38425
|
+
{
|
|
38426
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38427
|
+
},
|
|
38428
|
+
{
|
|
38429
|
+
"type": "object",
|
|
38430
|
+
"properties": {
|
|
38431
|
+
"error_code": {
|
|
38432
|
+
"type": "string",
|
|
38433
|
+
"enum": [
|
|
38434
|
+
"validation_error"
|
|
38435
|
+
]
|
|
38436
|
+
}
|
|
38437
|
+
}
|
|
38438
|
+
}
|
|
38439
|
+
]
|
|
38440
|
+
}
|
|
38441
|
+
}
|
|
38442
|
+
}
|
|
38443
|
+
},
|
|
38444
|
+
"401": {
|
|
38445
|
+
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
38446
|
+
"content": {
|
|
38447
|
+
"application/json": {
|
|
38448
|
+
"schema": {
|
|
38449
|
+
"allOf": [
|
|
38450
|
+
{
|
|
38451
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38452
|
+
},
|
|
38453
|
+
{
|
|
38454
|
+
"type": "object",
|
|
38455
|
+
"properties": {
|
|
38456
|
+
"error_code": {
|
|
38457
|
+
"type": "string",
|
|
38458
|
+
"enum": [
|
|
38459
|
+
"unauthorized"
|
|
38460
|
+
]
|
|
38461
|
+
}
|
|
38462
|
+
}
|
|
38463
|
+
}
|
|
38464
|
+
]
|
|
38465
|
+
}
|
|
38466
|
+
}
|
|
38467
|
+
}
|
|
38468
|
+
},
|
|
38469
|
+
"403": {
|
|
38470
|
+
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
38471
|
+
"content": {
|
|
38472
|
+
"application/json": {
|
|
38473
|
+
"schema": {
|
|
38474
|
+
"allOf": [
|
|
38475
|
+
{
|
|
38476
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38477
|
+
},
|
|
38478
|
+
{
|
|
38479
|
+
"type": "object",
|
|
38480
|
+
"properties": {
|
|
38481
|
+
"error_code": {
|
|
38482
|
+
"type": "string",
|
|
38483
|
+
"enum": [
|
|
38484
|
+
"forbidden",
|
|
38485
|
+
"insufficient_scope",
|
|
38486
|
+
"user_suspended"
|
|
38487
|
+
]
|
|
38488
|
+
}
|
|
38489
|
+
}
|
|
38490
|
+
}
|
|
38491
|
+
]
|
|
38492
|
+
}
|
|
38493
|
+
}
|
|
38494
|
+
}
|
|
38495
|
+
},
|
|
38496
|
+
"404": {
|
|
38497
|
+
"description": "`organization_not_found` — No organization with that id in this account.\n\n`organization_domain_not_found` — The organization has no such domain.\n\n`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
38498
|
+
"content": {
|
|
38499
|
+
"application/json": {
|
|
38500
|
+
"schema": {
|
|
38501
|
+
"allOf": [
|
|
38502
|
+
{
|
|
38503
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38504
|
+
},
|
|
38505
|
+
{
|
|
38506
|
+
"type": "object",
|
|
38507
|
+
"properties": {
|
|
38508
|
+
"error_code": {
|
|
38509
|
+
"type": "string",
|
|
38510
|
+
"enum": [
|
|
38511
|
+
"organization_not_found",
|
|
38512
|
+
"organization_domain_not_found",
|
|
38513
|
+
"account_not_found"
|
|
38514
|
+
]
|
|
38515
|
+
}
|
|
38516
|
+
}
|
|
38517
|
+
}
|
|
38518
|
+
]
|
|
38519
|
+
}
|
|
38520
|
+
}
|
|
38521
|
+
}
|
|
38522
|
+
},
|
|
38523
|
+
"429": {
|
|
38524
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
38525
|
+
"content": {
|
|
38526
|
+
"application/json": {
|
|
38527
|
+
"schema": {
|
|
38528
|
+
"allOf": [
|
|
38529
|
+
{
|
|
38530
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38531
|
+
},
|
|
38532
|
+
{
|
|
38533
|
+
"type": "object",
|
|
38534
|
+
"properties": {
|
|
38535
|
+
"error_code": {
|
|
38536
|
+
"type": "string",
|
|
38537
|
+
"enum": [
|
|
38538
|
+
"too_many_requests"
|
|
38539
|
+
]
|
|
38540
|
+
}
|
|
38541
|
+
}
|
|
38542
|
+
}
|
|
38543
|
+
]
|
|
38544
|
+
}
|
|
38545
|
+
}
|
|
38546
|
+
}
|
|
38547
|
+
},
|
|
38548
|
+
"500": {
|
|
38549
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
38550
|
+
"content": {
|
|
38551
|
+
"application/json": {
|
|
38552
|
+
"schema": {
|
|
38553
|
+
"allOf": [
|
|
38554
|
+
{
|
|
38555
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
38556
|
+
},
|
|
38557
|
+
{
|
|
38558
|
+
"type": "object",
|
|
38559
|
+
"properties": {
|
|
38560
|
+
"error_code": {
|
|
38561
|
+
"type": "string",
|
|
38562
|
+
"enum": [
|
|
38563
|
+
"internal_error"
|
|
38564
|
+
]
|
|
38565
|
+
}
|
|
38566
|
+
}
|
|
38567
|
+
}
|
|
38568
|
+
]
|
|
38569
|
+
}
|
|
38570
|
+
}
|
|
38571
|
+
}
|
|
38572
|
+
}
|
|
38573
|
+
}
|
|
38574
|
+
}
|
|
38575
|
+
},
|
|
37352
38576
|
"/teammember": {
|
|
37353
38577
|
"get": {
|
|
37354
38578
|
"operationId": "teammember/list",
|