diff --git a/changelog.d/3-bug-fixes/WPB-11973-bump-api-version b/changelog.d/3-bug-fixes/WPB-11973-bump-api-version
new file mode 100644
index 00000000000..12a7567a59e
--- /dev/null
+++ b/changelog.d/3-bug-fixes/WPB-11973-bump-api-version
@@ -0,0 +1 @@
+Freeze API version 7, create new dev version 8. Also update checklist.
\ No newline at end of file
diff --git a/docs/src/developer/developer/api-versioning.md b/docs/src/developer/developer/api-versioning.md
index 1ef2f7bc6fd..f7998422726 100644
--- a/docs/src/developer/developer/api-versioning.md
+++ b/docs/src/developer/developer/api-versioning.md
@@ -115,8 +115,7 @@ the version. In these example we assume that version `V6` should be finalized an
- In the same `Version` module update the `developmentVersions` value to list
only the new version.
- In `services/brig/src/Brig/API/Public.hs`
- - update `versionedSwaggerDocsAPI` so that the finalized version points to the pregenerated swagger
- - and `internalEndpointsSwaggerDocsAPI` so that the finalized version `V6`, the new version `V7`, as well as the unversioned path point to the swagger of the internal API, and the previous latest stable version V5 points to an empty swagger.
+ - update `versionedSwaggerDocsAPI` so that the finalized version points to the pregenerated swagger, and the dynamically generated swagger spits out swagger for the new `V7`.
- Set the version for `gDefaultAPIVersion` in `integration/test/Testlib/Env.hs` to 7.
- Consider updating the `backendApiVersion` value in Stern, which is
unit-tested by checking if it is listed as supported in the response to `GET
diff --git a/integration/test/Test/Client.hs b/integration/test/Test/Client.hs
index 8c3101737dd..1b4fb5b6971 100644
--- a/integration/test/Test/Client.hs
+++ b/integration/test/Test/Client.hs
@@ -104,8 +104,8 @@ testUpdateClientWithConsumableNotificationsCapability = do
resp.status `shouldMatchInt` 200
resp.json %. "0.capabilities" `shouldMatch` [consumeCapability]
-testGetClientCapabilitiesV6 :: App ()
-testGetClientCapabilitiesV6 = do
+testGetClientCapabilitiesV7 :: App ()
+testGetClientCapabilitiesV7 = do
let allCapabilities = ["legalhold-implicit-consent", "consumable-notifications"]
alice <- randomUser OwnDomain def
addClient alice def {acapabilities = Just allCapabilities} `bindResponse` \resp -> do
@@ -116,8 +116,8 @@ testGetClientCapabilitiesV6 = do
resp.status `shouldMatchInt` 200
resp.json %. "0.capabilities" `shouldMatchSet` allCapabilities
- -- In API v6 and below, the "capabilities" field is an enum, so having a new
+ -- In API v7 and below, the "capabilities" field is an enum, so having a new
-- value for this enum is a breaking change.
- withAPIVersion 6 $ getSelfClients alice `bindResponse` \resp -> do
+ withAPIVersion 7 $ getSelfClients alice `bindResponse` \resp -> do
resp.status `shouldMatchInt` 200
resp.json %. "0.capabilities.capabilities" `shouldMatchSet` ["legalhold-implicit-consent"]
diff --git a/integration/test/Test/Swagger.hs b/integration/test/Test/Swagger.hs
index 571bd1ab245..a84fc7b5419 100644
--- a/integration/test/Test/Swagger.hs
+++ b/integration/test/Test/Swagger.hs
@@ -13,7 +13,7 @@ import Testlib.Prelude
import UnliftIO.Temporary
existingVersions :: Set Int
-existingVersions = Set.fromList [0, 1, 2, 3, 4, 5, 6, 7]
+existingVersions = Set.fromList [0, 1, 2, 3, 4, 5, 6, 7, 8]
internalApis :: Set String
internalApis = Set.fromList ["brig", "cannon", "cargohold", "cannon", "spar"]
@@ -76,16 +76,12 @@ testSwaggerToc = do
bindResponse (get path) $ \resp -> do
resp.status `shouldMatchInt` 200
let body = cs @_ @String resp.body
- body `shouldMatch` html
forM_ existingVersions $ \v ->
- body `shouldContainString` ("v" <> show v)
+ body `shouldContainString` ("\nv" <> show v <> ":")
where
get :: String -> App Response
get path = rawBaseRequest OwnDomain Brig Unversioned path >>= submit "GET"
- html :: String
- html = "
OpenAPI 3.0 docs for all Wire APIs
\nThis wire-server system provides OpenAPI 3.0 documentation of our HTTP REST API.
The openapi docs are correct by construction (compiled from the server code), and more or less complete.
Some endpoints are version-controlled. Show all supported versions. find out more.\n
Public (all available versions)
\nv0: \nswagger-ui; \nswagger.json\n
\nv1: \nswagger-ui; \nswagger.json\n
\nv2: \nswagger-ui; \nswagger.json\n
\nv3: \nswagger-ui; \nswagger.json\n
\nv4: \nswagger-ui; \nswagger.json\n
\nv5: \nswagger-ui; \nswagger.json\n
\nv6: \nswagger-ui; \nswagger.json\n
\nv7: \nswagger-ui; \nswagger.json\n
\n\nInternal (not versioned)
\nOpenapi docs for internal endpoints are served per service. I.e. there's one for `brig`, one for `cannon`, etc.. This is because Openapi doesn't play well with multiple actions having the same combination of HTTP method and URL path.
\nbrig:
\nswagger-ui; \nswagger.json\n
\ngalley:
\nswagger-ui; \nswagger.json\n
\nspar:
\nswagger-ui; \nswagger.json\n
\ncargohold:
\nswagger-ui; \nswagger.json\n
\ngundeck:
\nswagger-ui; \nswagger.json\n
\ncannon:
\nswagger-ui; \nswagger.json\n
\nproxy:
\nswagger-ui; \nswagger.json\n
\n\nFederated API (backend-to-backend)
\nbrig (v0):
swagger-ui; swagger.json
brig (v1):
swagger-ui; swagger.json
brig (v2):
swagger-ui; swagger.json
\ngalley (v0):
swagger-ui; swagger.json
galley (v1):
swagger-ui; swagger.json
galley (v2):
swagger-ui; swagger.json
\ncargohold (v0):
swagger-ui; swagger.json
cargohold (v1):
swagger-ui; swagger.json
cargohold (v2):
swagger-ui; swagger.json
\n\n\n"
-
data Swagger = SwaggerPublic | SwaggerInternal Service
instance TestCases Swagger where
diff --git a/integration/test/Testlib/Env.hs b/integration/test/Testlib/Env.hs
index f981f64dd52..2a9d3f8dafd 100644
--- a/integration/test/Testlib/Env.hs
+++ b/integration/test/Testlib/Env.hs
@@ -103,7 +103,7 @@ mkGlobalEnv cfgFile = do
gFederationV0Domain = intConfig.federationV0.originDomain,
gFederationV1Domain = intConfig.federationV1.originDomain,
gDynamicDomains = (.domain) <$> Map.elems intConfig.dynamicBackends,
- gDefaultAPIVersion = 7,
+ gDefaultAPIVersion = 8,
gManager = manager,
gServicesCwdBase = devEnvProjectRoot <&> (> "services"),
gBackendResourcePool = resourcePool,
diff --git a/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs b/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs
index 9895edccc97..b5d02b298a0 100644
--- a/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs
+++ b/libs/wire-api/src/Wire/API/Routes/Public/Brig.hs
@@ -750,9 +750,9 @@ type UserClientAPI =
-- - ClientAdded event to self
-- - ClientRemoved event to self, if removing old clients due to max number
Named
- "add-client-v6"
+ "add-client@v7"
( Summary "Register a new client"
- :> Until 'V7
+ :> Until 'V8
:> CanThrow 'TooManyClients
:> CanThrow 'MissingAuth
:> CanThrow 'MalformedPrekeys
@@ -761,20 +761,20 @@ type UserClientAPI =
:> ZLocalUser
:> ZConn
:> "clients"
- :> ReqBody '[JSON] NewClient
+ :> VersionedReqBody 'V7 '[JSON] NewClient
:> MultiVerb1
'POST
'[JSON]
( WithHeaders
ClientHeaders
Client
- (VersionedRespond 'V6 201 "Client registered" Client)
+ (VersionedRespond 'V7 201 "Client registered" Client)
)
)
:<|> Named
"add-client"
( Summary "Register a new client"
- :> From 'V6
+ :> From 'V8
:> CanThrow 'TooManyClients
:> CanThrow 'MissingAuth
:> CanThrow 'MalformedPrekeys
@@ -793,6 +793,17 @@ type UserClientAPI =
(Respond 201 "Client registered" Client)
)
)
+ :<|> Named
+ "update-client@v7"
+ ( Summary "Update a registered client"
+ :> Until 'V8
+ :> CanThrow 'MalformedPrekeys
+ :> ZUser
+ :> "clients"
+ :> CaptureClientId "client"
+ :> VersionedReqBody 'V7 '[JSON] UpdateClient
+ :> MultiVerb1 'PUT '[JSON] (RespondEmpty 200 "Client updated")
+ )
:<|> Named
"update-client"
( Summary "Update a registered client"
@@ -801,7 +812,7 @@ type UserClientAPI =
:> "clients"
:> CaptureClientId "client"
:> ReqBody '[JSON] UpdateClient
- :> MultiVerb 'PUT '[JSON] '[RespondEmpty 200 "Client updated"] ()
+ :> MultiVerb1 'PUT '[JSON] (RespondEmpty 200 "Client updated")
)
:<|>
-- This endpoint can lead to the following events being sent:
@@ -817,21 +828,21 @@ type UserClientAPI =
:> MultiVerb 'DELETE '[JSON] '[RespondEmpty 200 "Client deleted"] ()
)
:<|> Named
- "list-clients-v6"
+ "list-clients@v7"
( Summary "List the registered clients"
- :> Until 'V7
+ :> Until 'V8
:> ZUser
:> "clients"
:> MultiVerb1
'GET
'[JSON]
- ( VersionedRespond 'V6 200 "List of clients" [Client]
+ ( VersionedRespond 'V7 200 "List of clients" [Client]
)
)
:<|> Named
"list-clients"
( Summary "List the registered clients"
- :> From 'V7
+ :> From 'V8
:> ZUser
:> "clients"
:> MultiVerb1
@@ -841,9 +852,9 @@ type UserClientAPI =
)
)
:<|> Named
- "get-client-v6"
+ "get-client@v7"
( Summary "Get a registered client by ID"
- :> Until 'V7
+ :> Until 'V8
:> ZUser
:> "clients"
:> CaptureClientId "client"
@@ -851,14 +862,14 @@ type UserClientAPI =
'GET
'[JSON]
'[ EmptyErrorForLegacyReasons 404 "Client not found",
- VersionedRespond 'V6 200 "Client found" Client
+ VersionedRespond 'V7 200 "Client found" Client
]
(Maybe Client)
)
:<|> Named
"get-client"
( Summary "Get a registered client by ID"
- :> From 'V7
+ :> From 'V8
:> ZUser
:> "clients"
:> CaptureClientId "client"
@@ -870,6 +881,19 @@ type UserClientAPI =
]
(Maybe Client)
)
+ :<|> Named
+ "get-client-capabilities@v7"
+ ( Summary "Read back what the client has been posting about itself"
+ :> Until 'V8
+ :> ZUser
+ :> "clients"
+ :> CaptureClientId "client"
+ :> "capabilities"
+ :> MultiVerb1
+ 'GET
+ '[JSON]
+ (VersionedRespond 'V7 200 "capabilities" ClientCapabilityList)
+ )
:<|> Named
"get-client-capabilities"
( Summary "Read back what the client has been posting about itself"
diff --git a/libs/wire-api/src/Wire/API/Routes/Public/Brig/Bot.hs b/libs/wire-api/src/Wire/API/Routes/Public/Brig/Bot.hs
index 4c072cf0210..1576df42d0a 100644
--- a/libs/wire-api/src/Wire/API/Routes/Public/Brig/Bot.hs
+++ b/libs/wire-api/src/Wire/API/Routes/Public/Brig/Bot.hs
@@ -146,9 +146,9 @@ type BotAPI =
:> MultiVerb1 'POST '[JSON] (RespondEmpty 200 "")
)
:<|> Named
- "bot-get-client-v6"
+ "bot-get-client@v7"
( Summary "Get client for bot"
- :> Until 'V7
+ :> Until 'V8
:> CanThrow 'AccessDenied
:> CanThrow 'ClientNotFound
:> ZBot
@@ -158,14 +158,14 @@ type BotAPI =
'GET
'[JSON]
'[ ErrorResponse 'ClientNotFound,
- VersionedRespond 'V6 200 "Client found" Client
+ VersionedRespond 'V7 200 "Client found" Client
]
(Maybe Client)
)
:<|> Named
"bot-get-client"
( Summary "Get client for bot"
- :> From 'V7
+ :> From 'V8
:> CanThrow 'AccessDenied
:> CanThrow 'ClientNotFound
:> ZBot
diff --git a/libs/wire-api/src/Wire/API/Routes/Public/Cannon.hs b/libs/wire-api/src/Wire/API/Routes/Public/Cannon.hs
index c6f55ef6d6d..03742511080 100644
--- a/libs/wire-api/src/Wire/API/Routes/Public/Cannon.hs
+++ b/libs/wire-api/src/Wire/API/Routes/Public/Cannon.hs
@@ -28,6 +28,7 @@ type CannonAPI =
Named
"await-notifications"
( Summary "Establish websocket connection"
+ -- Description "This is the legacy variant of \"consume-events\""
:> "await"
:> ZUser
:> ZConn
@@ -44,6 +45,8 @@ type CannonAPI =
:<|> Named
"consume-events"
( Summary "Consume events over a websocket connection"
+ :> Description "This is the rabbitMQ-based variant of \"await-notifications\""
+ -- :> From 'V8 -- cannon is not versioned yet
:> "events"
:> ZUser
:> QueryParam'
diff --git a/libs/wire-api/src/Wire/API/Routes/Version.hs b/libs/wire-api/src/Wire/API/Routes/Version.hs
index 92e095f360f..4ecd8475fbc 100644
--- a/libs/wire-api/src/Wire/API/Routes/Version.hs
+++ b/libs/wire-api/src/Wire/API/Routes/Version.hs
@@ -80,7 +80,7 @@ import Wire.Arbitrary (Arbitrary, GenericUniform (GenericUniform))
-- and 'developmentVersions' stay in sync; everything else here should keep working without
-- change. See also documentation in the *docs* directory.
-- https://docs.wire.com/developer/developer/api-versioning.html#version-bump-checklist
-data Version = V0 | V1 | V2 | V3 | V4 | V5 | V6 | V7
+data Version = V0 | V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8
deriving stock (Eq, Ord, Bounded, Enum, Show, Generic)
deriving (FromJSON, ToJSON) via (Schema Version)
deriving (Arbitrary) via (GenericUniform Version)
@@ -100,6 +100,7 @@ versionInt V4 = 4
versionInt V5 = 5
versionInt V6 = 6
versionInt V7 = 7
+versionInt V8 = 8
supportedVersions :: [Version]
supportedVersions = [minBound .. maxBound]
@@ -210,7 +211,8 @@ isDevelopmentVersion V3 = False
isDevelopmentVersion V4 = False
isDevelopmentVersion V5 = False
isDevelopmentVersion V6 = False
-isDevelopmentVersion _ = True
+isDevelopmentVersion V7 = False
+isDevelopmentVersion V8 = True
developmentVersions :: [Version]
developmentVersions = filter isDevelopmentVersion supportedVersions
diff --git a/libs/wire-api/src/Wire/API/User/Client.hs b/libs/wire-api/src/Wire/API/User/Client.hs
index 683417c0d6b..79aa53595c2 100644
--- a/libs/wire-api/src/Wire/API/User/Client.hs
+++ b/libs/wire-api/src/Wire/API/User/Client.hs
@@ -179,11 +179,11 @@ newtype ClientCapabilityList = ClientCapabilityList {fromClientCapabilityList ::
instance ToSchema ClientCapabilityList where
schema = capabilitiesSchema Nothing
-instance ToSchema (Versioned V6 ClientCapabilityList) where
+instance ToSchema (Versioned V7 ClientCapabilityList) where
schema =
- object "ClientCapabilityListV6" $
+ object "ClientCapabilityListV7" $
Versioned
- <$> unVersioned .= field "capabilities" (capabilitiesSchema (Just V6))
+ <$> unVersioned .= field "capabilities" (capabilitiesSchema (Just V7))
capabilitiesSchema ::
Maybe Version ->
@@ -196,7 +196,7 @@ capabilitiesSchema mVersion =
dropIncompatibleCapabilities :: Set ClientCapability -> Set ClientCapability
dropIncompatibleCapabilities caps =
case mVersion of
- Just v | v <= V6 -> Set.delete ClientSupportsConsumableNotifications caps
+ Just v | v <= V7 -> Set.delete ClientSupportsConsumableNotifications caps
_ -> caps
--------------------------------------------------------------------------------
@@ -528,21 +528,21 @@ clientSchema mVersion =
caps = case mVersion of
-- broken capability serialisation for backwards compatibility
Just v
- | v <= V6 ->
- dimap Versioned unVersioned $ schema @(Versioned V6 ClientCapabilityList)
+ | v <= V7 ->
+ dimap Versioned unVersioned $ schema @(Versioned V7 ClientCapabilityList)
_ -> schema @ClientCapabilityList
instance ToSchema Client where
schema = clientSchema Nothing
-instance ToSchema (Versioned 'V6 Client) where
- schema = Versioned <$> unVersioned .= clientSchema (Just V6)
+instance ToSchema (Versioned 'V7 Client) where
+ schema = Versioned <$> unVersioned .= clientSchema (Just V7)
-instance {-# OVERLAPPING #-} ToSchema (Versioned 'V6 [Client]) where
+instance {-# OVERLAPPING #-} ToSchema (Versioned 'V7 [Client]) where
schema =
Versioned
<$> unVersioned
- .= named "ClientList" (array (clientSchema (Just V6)))
+ .= named "ClientList" (array (clientSchema (Just V7)))
mlsPublicKeysFieldSchema :: ObjectSchema SwaggerDoc MLSPublicKeys
mlsPublicKeysFieldSchema = fromMaybe mempty <$> optField "mls_public_keys" mlsPublicKeysSchema
@@ -682,74 +682,80 @@ data NewClient = NewClient
deriving (Arbitrary) via (GenericUniform NewClient)
deriving (FromJSON, ToJSON, Swagger.ToSchema) via Schema NewClient
+newClientSchema :: Maybe Version -> ValueSchema NamedSwaggerDoc NewClient
+newClientSchema mVersion =
+ object "NewClient" $
+ NewClient
+ <$> newClientPrekeys
+ .= fieldWithDocModifier
+ "prekeys"
+ (description ?~ "Prekeys for other clients to establish OTR sessions.")
+ (array schema)
+ <*> newClientLastKey
+ .= fieldWithDocModifier
+ "lastkey"
+ ( description
+ ?~ "The last resort prekey for other clients to establish OTR sessions. \
+ \This key must have the ID 0xFFFF and is never deleted."
+ )
+ schema
+ <*> newClientType
+ .= fieldWithDocModifier
+ "type"
+ ( description
+ ?~ "The type of client to register. A user may have no more than \
+ \7 (seven) permanent clients and 1 (one) temporary client. When the \
+ \limit of permanent clients is reached, an error is returned. \
+ \When a temporary client already exists, it is replaced."
+ )
+ schema
+ <*> newClientLabel .= maybe_ (optField "label" schema)
+ <*> newClientClass
+ .= maybe_
+ ( optFieldWithDocModifier
+ "class"
+ ( description
+ ?~ "The device class this client belongs to. \
+ \Either 'phone', 'tablet', or 'desktop'."
+ )
+ schema
+ )
+ <*> newClientCookie
+ .= maybe_
+ ( optFieldWithDocModifier
+ "cookie"
+ (description ?~ "The cookie label, i.e. the label used when logging in.")
+ schema
+ )
+ <*> newClientPassword
+ .= maybe_
+ ( optFieldWithDocModifier
+ "password"
+ ( description
+ ?~ "The password of the authenticated user for verification. \
+ \Note: Required for registration of the 2nd, 3rd, ... client."
+ )
+ schema
+ )
+ <*> newClientModel .= maybe_ (optField "model" schema)
+ <*> newClientCapabilities
+ .= maybe_
+ ( optFieldWithDocModifier
+ "capabilities"
+ ( description
+ ?~ "Hints provided by the client for the backend so it can \
+ \behave in a backwards-compatible way."
+ )
+ (capabilitiesSchema mVersion)
+ )
+ <*> newClientMLSPublicKeys .= mlsPublicKeysFieldSchema
+ <*> newClientVerificationCode .= maybe_ (optField "verification_code" schema)
+
instance ToSchema NewClient where
- schema =
- object "NewClient" $
- NewClient
- <$> newClientPrekeys
- .= fieldWithDocModifier
- "prekeys"
- (description ?~ "Prekeys for other clients to establish OTR sessions.")
- (array schema)
- <*> newClientLastKey
- .= fieldWithDocModifier
- "lastkey"
- ( description
- ?~ "The last resort prekey for other clients to establish OTR sessions. \
- \This key must have the ID 0xFFFF and is never deleted."
- )
- schema
- <*> newClientType
- .= fieldWithDocModifier
- "type"
- ( description
- ?~ "The type of client to register. A user may have no more than \
- \7 (seven) permanent clients and 1 (one) temporary client. When the \
- \limit of permanent clients is reached, an error is returned. \
- \When a temporary client already exists, it is replaced."
- )
- schema
- <*> newClientLabel .= maybe_ (optField "label" schema)
- <*> newClientClass
- .= maybe_
- ( optFieldWithDocModifier
- "class"
- ( description
- ?~ "The device class this client belongs to. \
- \Either 'phone', 'tablet', or 'desktop'."
- )
- schema
- )
- <*> newClientCookie
- .= maybe_
- ( optFieldWithDocModifier
- "cookie"
- (description ?~ "The cookie label, i.e. the label used when logging in.")
- schema
- )
- <*> newClientPassword
- .= maybe_
- ( optFieldWithDocModifier
- "password"
- ( description
- ?~ "The password of the authenticated user for verification. \
- \Note: Required for registration of the 2nd, 3rd, ... client."
- )
- schema
- )
- <*> newClientModel .= maybe_ (optField "model" schema)
- <*> newClientCapabilities
- .= maybe_
- ( optFieldWithDocModifier
- "capabilities"
- ( description
- ?~ "Hints provided by the client for the backend so it can \
- \behave in a backwards-compatible way."
- )
- schema
- )
- <*> newClientMLSPublicKeys .= mlsPublicKeysFieldSchema
- <*> newClientVerificationCode .= maybe_ (optField "verification_code" schema)
+ schema = newClientSchema Nothing
+
+instance ToSchema (Versioned 'V7 NewClient) where
+ schema = Versioned <$> unVersioned .= newClientSchema (Just V7)
newClient :: ClientType -> LastPrekey -> NewClient
newClient t k =
@@ -792,39 +798,45 @@ defUpdateClient =
updateClientMLSPublicKeys = mempty
}
+updateClientSchema :: Maybe Version -> ValueSchema NamedSwaggerDoc UpdateClient
+updateClientSchema mVersion =
+ object "UpdateClient" $
+ UpdateClient
+ <$> updateClientPrekeys
+ .= ( fromMaybe []
+ <$> optFieldWithDocModifier
+ "prekeys"
+ (description ?~ "New prekeys for other clients to establish OTR sessions.")
+ (array schema)
+ )
+ <*> updateClientLastKey
+ .= maybe_
+ ( optFieldWithDocModifier
+ "lastkey"
+ (description ?~ "New last-resort prekey.")
+ schema
+ )
+ <*> updateClientLabel
+ .= maybe_
+ ( optFieldWithDocModifier
+ "label"
+ (description ?~ "A new name for this client.")
+ schema
+ )
+ <*> updateClientCapabilities
+ .= maybe_
+ ( optFieldWithDocModifier
+ "capabilities"
+ (description ?~ "Hints provided by the client for the backend so it can behave in a backwards-compatible way.")
+ (capabilitiesSchema mVersion)
+ )
+ <*> updateClientMLSPublicKeys .= mlsPublicKeysFieldSchema
+
instance ToSchema UpdateClient where
- schema =
- object "UpdateClient" $
- UpdateClient
- <$> updateClientPrekeys
- .= ( fromMaybe []
- <$> optFieldWithDocModifier
- "prekeys"
- (description ?~ "New prekeys for other clients to establish OTR sessions.")
- (array schema)
- )
- <*> updateClientLastKey
- .= maybe_
- ( optFieldWithDocModifier
- "lastkey"
- (description ?~ "New last-resort prekey.")
- schema
- )
- <*> updateClientLabel
- .= maybe_
- ( optFieldWithDocModifier
- "label"
- (description ?~ "A new name for this client.")
- schema
- )
- <*> updateClientCapabilities
- .= maybe_
- ( optFieldWithDocModifier
- "capabilities"
- (description ?~ "Hints provided by the client for the backend so it can behave in a backwards-compatible way.")
- schema
- )
- <*> updateClientMLSPublicKeys .= mlsPublicKeysFieldSchema
+ schema = updateClientSchema Nothing
+
+instance ToSchema (Versioned 'V7 UpdateClient) where
+ schema = Versioned <$> unVersioned .= updateClientSchema (Just V7)
--------------------------------------------------------------------------------
-- RmClient
diff --git a/libs/wire-api/test/golden/Test/Wire/API/Golden/Generated.hs b/libs/wire-api/test/golden/Test/Wire/API/Golden/Generated.hs
index 7bd3fdc9952..875b031097c 100644
--- a/libs/wire-api/test/golden/Test/Wire/API/Golden/Generated.hs
+++ b/libs/wire-api/test/golden/Test/Wire/API/Golden/Generated.hs
@@ -1014,7 +1014,7 @@ tests =
testGroup "Golden: PubClient_user" $
testObjects [(Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_1, "testObject_PubClient_user_1.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_2, "testObject_PubClient_user_2.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_3, "testObject_PubClient_user_3.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_4, "testObject_PubClient_user_4.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_5, "testObject_PubClient_user_5.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_6, "testObject_PubClient_user_6.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_7, "testObject_PubClient_user_7.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_8, "testObject_PubClient_user_8.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_9, "testObject_PubClient_user_9.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_10, "testObject_PubClient_user_10.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_11, "testObject_PubClient_user_11.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_12, "testObject_PubClient_user_12.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_13, "testObject_PubClient_user_13.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_14, "testObject_PubClient_user_14.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_15, "testObject_PubClient_user_15.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_16, "testObject_PubClient_user_16.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_17, "testObject_PubClient_user_17.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_18, "testObject_PubClient_user_18.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_19, "testObject_PubClient_user_19.json"), (Test.Wire.API.Golden.Generated.PubClient_user.testObject_PubClient_user_20, "testObject_PubClient_user_20.json")],
testGroup "Golden: ClientV5_user" $
- testObjects [(Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_1, "testObject_ClientV6_user_1.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_2, "testObject_ClientV6_user_2.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_3, "testObject_ClientV6_user_3.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_4, "testObject_ClientV6_user_4.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_5, "testObject_ClientV6_user_5.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_6, "testObject_ClientV6_user_6.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_7, "testObject_ClientV6_user_7.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_8, "testObject_ClientV6_user_8.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_9, "testObject_ClientV6_user_9.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_10, "testObject_ClientV6_user_10.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_11, "testObject_ClientV6_user_11.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_12, "testObject_ClientV6_user_12.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_13, "testObject_ClientV6_user_13.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_14, "testObject_ClientV6_user_14.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_15, "testObject_ClientV6_user_15.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_16, "testObject_ClientV6_user_16.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_17, "testObject_ClientV6_user_17.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_18, "testObject_ClientV6_user_18.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_19, "testObject_ClientV6_user_19.json"), (Versioned @'V6 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_20, "testObject_ClientV6_user_20.json")],
+ testObjects [(Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_1, "testObject_ClientV6_user_1.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_2, "testObject_ClientV6_user_2.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_3, "testObject_ClientV6_user_3.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_4, "testObject_ClientV6_user_4.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_5, "testObject_ClientV6_user_5.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_6, "testObject_ClientV6_user_6.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_7, "testObject_ClientV6_user_7.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_8, "testObject_ClientV6_user_8.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_9, "testObject_ClientV6_user_9.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_10, "testObject_ClientV6_user_10.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_11, "testObject_ClientV6_user_11.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_12, "testObject_ClientV6_user_12.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_13, "testObject_ClientV6_user_13.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_14, "testObject_ClientV6_user_14.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_15, "testObject_ClientV6_user_15.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_16, "testObject_ClientV6_user_16.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_17, "testObject_ClientV6_user_17.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_18, "testObject_ClientV6_user_18.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_19, "testObject_ClientV6_user_19.json"), (Versioned @'V7 Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_20, "testObject_ClientV6_user_20.json")],
testGroup "Golden: Client_user" $
testObjects [(Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_1, "testObject_Client_user_1.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_2, "testObject_Client_user_2.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_3, "testObject_Client_user_3.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_4, "testObject_Client_user_4.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_5, "testObject_Client_user_5.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_6, "testObject_Client_user_6.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_7, "testObject_Client_user_7.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_8, "testObject_Client_user_8.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_9, "testObject_Client_user_9.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_10, "testObject_Client_user_10.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_11, "testObject_Client_user_11.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_12, "testObject_Client_user_12.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_13, "testObject_Client_user_13.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_14, "testObject_Client_user_14.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_15, "testObject_Client_user_15.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_16, "testObject_Client_user_16.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_17, "testObject_Client_user_17.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_18, "testObject_Client_user_18.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_19, "testObject_Client_user_19.json"), (Test.Wire.API.Golden.Generated.Client_user.testObject_Client_user_20, "testObject_Client_user_20.json")],
testGroup "Golden: NewClient_user" $
diff --git a/libs/wire-api/test/golden/Test/Wire/API/Golden/Manual/ClientCapabilityList.hs b/libs/wire-api/test/golden/Test/Wire/API/Golden/Manual/ClientCapabilityList.hs
index bbb616c990a..323e4d7d8b3 100644
--- a/libs/wire-api/test/golden/Test/Wire/API/Golden/Manual/ClientCapabilityList.hs
+++ b/libs/wire-api/test/golden/Test/Wire/API/Golden/Manual/ClientCapabilityList.hs
@@ -23,13 +23,13 @@ import Wire.API.Routes.Version
import Wire.API.Routes.Versioned
import Wire.API.User.Client (ClientCapability (..), ClientCapabilityList (..))
-testObject_ClientCapabilityList_1 :: Versioned V6 ClientCapabilityList
+testObject_ClientCapabilityList_1 :: Versioned V7 ClientCapabilityList
testObject_ClientCapabilityList_1 = Versioned $ ClientCapabilityList mempty
-testObject_ClientCapabilityList_2 :: Versioned V6 ClientCapabilityList
+testObject_ClientCapabilityList_2 :: Versioned V7 ClientCapabilityList
testObject_ClientCapabilityList_2 = Versioned $ ClientCapabilityList (Set.fromList [ClientSupportsLegalholdImplicitConsent])
-testObject_ClientCapabilityList_3 :: Versioned V6 ClientCapabilityList
+testObject_ClientCapabilityList_3 :: Versioned V7 ClientCapabilityList
testObject_ClientCapabilityList_3 =
Versioned $
ClientCapabilityList
diff --git a/services/brig/docs/swagger-v7.json b/services/brig/docs/swagger-v7.json
new file mode 100644
index 00000000000..8b4dab3dbef
--- /dev/null
+++ b/services/brig/docs/swagger-v7.json
@@ -0,0 +1,31085 @@
+{
+ "components": {
+ "schemas": {
+ "": {
+ "enum": [
+ "audio",
+ "books",
+ "business",
+ "design",
+ "education",
+ "entertainment",
+ "finance",
+ "fitness",
+ "food-drink",
+ "games",
+ "graphics",
+ "health",
+ "integration",
+ "lifestyle",
+ "media",
+ "medical",
+ "movies",
+ "music",
+ "news",
+ "photography",
+ "poll",
+ "productivity",
+ "quiz",
+ "rating",
+ "shopping",
+ "social",
+ "sports",
+ "travel",
+ "tutorial",
+ "video",
+ "weather"
+ ],
+ "type": "string"
+ },
+ "ASCII": {
+ "example": "aGVsbG8",
+ "type": "string"
+ },
+ "Access": {
+ "description": "How users can join conversations",
+ "enum": [
+ "private",
+ "invite",
+ "link",
+ "code"
+ ],
+ "type": "string"
+ },
+ "AccessRole": {
+ "description": "Which users/services can join conversations. This replaces legacy access roles and allows a more fine grained configuration of access roles, and in particular a separation of guest and services access.\n\nThis field is optional. If it is not present, the default will be `[team_member, non_team_member, service]`. Please note that an empty list is not allowed when creating a new conversation.",
+ "enum": [
+ "team_member",
+ "non_team_member",
+ "guest",
+ "service"
+ ],
+ "type": "string"
+ },
+ "AccessRoleLegacy": {
+ "deprecated": true,
+ "description": "Deprecated, please use access_role_v2",
+ "enum": [
+ "private",
+ "team",
+ "activated",
+ "non_activated"
+ ],
+ "type": "string"
+ },
+ "AccessToken": {
+ "properties": {
+ "access_token": {
+ "description": "The opaque access token string",
+ "type": "string"
+ },
+ "expires_in": {
+ "description": "The number of seconds this token is valid",
+ "type": "integer"
+ },
+ "token_type": {
+ "$ref": "#/components/schemas/TokenType"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "user",
+ "access_token",
+ "token_type",
+ "expires_in"
+ ],
+ "type": "object"
+ },
+ "AccessTokenType": {
+ "enum": [
+ "DPoP"
+ ],
+ "type": "string"
+ },
+ "Action": {
+ "enum": [
+ "add_conversation_member",
+ "remove_conversation_member",
+ "modify_conversation_name",
+ "modify_conversation_message_timer",
+ "modify_conversation_receipt_mode",
+ "modify_conversation_access",
+ "modify_other_conversation_member",
+ "leave_conversation",
+ "delete_conversation"
+ ],
+ "type": "string"
+ },
+ "Activate": {
+ "description": "Data for an activation request.",
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "dryrun": {
+ "description": "At least one of key, email, or phone has to be present while key takes precedence over email, and email takes precedence over phone. Whether to perform a dryrun, i.e. to only check whether activation would succeed. Dry-runs never issue access cookies or tokens on success but failures still count towards the maximum failure count.",
+ "type": "boolean"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "code",
+ "dryrun"
+ ],
+ "type": "object"
+ },
+ "ActivationResponse": {
+ "description": "Response body of a successful activation request",
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "first": {
+ "description": "Whether this is the first successful activation (i.e. account activation).",
+ "type": "boolean"
+ },
+ "sso_id": {
+ "$ref": "#/components/schemas/UserSSOId"
+ }
+ },
+ "type": "object"
+ },
+ "AddBot": {
+ "properties": {
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ },
+ "provider": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "service": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "provider",
+ "service"
+ ],
+ "type": "object"
+ },
+ "AddBotResponse": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "client": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "event": {
+ "$ref": "#/components/schemas/Event"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "client",
+ "name",
+ "accent_id",
+ "assets",
+ "event"
+ ],
+ "type": "object"
+ },
+ "AllTeamFeatures": {
+ "properties": {
+ "appLock": {
+ "$ref": "#/components/schemas/AppLockConfig.LockableFeature"
+ },
+ "classifiedDomains": {
+ "$ref": "#/components/schemas/ClassifiedDomainsConfig.LockableFeature"
+ },
+ "conferenceCalling": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig.LockableFeature"
+ },
+ "conversationGuestLinks": {
+ "$ref": "#/components/schemas/GuestLinksConfig.LockableFeature"
+ },
+ "digitalSignatures": {
+ "$ref": "#/components/schemas/DigitalSignaturesConfig.LockableFeature"
+ },
+ "enforceFileDownloadLocation": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation.LockableFeature"
+ },
+ "exposeInvitationURLsToTeamAdmin": {
+ "$ref": "#/components/schemas/ExposeInvitationURLsToTeamAdminConfig.LockableFeature"
+ },
+ "fileSharing": {
+ "$ref": "#/components/schemas/FileSharingConfig.LockableFeature"
+ },
+ "legalhold": {
+ "$ref": "#/components/schemas/LegalholdConfig.LockableFeature"
+ },
+ "limitedEventFanout": {
+ "$ref": "#/components/schemas/LimitedEventFanoutConfig.LockableFeature"
+ },
+ "mls": {
+ "$ref": "#/components/schemas/MLSConfig.LockableFeature"
+ },
+ "mlsE2EId": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig.LockableFeature"
+ },
+ "mlsMigration": {
+ "$ref": "#/components/schemas/MlsMigration.LockableFeature"
+ },
+ "outlookCalIntegration": {
+ "$ref": "#/components/schemas/OutlookCalIntegrationConfig.LockableFeature"
+ },
+ "searchVisibility": {
+ "$ref": "#/components/schemas/SearchVisibilityAvailableConfig.LockableFeature"
+ },
+ "searchVisibilityInbound": {
+ "$ref": "#/components/schemas/SearchVisibilityInboundConfig.LockableFeature"
+ },
+ "selfDeletingMessages": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig.LockableFeature"
+ },
+ "sndFactorPasswordChallenge": {
+ "$ref": "#/components/schemas/SndFactorPasswordChallengeConfig.LockableFeature"
+ },
+ "sso": {
+ "$ref": "#/components/schemas/SSOConfig.LockableFeature"
+ },
+ "validateSAMLemails": {
+ "$ref": "#/components/schemas/ValidateSAMLEmailsConfig.LockableFeature"
+ }
+ },
+ "required": [
+ "legalhold",
+ "sso",
+ "searchVisibility",
+ "searchVisibilityInbound",
+ "validateSAMLemails",
+ "digitalSignatures",
+ "appLock",
+ "fileSharing",
+ "classifiedDomains",
+ "conferenceCalling",
+ "selfDeletingMessages",
+ "conversationGuestLinks",
+ "sndFactorPasswordChallenge",
+ "mls",
+ "exposeInvitationURLsToTeamAdmin",
+ "outlookCalIntegration",
+ "mlsE2EId",
+ "mlsMigration",
+ "enforceFileDownloadLocation",
+ "limitedEventFanout"
+ ],
+ "type": "object"
+ },
+ "Alpha": {
+ "enum": [
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRO",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STD",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "UYI",
+ "UYU",
+ "UZS",
+ "VEF",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XTS",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+ ],
+ "type": "string"
+ },
+ "AppLockConfig": {
+ "properties": {
+ "enforceAppLock": {
+ "type": "boolean"
+ },
+ "inactivityTimeoutSecs": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "enforceAppLock",
+ "inactivityTimeoutSecs"
+ ],
+ "type": "object"
+ },
+ "AppLockConfig.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/AppLockConfig"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "AppLockConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/AppLockConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "ApproveLegalHoldForUserRequest": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "Asset": {
+ "properties": {
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "expires": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "key": {
+ "$ref": "#/components/schemas/AssetKey"
+ },
+ "token": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "key",
+ "domain"
+ ],
+ "type": "object"
+ },
+ "AssetKey": {
+ "example": "3-1-47de4580-ae51-4650-acbb-d10c028cb0ac",
+ "type": "string"
+ },
+ "AssetSize": {
+ "enum": [
+ "preview",
+ "complete"
+ ],
+ "type": "string"
+ },
+ "AssetSource": {},
+ "AssetType": {
+ "enum": [
+ "image"
+ ],
+ "type": "string"
+ },
+ "AuthnRequest": {
+ "properties": {
+ "iD": {
+ "$ref": "#/components/schemas/ID_*_AuthnRequest"
+ },
+ "issueInstant": {
+ "$ref": "#/components/schemas/Time"
+ },
+ "issuer": {
+ "type": "string"
+ },
+ "nameIDPolicy": {
+ "$ref": "#/components/schemas/NameIdPolicy"
+ }
+ },
+ "required": [
+ "iD",
+ "issueInstant",
+ "issuer"
+ ],
+ "type": "object"
+ },
+ "Base64ByteString": {
+ "example": "ZXhhbXBsZQo=",
+ "type": "string"
+ },
+ "BaseProtocol": {
+ "enum": [
+ "proteus",
+ "mls"
+ ],
+ "type": "string"
+ },
+ "BindingNewTeamUser": {
+ "properties": {
+ "currency": {
+ "$ref": "#/components/schemas/Alpha"
+ },
+ "icon": {
+ "$ref": "#/components/schemas/Icon"
+ },
+ "icon_key": {
+ "description": "team icon asset key",
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "members": {
+ "description": "initial team member ids (between 1 and 127)"
+ },
+ "name": {
+ "description": "team name",
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "icon"
+ ],
+ "type": "object"
+ },
+ "Body": {},
+ "BotConvView": {
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "members": {
+ "items": {
+ "$ref": "#/components/schemas/OtherMember"
+ },
+ "type": "array"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "members"
+ ],
+ "type": "object"
+ },
+ "BotUserView": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "handle": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "accent_id"
+ ],
+ "type": "object"
+ },
+ "CheckHandles": {
+ "properties": {
+ "handles": {
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 50,
+ "minItems": 1,
+ "type": "array"
+ },
+ "return": {
+ "maximum": 10,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "handles",
+ "return"
+ ],
+ "type": "object"
+ },
+ "CipherSuiteTag": {
+ "description": "The cipher suite of the corresponding MLS group",
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "ClassifiedDomainsConfig": {
+ "properties": {
+ "domains": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "domains"
+ ],
+ "type": "object"
+ },
+ "ClassifiedDomainsConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/ClassifiedDomainsConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "Client": {
+ "properties": {
+ "capabilities": {
+ "$ref": "#/components/schemas/ClientCapabilityList"
+ },
+ "class": {
+ "$ref": "#/components/schemas/ClientClass"
+ },
+ "cookie": {
+ "type": "string"
+ },
+ "id": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "last_active": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "mls_public_keys": {
+ "$ref": "#/components/schemas/MLSPublicKeys"
+ },
+ "model": {
+ "type": "string"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ClientType"
+ }
+ },
+ "required": [
+ "id",
+ "type",
+ "time"
+ ],
+ "type": "object"
+ },
+ "ClientCapability": {
+ "enum": [
+ "legalhold-implicit-consent"
+ ],
+ "type": "string"
+ },
+ "ClientCapabilityList": {
+ "properties": {
+ "capabilities": {
+ "description": "Hints provided by the client for the backend so it can behave in a backwards-compatible way.",
+ "items": {
+ "$ref": "#/components/schemas/ClientCapability"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "capabilities"
+ ],
+ "type": "object"
+ },
+ "ClientClass": {
+ "enum": [
+ "phone",
+ "tablet",
+ "desktop",
+ "legalhold"
+ ],
+ "type": "string"
+ },
+ "ClientIdentity": {
+ "properties": {
+ "client_id": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "user_id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "domain",
+ "user_id",
+ "client_id"
+ ],
+ "type": "object"
+ },
+ "ClientListv6": {
+ "items": {
+ "$ref": "#/components/schemas/Client"
+ },
+ "type": "array"
+ },
+ "ClientMismatch": {
+ "properties": {
+ "deleted": {
+ "$ref": "#/components/schemas/UserClients"
+ },
+ "missing": {
+ "$ref": "#/components/schemas/UserClients"
+ },
+ "redundant": {
+ "$ref": "#/components/schemas/UserClients"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ }
+ },
+ "required": [
+ "time",
+ "missing",
+ "redundant",
+ "deleted"
+ ],
+ "type": "object"
+ },
+ "ClientPrekey": {
+ "properties": {
+ "client": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "prekey": {
+ "$ref": "#/components/schemas/Prekey"
+ }
+ },
+ "required": [
+ "client",
+ "prekey"
+ ],
+ "type": "object"
+ },
+ "ClientType": {
+ "enum": [
+ "temporary",
+ "permanent",
+ "legalhold"
+ ],
+ "type": "string"
+ },
+ "Clientv6": {
+ "properties": {
+ "capabilities": {
+ "$ref": "#/components/schemas/ClientCapabilityList"
+ },
+ "class": {
+ "$ref": "#/components/schemas/ClientClass"
+ },
+ "cookie": {
+ "type": "string"
+ },
+ "id": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "last_active": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "mls_public_keys": {
+ "$ref": "#/components/schemas/MLSPublicKeys"
+ },
+ "model": {
+ "type": "string"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ClientType"
+ }
+ },
+ "required": [
+ "id",
+ "type",
+ "time"
+ ],
+ "type": "object"
+ },
+ "CodeChallengeMethod": {
+ "description": "The method used to encode the code challenge. Only `S256` is supported.",
+ "enum": [
+ "S256"
+ ],
+ "type": "string"
+ },
+ "CommitBundle": {
+ "description": "This object can only be parsed in TLS format. Please refer to the MLS specification for details."
+ },
+ "CompletePasswordReset": {
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "code",
+ "password"
+ ],
+ "type": "object"
+ },
+ "ConferenceCallingConfig": {
+ "properties": {
+ "useSFTForOneToOneCalls": {
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "ConferenceCallingConfig.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "ConferenceCallingConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "Connect": {
+ "properties": {
+ "email": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "qualified_recipient": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "recipient": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "qualified_recipient"
+ ],
+ "type": "object"
+ },
+ "ConnectionUpdate": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/Relation"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "Connections_Page": {
+ "properties": {
+ "connections": {
+ "items": {
+ "$ref": "#/components/schemas/UserConnection"
+ },
+ "type": "array"
+ },
+ "has_more": {
+ "type": "boolean"
+ },
+ "paging_state": {
+ "$ref": "#/components/schemas/Connections_PagingState"
+ }
+ },
+ "required": [
+ "connections",
+ "has_more",
+ "paging_state"
+ ],
+ "type": "object"
+ },
+ "Connections_PagingState": {
+ "type": "string"
+ },
+ "Contact": {
+ "description": "Contact discovered through search",
+ "properties": {
+ "accent_id": {
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "handle": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "type": "string"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "name"
+ ],
+ "type": "object"
+ },
+ "ConvMembers": {
+ "description": "Users of a conversation",
+ "properties": {
+ "others": {
+ "description": "All other current users of this conversation",
+ "items": {
+ "$ref": "#/components/schemas/OtherMember"
+ },
+ "type": "array"
+ },
+ "self": {
+ "$ref": "#/components/schemas/Member"
+ }
+ },
+ "required": [
+ "self",
+ "others"
+ ],
+ "type": "object"
+ },
+ "ConvTeamInfo": {
+ "description": "Team information of this conversation",
+ "properties": {
+ "managed": {
+ "description": "This field MUST NOT be used by clients. It is here only for backwards compatibility of the interface."
+ },
+ "teamid": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "teamid",
+ "managed"
+ ],
+ "type": "object"
+ },
+ "ConvType": {
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3
+ ],
+ "type": "integer"
+ },
+ "Conversation": {
+ "description": "A conversation object as returned from the server",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "type",
+ "access",
+ "access_role",
+ "members",
+ "group_id",
+ "epoch"
+ ],
+ "type": "object"
+ },
+ "ConversationAccessData": {
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "access",
+ "access_role"
+ ],
+ "type": "object"
+ },
+ "ConversationAccessDataV2": {
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "$ref": "#/components/schemas/AccessRoleLegacy"
+ },
+ "access_role_v2": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "access"
+ ],
+ "type": "object"
+ },
+ "ConversationCode": {
+ "description": "Contains conversation properties to update",
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "uri": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "key",
+ "code"
+ ],
+ "type": "object"
+ },
+ "ConversationCodeInfo": {
+ "description": "Contains conversation properties to update",
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "has_password": {
+ "description": "Whether the conversation has a password",
+ "type": "boolean"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "uri": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "key",
+ "code",
+ "has_password"
+ ],
+ "type": "object"
+ },
+ "ConversationCoverView": {
+ "description": "Limited view of Conversation.",
+ "properties": {
+ "has_password": {
+ "type": "boolean"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "has_password"
+ ],
+ "type": "object"
+ },
+ "ConversationIds_Page": {
+ "properties": {
+ "has_more": {
+ "type": "boolean"
+ },
+ "paging_state": {
+ "$ref": "#/components/schemas/ConversationIds_PagingState"
+ },
+ "qualified_conversations": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "qualified_conversations",
+ "has_more",
+ "paging_state"
+ ],
+ "type": "object"
+ },
+ "ConversationIds_PagingState": {
+ "type": "string"
+ },
+ "ConversationMessageTimerUpdate": {
+ "description": "Contains conversation properties to update",
+ "properties": {
+ "message_timer": {
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "ConversationReceiptModeUpdate": {
+ "description": "Contains conversation receipt mode to update to. Receipt mode tells clients whether certain types of receipts should be sent in the given conversation or not. How this value is interpreted is up to clients.",
+ "properties": {
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "receipt_mode"
+ ],
+ "type": "object"
+ },
+ "ConversationRename": {
+ "properties": {
+ "name": {
+ "description": "The new conversation name",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "ConversationRole": {
+ "properties": {
+ "actions": {
+ "description": "The set of actions allowed for this role",
+ "items": {
+ "$ref": "#/components/schemas/Action"
+ },
+ "type": "array"
+ },
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ }
+ }
+ },
+ "ConversationRolesList": {
+ "properties": {
+ "conversation_roles": {
+ "items": {
+ "$ref": "#/components/schemas/ConversationRole"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "conversation_roles"
+ ],
+ "type": "object"
+ },
+ "ConversationV2": {
+ "description": "A conversation object as returned from the server",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "$ref": "#/components/schemas/AccessRoleLegacy"
+ },
+ "access_role_v2": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/Epoch Timestamp"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "type",
+ "access",
+ "members",
+ "group_id",
+ "epoch",
+ "epoch_timestamp",
+ "cipher_suite"
+ ],
+ "type": "object"
+ },
+ "ConversationV3v3": {
+ "description": "A conversation object as returned from the server",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/Epoch Timestamp"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "type",
+ "access",
+ "access_role",
+ "members",
+ "group_id",
+ "epoch",
+ "epoch_timestamp",
+ "cipher_suite"
+ ],
+ "type": "object"
+ },
+ "ConversationV6v6": {
+ "description": "A conversation object as returned from the server",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "type",
+ "access",
+ "access_role",
+ "members",
+ "group_id",
+ "epoch"
+ ],
+ "type": "object"
+ },
+ "ConversationsResponse": {
+ "description": "Response object for getting metadata of a list of conversations",
+ "properties": {
+ "failed": {
+ "description": "The server failed to fetch these conversations, most likely due to network issues while contacting a remote server",
+ "items": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "type": "array"
+ },
+ "found": {
+ "items": {
+ "$ref": "#/components/schemas/Conversation"
+ },
+ "type": "array"
+ },
+ "not_found": {
+ "description": "These conversations either don't exist or are deleted.",
+ "items": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "found",
+ "not_found",
+ "failed"
+ ],
+ "type": "object"
+ },
+ "Cookie": {
+ "properties": {
+ "created": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "expires": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "id": {
+ "format": "int32",
+ "maximum": 4294967295,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "label": {
+ "type": "string"
+ },
+ "successor": {
+ "format": "int32",
+ "maximum": 4294967295,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "$ref": "#/components/schemas/CookieType"
+ }
+ },
+ "required": [
+ "id",
+ "type",
+ "created",
+ "expires"
+ ],
+ "type": "object"
+ },
+ "CookieList": {
+ "description": "List of cookie information",
+ "properties": {
+ "cookies": {
+ "items": {
+ "$ref": "#/components/schemas/Cookie"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "cookies"
+ ],
+ "type": "object"
+ },
+ "CookieType": {
+ "enum": [
+ "session",
+ "persistent"
+ ],
+ "type": "string"
+ },
+ "CreateConversationCodeRequest": {
+ "description": "Request body for creating a conversation code",
+ "properties": {
+ "password": {
+ "description": "Password for accessing the conversation via guest link. Set to null or omit for no password.",
+ "maxLength": 1024,
+ "minLength": 8,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "CreateGroupConversationv6": {
+ "description": "A created group-conversation object extended with a list of failed-to-add users",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "failed_to_add": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "type",
+ "access",
+ "access_role",
+ "members",
+ "group_id",
+ "epoch",
+ "failed_to_add"
+ ],
+ "type": "object"
+ },
+ "CreateOAuthAuthorizationCodeRequest": {
+ "properties": {
+ "client_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "code_challenge": {
+ "$ref": "#/components/schemas/OAuthCodeChallenge"
+ },
+ "code_challenge_method": {
+ "$ref": "#/components/schemas/CodeChallengeMethod"
+ },
+ "redirect_uri": {
+ "$ref": "#/components/schemas/RedirectUrl"
+ },
+ "response_type": {
+ "$ref": "#/components/schemas/OAuthResponseType"
+ },
+ "scope": {
+ "description": "The scopes which are requested to get authorization for, separated by a space",
+ "type": "string"
+ },
+ "state": {
+ "description": "An opaque value used by the client to maintain state between the request and callback. The authorization server includes this value when redirecting the user-agent back to the client. The parameter SHOULD be used for preventing cross-site request forgery",
+ "type": "string"
+ }
+ },
+ "required": [
+ "client_id",
+ "scope",
+ "response_type",
+ "redirect_uri",
+ "state",
+ "code_challenge_method",
+ "code_challenge"
+ ],
+ "type": "object"
+ },
+ "CreateScimToken": {
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "verification_code": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "description"
+ ],
+ "type": "object"
+ },
+ "CreateScimTokenResponse": {
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/ScimTokenInfo"
+ },
+ "token": {
+ "description": "Authentication token",
+ "type": "string"
+ }
+ },
+ "required": [
+ "token",
+ "info"
+ ],
+ "type": "object"
+ },
+ "CustomBackend": {
+ "description": "Description of a custom backend",
+ "properties": {
+ "config_json_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "webapp_welcome_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "config_json_url",
+ "webapp_welcome_url"
+ ],
+ "type": "object"
+ },
+ "DPoPAccessToken": {
+ "type": "string"
+ },
+ "DPoPAccessTokenResponse": {
+ "properties": {
+ "expires_in": {
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "token": {
+ "$ref": "#/components/schemas/DPoPAccessToken"
+ },
+ "type": {
+ "$ref": "#/components/schemas/AccessTokenType"
+ }
+ },
+ "required": [
+ "token",
+ "type",
+ "expires_in"
+ ],
+ "type": "object"
+ },
+ "DeleteClient": {
+ "properties": {
+ "password": {
+ "description": "The password of the authenticated user for verification. The password is not required for deleting temporary clients.",
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "DeleteKeyPackages": {
+ "properties": {
+ "key_packages": {
+ "items": {
+ "$ref": "#/components/schemas/KeyPackageRef"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "key_packages"
+ ],
+ "type": "object"
+ },
+ "DeleteProvider": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "password"
+ ],
+ "type": "object"
+ },
+ "DeleteService": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "password"
+ ],
+ "type": "object"
+ },
+ "DeleteSubConversationRequest": {
+ "description": "Delete an MLS subconversation",
+ "properties": {
+ "epoch": {
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ }
+ },
+ "required": [
+ "group_id",
+ "epoch"
+ ],
+ "type": "object"
+ },
+ "DeleteUser": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "DeletionCodeTimeout": {
+ "properties": {
+ "expires_in": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "expires_in"
+ ],
+ "type": "object"
+ },
+ "DeprecatedMatchingResult": {
+ "deprecated": true,
+ "properties": {
+ "auto-connects": {
+ "items": {},
+ "type": "array"
+ },
+ "results": {
+ "items": {},
+ "type": "array"
+ }
+ },
+ "required": [
+ "results",
+ "auto-connects"
+ ],
+ "type": "object"
+ },
+ "DigitalSignaturesConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "DisableLegalHoldForUserRequest": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "Domain": {
+ "example": "example.com",
+ "type": "string"
+ },
+ "EdMemberLeftReason": {
+ "enum": [
+ "left",
+ "user-deleted",
+ "removed"
+ ],
+ "type": "string"
+ },
+ "Either_OAuthAccessTokenRequest_OAuthRefreshAccessTokenRequest": {
+ "oneOf": [
+ {
+ "properties": {
+ "Left": {
+ "$ref": "#/components/schemas/OAuthAccessTokenRequest"
+ }
+ },
+ "required": [
+ "Left"
+ ],
+ "title": "Left",
+ "type": "object"
+ },
+ {
+ "properties": {
+ "Right": {
+ "$ref": "#/components/schemas/OAuthRefreshAccessTokenRequest"
+ }
+ },
+ "required": [
+ "Right"
+ ],
+ "title": "Right",
+ "type": "object"
+ }
+ ]
+ },
+ "Email": {
+ "type": "string"
+ },
+ "EmailUpdate": {
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ }
+ },
+ "required": [
+ "email"
+ ],
+ "type": "object"
+ },
+ "EnforceFileDownloadLocation": {
+ "properties": {
+ "enforcedDownloadLocation": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "EnforceFileDownloadLocation.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "EnforceFileDownloadLocation.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "Epoch Timestamp": {
+ "example": "2021-05-12T10:52:02Z",
+ "format": "yyyy-mm-ddThh:MM:ssZ",
+ "type": "string"
+ },
+ "Event": {
+ "properties": {
+ "conversation": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "data": {
+ "description": "Encrypted message of a conversation",
+ "example": "ZXhhbXBsZQo=",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "$ref": "#/components/schemas/AccessRoleLegacy"
+ },
+ "access_role_v2": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "data": {
+ "description": "Extra (symmetric) data (i.e. ciphertext, Base64 in JSON) that is common with all other recipients.",
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/Epoch Timestamp"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "has_password": {
+ "description": "Whether the conversation has a password",
+ "type": "boolean"
+ },
+ "hidden": {
+ "type": "boolean"
+ },
+ "hidden_ref": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "last_event": {
+ "type": "string"
+ },
+ "last_event_time": {
+ "type": "string"
+ },
+ "members": {
+ "$ref": "#/components/schemas/ConvMembers"
+ },
+ "message": {
+ "type": "string"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer (can be null)",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "otr_archived": {
+ "type": "boolean"
+ },
+ "otr_archived_ref": {
+ "type": "string"
+ },
+ "otr_muted_ref": {
+ "type": "string"
+ },
+ "otr_muted_status": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "qualified_recipient": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "qualified_target": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "qualified_user_ids": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ },
+ "reason": {
+ "$ref": "#/components/schemas/EdMemberLeftReason"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "recipient": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "sender": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "status": {
+ "$ref": "#/components/schemas/TypingStatus"
+ },
+ "target": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "text": {
+ "description": "The ciphertext for the recipient (Base64 in JSON)",
+ "type": "string"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ConvType"
+ },
+ "uri": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "user_ids": {
+ "deprecated": true,
+ "description": "Deprecated, use qualified_user_ids",
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ },
+ "users": {
+ "items": {
+ "$ref": "#/components/schemas/SimpleMember"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "users",
+ "reason",
+ "qualified_user_ids",
+ "user_ids",
+ "qualified_target",
+ "name",
+ "access",
+ "key",
+ "code",
+ "has_password",
+ "qualified_id",
+ "type",
+ "members",
+ "group_id",
+ "epoch",
+ "epoch_timestamp",
+ "cipher_suite",
+ "qualified_recipient",
+ "receipt_mode",
+ "sender",
+ "recipient",
+ "text",
+ "status"
+ ],
+ "type": "object"
+ },
+ "from": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "qualified_conversation": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "qualified_from": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "subconv": {
+ "type": "string"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "type": {
+ "$ref": "#/components/schemas/EventType"
+ }
+ },
+ "required": [
+ "type",
+ "data",
+ "qualified_conversation",
+ "qualified_from",
+ "time"
+ ],
+ "type": "object"
+ },
+ "EventType": {
+ "enum": [
+ "conversation.member-join",
+ "conversation.member-leave",
+ "conversation.member-update",
+ "conversation.rename",
+ "conversation.access-update",
+ "conversation.receipt-mode-update",
+ "conversation.message-timer-update",
+ "conversation.code-update",
+ "conversation.code-delete",
+ "conversation.create",
+ "conversation.delete",
+ "conversation.connect-request",
+ "conversation.typing",
+ "conversation.otr-message-add",
+ "conversation.mls-message-add",
+ "conversation.mls-welcome",
+ "conversation.protocol-update"
+ ],
+ "type": "string"
+ },
+ "ExposeInvitationURLsToTeamAdminConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "ExposeInvitationURLsToTeamAdminConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "FeatureStatus": {
+ "enum": [
+ "enabled",
+ "disabled"
+ ],
+ "type": "string"
+ },
+ "FederatedUserSearchPolicy": {
+ "description": "Search policy that was applied when searching for users",
+ "enum": [
+ "no_search",
+ "exact_handle_search",
+ "full_search"
+ ],
+ "type": "string"
+ },
+ "FileSharingConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "FileSharingConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "Fingerprint": {
+ "example": "ioy3GeIjgQRsobf2EKGO3O8mq/FofFxHRqy0T4ERIZ8=",
+ "type": "string"
+ },
+ "FormRedirect": {
+ "properties": {
+ "uri": {
+ "type": "string"
+ },
+ "xml": {
+ "$ref": "#/components/schemas/AuthnRequest"
+ }
+ },
+ "type": "object"
+ },
+ "GetPaginated_Connections": {
+ "description": "A request to list some or all of a user's Connections, including remote ones",
+ "properties": {
+ "paging_state": {
+ "$ref": "#/components/schemas/Connections_PagingState"
+ },
+ "size": {
+ "description": "optional, must be <= 500, defaults to 100.",
+ "format": "int32",
+ "maximum": 500,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "GetPaginated_ConversationIds": {
+ "description": "A request to list some or all of a user's ConversationIds, including remote ones",
+ "properties": {
+ "paging_state": {
+ "$ref": "#/components/schemas/ConversationIds_PagingState"
+ },
+ "size": {
+ "description": "optional, must be <= 1000, defaults to 1000.",
+ "format": "int32",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "GroupId": {
+ "description": "A base64-encoded MLS group ID",
+ "example": "ZXhhbXBsZQo=",
+ "type": "string"
+ },
+ "GroupInfoData": {
+ "description": "This object can only be parsed in TLS format. Please refer to the MLS specification for details."
+ },
+ "GuestLinksConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "GuestLinksConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "Handle": {
+ "type": "string"
+ },
+ "HandleUpdate": {
+ "properties": {
+ "handle": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "handle"
+ ],
+ "type": "object"
+ },
+ "HttpsUrl": {
+ "example": "https://example.com",
+ "type": "string"
+ },
+ "ID_*_AuthnRequest": {
+ "properties": {
+ "iD": {
+ "$ref": "#/components/schemas/XmlText"
+ }
+ },
+ "required": [
+ "iD"
+ ],
+ "type": "object"
+ },
+ "Icon": {
+ "type": "string"
+ },
+ "Id": {
+ "properties": {
+ "id": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": "object"
+ },
+ "IdPConfig_WireIdP": {
+ "properties": {
+ "extraInfo": {
+ "$ref": "#/components/schemas/WireIdP"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "metadata": {
+ "$ref": "#/components/schemas/IdPMetadata"
+ }
+ },
+ "required": [
+ "id",
+ "metadata",
+ "extraInfo"
+ ],
+ "type": "object"
+ },
+ "IdPList": {
+ "properties": {
+ "providers": {
+ "items": {
+ "$ref": "#/components/schemas/IdPConfig_WireIdP"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "providers"
+ ],
+ "type": "object"
+ },
+ "IdPMetadata": {
+ "properties": {
+ "certAuthnResponse": {
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "issuer": {
+ "type": "string"
+ },
+ "requestURI": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "issuer",
+ "requestURI",
+ "certAuthnResponse"
+ ],
+ "type": "object"
+ },
+ "IdPMetadataInfo": {
+ "maxProperties": 1,
+ "minProperties": 1,
+ "properties": {
+ "value": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "Invitation": {
+ "description": "An invitation to join a team on Wire",
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "created_by": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "description": "Name of the invitee (1 - 128 characters)",
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "role": {
+ "$ref": "#/components/schemas/Role"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "url": {
+ "$ref": "#/components/schemas/URIRef Absolute"
+ }
+ },
+ "required": [
+ "team",
+ "id",
+ "created_at",
+ "email"
+ ],
+ "type": "object"
+ },
+ "InvitationList": {
+ "description": "A list of sent team invitations.",
+ "properties": {
+ "has_more": {
+ "description": "Indicator that the server has more invitations than returned.",
+ "type": "boolean"
+ },
+ "invitations": {
+ "items": {
+ "$ref": "#/components/schemas/Invitation"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "invitations",
+ "has_more"
+ ],
+ "type": "object"
+ },
+ "InvitationRequest": {
+ "description": "A request to join a team on Wire.",
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ },
+ "name": {
+ "description": "Name of the invitee (1 - 128 characters).",
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "role": {
+ "$ref": "#/components/schemas/Role"
+ }
+ },
+ "required": [
+ "email"
+ ],
+ "type": "object"
+ },
+ "InviteQualified": {
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "qualified_users": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "qualified_users"
+ ],
+ "type": "object"
+ },
+ "JoinConversationByCode": {
+ "description": "Request body for joining a conversation by code",
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 8,
+ "type": "string"
+ },
+ "uri": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "key",
+ "code"
+ ],
+ "type": "object"
+ },
+ "KeyPackage": {
+ "example": "a2V5IHBhY2thZ2UgZGF0YQo=",
+ "type": "string"
+ },
+ "KeyPackageBundle": {
+ "properties": {
+ "key_packages": {
+ "items": {
+ "$ref": "#/components/schemas/KeyPackageBundleEntry"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "key_packages"
+ ],
+ "type": "object"
+ },
+ "KeyPackageBundleEntry": {
+ "properties": {
+ "client": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "key_package": {
+ "$ref": "#/components/schemas/KeyPackage"
+ },
+ "key_package_ref": {
+ "$ref": "#/components/schemas/KeyPackageRef"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "domain",
+ "user",
+ "client",
+ "key_package_ref",
+ "key_package"
+ ],
+ "type": "object"
+ },
+ "KeyPackageRef": {
+ "example": "ZXhhbXBsZQo=",
+ "type": "string"
+ },
+ "KeyPackageUpload": {
+ "properties": {
+ "key_packages": {
+ "items": {
+ "$ref": "#/components/schemas/KeyPackage"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "key_packages"
+ ],
+ "type": "object"
+ },
+ "LHServiceStatus": {
+ "enum": [
+ "configured",
+ "not_configured",
+ "disabled"
+ ],
+ "type": "string"
+ },
+ "LegalholdConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "LegalholdConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "LimitedEventFanoutConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "LimitedQualifiedUserIdList_500": {
+ "properties": {
+ "qualified_users": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "qualified_users"
+ ],
+ "type": "object"
+ },
+ "List1": {
+ "items": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "ListConversations": {
+ "description": "A request to list some of a user's conversations, including remote ones. Maximum 1000 qualified conversation IDs",
+ "properties": {
+ "qualified_ids": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "qualified_ids"
+ ],
+ "type": "object"
+ },
+ "ListType": {
+ "description": "true if 'members' doesn't contain all team members",
+ "enum": [
+ true,
+ false
+ ],
+ "type": "boolean"
+ },
+ "ListUsersById": {
+ "properties": {
+ "failed": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "found": {
+ "items": {
+ "$ref": "#/components/schemas/UserProfile"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "found"
+ ],
+ "type": "object"
+ },
+ "ListUsersQuery": {
+ "description": "exactly one of qualified_ids or qualified_handles must be provided.",
+ "example": {
+ "qualified_ids": [
+ {
+ "domain": "example.com",
+ "id": "00000000-0000-0000-0000-000000000000"
+ }
+ ]
+ },
+ "properties": {
+ "qualified_handles": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_Handle"
+ },
+ "type": "array"
+ },
+ "qualified_ids": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "Locale": {
+ "type": "string"
+ },
+ "LocaleUpdate": {
+ "properties": {
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ }
+ },
+ "required": [
+ "locale"
+ ],
+ "type": "object"
+ },
+ "LockStatus": {
+ "enum": [
+ "locked",
+ "unlocked"
+ ],
+ "type": "string"
+ },
+ "Login": {
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "handle": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "label": {
+ "type": "string"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "verification_code": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "password"
+ ],
+ "type": "object"
+ },
+ "MLSConfig": {
+ "properties": {
+ "allowedCipherSuites": {
+ "items": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "type": "array"
+ },
+ "defaultCipherSuite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "defaultProtocol": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "protocolToggleUsers": {
+ "description": "allowlist of users that may change protocols",
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ },
+ "supportedProtocols": {
+ "items": {
+ "$ref": "#/components/schemas/Protocol"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "protocolToggleUsers",
+ "defaultProtocol",
+ "allowedCipherSuites",
+ "defaultCipherSuite",
+ "supportedProtocols"
+ ],
+ "type": "object"
+ },
+ "MLSConfig.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MLSConfig"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "MLSConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MLSConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "MLSKeys": {
+ "properties": {
+ "ecdsa_secp256r1_sha256": {
+ "$ref": "#/components/schemas/SomeKey"
+ },
+ "ecdsa_secp384r1_sha384": {
+ "$ref": "#/components/schemas/SomeKey"
+ },
+ "ecdsa_secp521r1_sha512": {
+ "$ref": "#/components/schemas/SomeKey"
+ },
+ "ed25519": {
+ "$ref": "#/components/schemas/SomeKey"
+ }
+ },
+ "required": [
+ "ed25519",
+ "ecdsa_secp256r1_sha256",
+ "ecdsa_secp384r1_sha384",
+ "ecdsa_secp521r1_sha512"
+ ],
+ "type": "object"
+ },
+ "MLSKeysByPurpose": {
+ "properties": {
+ "removal": {
+ "$ref": "#/components/schemas/MLSKeys"
+ }
+ },
+ "required": [
+ "removal"
+ ],
+ "type": "object"
+ },
+ "MLSMessage": {
+ "description": "This object can only be parsed in TLS format. Please refer to the MLS specification for details."
+ },
+ "MLSMessageSendingStatus": {
+ "properties": {
+ "events": {
+ "description": "A list of events caused by sending the message.",
+ "items": {
+ "$ref": "#/components/schemas/Event"
+ },
+ "type": "array"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ }
+ },
+ "required": [
+ "events",
+ "time"
+ ],
+ "type": "object"
+ },
+ "MLSOne2OneConversation_MLSPublicKey": {
+ "properties": {
+ "conversation": {
+ "$ref": "#/components/schemas/Conversation"
+ },
+ "public_keys": {
+ "$ref": "#/components/schemas/MLSKeysByPurpose"
+ }
+ },
+ "required": [
+ "conversation",
+ "public_keys"
+ ],
+ "type": "object"
+ },
+ "MLSPublicKey": {
+ "example": "ZXhhbXBsZQo=",
+ "type": "string"
+ },
+ "MLSPublicKeys": {
+ "additionalProperties": {
+ "example": "ZXhhbXBsZQo=",
+ "type": "string"
+ },
+ "description": "Mapping from signature scheme (tags) to public key data",
+ "example": {
+ "ecdsa_secp256r1_sha256": "ZXhhbXBsZQo=",
+ "ecdsa_secp384r1_sha384": "ZXhhbXBsZQo=",
+ "ecdsa_secp521r1_sha512": "ZXhhbXBsZQo=",
+ "ed25519": "ZXhhbXBsZQo="
+ },
+ "type": "object"
+ },
+ "ManagedBy": {
+ "enum": [
+ "wire",
+ "scim"
+ ],
+ "type": "string"
+ },
+ "Member": {
+ "description": "The user ID of the requestor",
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "hidden": {
+ "type": "boolean"
+ },
+ "hidden_ref": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "otr_archived": {
+ "type": "boolean"
+ },
+ "otr_archived_ref": {
+ "type": "string"
+ },
+ "otr_muted_ref": {
+ "type": "string"
+ },
+ "otr_muted_status": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "service": {
+ "$ref": "#/components/schemas/ServiceRef"
+ },
+ "status": {},
+ "status_ref": {},
+ "status_time": {}
+ },
+ "required": [
+ "qualified_id"
+ ],
+ "type": "object"
+ },
+ "MemberUpdate": {
+ "properties": {
+ "hidden": {
+ "type": "boolean"
+ },
+ "hidden_ref": {
+ "type": "string"
+ },
+ "otr_archived": {
+ "type": "boolean"
+ },
+ "otr_archived_ref": {
+ "type": "string"
+ },
+ "otr_muted_ref": {
+ "type": "string"
+ },
+ "otr_muted_status": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "MemberUpdateData": {
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "hidden": {
+ "type": "boolean"
+ },
+ "hidden_ref": {
+ "type": "string"
+ },
+ "otr_archived": {
+ "type": "boolean"
+ },
+ "otr_archived_ref": {
+ "type": "string"
+ },
+ "otr_muted_ref": {
+ "type": "string"
+ },
+ "otr_muted_status": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "qualified_target": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "target": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "qualified_target"
+ ],
+ "type": "object"
+ },
+ "MessageSendingStatus": {
+ "description": "The Proteus message sending status. It has these fields:\n- `time`: Time of sending message.\n- `missing`: Clients that the message /should/ have been encrypted for, but wasn't.\n- `redundant`: Clients that the message /should not/ have been encrypted for, but was.\n- `deleted`: Clients that were deleted.\n- `failed_to_send`: When message sending fails for some clients but succeeds for others, e.g., because a remote backend is unreachable, this field will contain the list of clients for which the message sending failed. This list should be empty when message sending is not even tried, like when some clients are missing.",
+ "properties": {
+ "deleted": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ },
+ "failed_to_confirm_clients": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ },
+ "failed_to_send": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ },
+ "missing": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ },
+ "redundant": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ }
+ },
+ "required": [
+ "time",
+ "missing",
+ "redundant",
+ "deleted",
+ "failed_to_send",
+ "failed_to_confirm_clients"
+ ],
+ "type": "object"
+ },
+ "MlsE2EIdConfig": {
+ "properties": {
+ "acmeDiscoveryUrl": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "crlProxy": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "useProxyOnMobile": {
+ "type": "boolean"
+ },
+ "verificationExpiration": {
+ "description": "When a client first tries to fetch or renew a certificate, they may need to login to an identity provider (IdP) depending on their IdP domain authentication policy. The user may have a grace period during which they can \"snooze\" this login. The duration of this grace period (in seconds) is set in the `verificationDuration` parameter, which is enforced separately by each client. After the grace period has expired, the client will not allow the user to use the application until they have logged to refresh the certificate. The default value is 1 day (86400s). The client enrolls using the Automatic Certificate Management Environment (ACME) protocol. The `acmeDiscoveryUrl` parameter must be set to the HTTPS URL of the ACME server discovery endpoint for this team. It is of the form \"https://acme.{backendDomain}/acme/{provisionerName}/discovery\". For example: `https://acme.example.com/acme/provisioner1/discovery`.",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "verificationExpiration"
+ ],
+ "type": "object"
+ },
+ "MlsE2EIdConfig.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "MlsE2EIdConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "MlsMigration": {
+ "properties": {
+ "finaliseRegardlessAfter": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "startTime": {
+ "$ref": "#/components/schemas/UTCTime"
+ }
+ },
+ "type": "object"
+ },
+ "MlsMigration.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MlsMigration"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "MlsMigration.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/MlsMigration"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "NameIDFormat": {
+ "enum": [
+ "NameIDFUnspecified",
+ "NameIDFEmail",
+ "NameIDFX509",
+ "NameIDFWindows",
+ "NameIDFKerberos",
+ "NameIDFEntity",
+ "NameIDFPersistent",
+ "NameIDFTransient"
+ ],
+ "type": "string"
+ },
+ "NameIdPolicy": {
+ "properties": {
+ "allowCreate": {
+ "type": "boolean"
+ },
+ "format": {
+ "$ref": "#/components/schemas/NameIDFormat"
+ },
+ "spNameQualifier": {
+ "$ref": "#/components/schemas/XmlText"
+ }
+ },
+ "required": [
+ "format",
+ "allowCreate"
+ ],
+ "type": "object"
+ },
+ "NewAssetToken": {
+ "properties": {
+ "token": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "token"
+ ],
+ "type": "object"
+ },
+ "NewClient": {
+ "properties": {
+ "capabilities": {
+ "description": "Hints provided by the client for the backend so it can behave in a backwards-compatible way.",
+ "items": {
+ "$ref": "#/components/schemas/ClientCapability"
+ },
+ "type": "array"
+ },
+ "class": {
+ "$ref": "#/components/schemas/ClientClass"
+ },
+ "cookie": {
+ "description": "The cookie label, i.e. the label used when logging in.",
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "lastkey": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "mls_public_keys": {
+ "$ref": "#/components/schemas/MLSPublicKeys"
+ },
+ "model": {
+ "type": "string"
+ },
+ "password": {
+ "description": "The password of the authenticated user for verification. Note: Required for registration of the 2nd, 3rd, ... client.",
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "prekeys": {
+ "description": "Prekeys for other clients to establish OTR sessions.",
+ "items": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "type": "array"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ClientType"
+ },
+ "verification_code": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "prekeys",
+ "lastkey",
+ "type"
+ ],
+ "type": "object"
+ },
+ "NewConv": {
+ "description": "JSON object to create a new conversation. When using 'qualified_users' (preferred), you can omit 'users'",
+ "properties": {
+ "access": {
+ "items": {
+ "$ref": "#/components/schemas/Access"
+ },
+ "type": "array"
+ },
+ "access_role": {
+ "items": {
+ "$ref": "#/components/schemas/AccessRole"
+ },
+ "type": "array"
+ },
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "message_timer": {
+ "description": "Per-conversation message timer",
+ "format": "int64",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "name": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "protocol": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "qualified_users": {
+ "description": "List of qualified user IDs (excluding the requestor) to be part of this conversation",
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ },
+ "receipt_mode": {
+ "description": "Conversation receipt mode",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "team": {
+ "$ref": "#/components/schemas/ConvTeamInfo"
+ },
+ "users": {
+ "deprecated": true,
+ "description": "List of user IDs (excluding the requestor) to be part of this conversation (deprecated)",
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "NewLegalHoldService": {
+ "properties": {
+ "auth_token": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "base_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "public_key": {
+ "$ref": "#/components/schemas/ServiceKeyPEM"
+ }
+ },
+ "required": [
+ "base_url",
+ "public_key",
+ "auth_token"
+ ],
+ "type": "object"
+ },
+ "NewPasswordReset": {
+ "description": "Data to initiate a password reset",
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "phone": {
+ "description": "Email",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "NewProvider": {
+ "properties": {
+ "description": {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "name",
+ "email",
+ "url",
+ "description"
+ ],
+ "type": "object"
+ },
+ "NewProviderResponse": {
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 8,
+ "type": "string"
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": "object"
+ },
+ "NewService": {
+ "properties": {
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "auth_token": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "base_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "description": {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "public_key": {
+ "$ref": "#/components/schemas/ServiceKeyPEM"
+ },
+ "summary": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "tags": {
+ "items": {
+ "$ref": "#/components/schemas/"
+ },
+ "maxItems": 3,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "name",
+ "summary",
+ "description",
+ "base_url",
+ "public_key",
+ "assets",
+ "tags"
+ ],
+ "type": "object"
+ },
+ "NewServiceResponse": {
+ "properties": {
+ "auth_token": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": "object"
+ },
+ "NewTeamMember": {
+ "description": "Required data when creating new team members",
+ "properties": {
+ "member": {
+ "description": "the team member to add (the legalhold_status field must be null or missing!)",
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "created_by": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "permissions": {
+ "$ref": "#/components/schemas/Permissions"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "user",
+ "permissions"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "member"
+ ],
+ "type": "object"
+ },
+ "NewUser": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "email_code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "expires_in": {
+ "maximum": 604800,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "invitation_code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "label": {
+ "type": "string"
+ },
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ },
+ "managed_by": {
+ "$ref": "#/components/schemas/ManagedBy"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 8,
+ "type": "string"
+ },
+ "picture": {
+ "$ref": "#/components/schemas/Pict"
+ },
+ "sso_id": {
+ "$ref": "#/components/schemas/UserSSOId"
+ },
+ "supported_protocols": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array"
+ },
+ "team": {
+ "$ref": "#/components/schemas/BindingNewTeamUser"
+ },
+ "team_code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "team_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "uuid": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "OAuthAccessTokenRequest": {
+ "properties": {
+ "client_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "code": {
+ "$ref": "#/components/schemas/OAuthAuthorizationCode"
+ },
+ "code_verifier": {
+ "description": "The code verifier to complete the code challenge",
+ "maxLength": 128,
+ "minLength": 43,
+ "type": "string"
+ },
+ "grant_type": {
+ "$ref": "#/components/schemas/OAuthGrantType"
+ },
+ "redirect_uri": {
+ "$ref": "#/components/schemas/RedirectUrl"
+ }
+ },
+ "required": [
+ "grant_type",
+ "client_id",
+ "code_verifier",
+ "code",
+ "redirect_uri"
+ ],
+ "type": "object"
+ },
+ "OAuthAccessTokenResponse": {
+ "properties": {
+ "access_token": {
+ "description": "The access token, which has a relatively short lifetime",
+ "type": "string"
+ },
+ "expires_in": {
+ "description": "The lifetime of the access token in seconds",
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "refresh_token": {
+ "description": "The refresh token, which has a relatively long lifetime, and can be used to obtain a new access token",
+ "type": "string"
+ },
+ "token_type": {
+ "$ref": "#/components/schemas/OAuthAccessTokenType"
+ }
+ },
+ "required": [
+ "access_token",
+ "token_type",
+ "expires_in",
+ "refresh_token"
+ ],
+ "type": "object"
+ },
+ "OAuthAccessTokenType": {
+ "description": "The type of the access token. Currently only `Bearer` is supported.",
+ "enum": [
+ "Bearer"
+ ],
+ "type": "string"
+ },
+ "OAuthApplication": {
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "description": "The OAuth client's name",
+ "maxLength": 256,
+ "minLength": 6,
+ "type": "string"
+ },
+ "sessions": {
+ "description": "The OAuth client's sessions",
+ "items": {
+ "$ref": "#/components/schemas/OAuthSession"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "sessions"
+ ],
+ "type": "object"
+ },
+ "OAuthAuthorizationCode": {
+ "description": "The authorization code",
+ "type": "string"
+ },
+ "OAuthClient": {
+ "properties": {
+ "application_name": {
+ "maxLength": 256,
+ "minLength": 6,
+ "type": "string"
+ },
+ "client_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "redirect_url": {
+ "$ref": "#/components/schemas/RedirectUrl"
+ }
+ },
+ "required": [
+ "client_id",
+ "application_name",
+ "redirect_url"
+ ],
+ "type": "object"
+ },
+ "OAuthCodeChallenge": {
+ "description": "Generated by the client from the code verifier (unpadded base64url-encoded SHA256 hash of the code verifier)",
+ "type": "string"
+ },
+ "OAuthGrantType": {
+ "description": "Indicates which authorization flow to use. Use `authorization_code` for authorization code flow.",
+ "enum": [
+ "authorization_code",
+ "refresh_token"
+ ],
+ "type": "string"
+ },
+ "OAuthRefreshAccessTokenRequest": {
+ "properties": {
+ "client_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "grant_type": {
+ "$ref": "#/components/schemas/OAuthGrantType"
+ },
+ "refresh_token": {
+ "description": "The refresh token",
+ "type": "string"
+ }
+ },
+ "required": [
+ "grant_type",
+ "client_id",
+ "refresh_token"
+ ],
+ "type": "object"
+ },
+ "OAuthResponseType": {
+ "description": "Indicates which authorization flow to use. Use `code` for authorization code flow.",
+ "enum": [
+ "code"
+ ],
+ "type": "string"
+ },
+ "OAuthRevokeRefreshTokenRequest": {
+ "properties": {
+ "client_id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "refresh_token": {
+ "description": "The refresh token",
+ "type": "string"
+ }
+ },
+ "required": [
+ "client_id",
+ "refresh_token"
+ ],
+ "type": "object"
+ },
+ "OAuthSession": {
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "refresh_token_id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "refresh_token_id",
+ "created_at"
+ ],
+ "type": "object"
+ },
+ "Object": {
+ "additionalProperties": true,
+ "description": "A single notification event",
+ "properties": {
+ "type": {
+ "description": "Event type",
+ "type": "string"
+ }
+ },
+ "title": "Event",
+ "type": "object"
+ },
+ "OtherMember": {
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "service": {
+ "$ref": "#/components/schemas/ServiceRef"
+ },
+ "status": {
+ "deprecated": true,
+ "description": "deprecated",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "qualified_id"
+ ],
+ "type": "object"
+ },
+ "OtherMemberUpdate": {
+ "description": "Update user properties of other members relative to a conversation",
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ }
+ },
+ "type": "object"
+ },
+ "OtrMessage": {
+ "description": "Encrypted message of a conversation",
+ "properties": {
+ "data": {
+ "description": "Extra (symmetric) data (i.e. ciphertext, Base64 in JSON) that is common with all other recipients.",
+ "type": "string"
+ },
+ "recipient": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "sender": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "text": {
+ "description": "The ciphertext for the recipient (Base64 in JSON)",
+ "type": "string"
+ }
+ },
+ "required": [
+ "sender",
+ "recipient",
+ "text"
+ ],
+ "type": "object"
+ },
+ "OutlookCalIntegrationConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "OutlookCalIntegrationConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "OwnKeyPackages": {
+ "properties": {
+ "count": {
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "count"
+ ],
+ "type": "object"
+ },
+ "PagingState": {
+ "description": "Paging state that should be supplied to retrieve the next page of results",
+ "type": "string"
+ },
+ "PasswordChange": {
+ "properties": {
+ "new_password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "old_password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "old_password",
+ "new_password"
+ ],
+ "type": "object"
+ },
+ "PasswordReqBody": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "PasswordReset": {
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ }
+ },
+ "required": [
+ "email"
+ ],
+ "type": "object"
+ },
+ "Permissions": {
+ "description": "This is just a complicated way of representing a team role. self and copy always have to contain the same integer, and only the following integers are allowed: 1025 (partner), 1587 (member), 5951 (admin), 8191 (owner). Unit tests of the galley-types package in wire-server contain an authoritative list.",
+ "properties": {
+ "copy": {
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "self": {
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "self",
+ "copy"
+ ],
+ "type": "object"
+ },
+ "PhoneNumber": {
+ "description": "A known phone number with a pending password reset.",
+ "type": "string"
+ },
+ "Pict": {
+ "items": {},
+ "maxItems": 10,
+ "minItems": 0,
+ "type": "array"
+ },
+ "Prekey": {
+ "properties": {
+ "id": {
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "key"
+ ],
+ "type": "object"
+ },
+ "PrekeyBundle": {
+ "properties": {
+ "clients": {
+ "items": {
+ "$ref": "#/components/schemas/ClientPrekey"
+ },
+ "type": "array"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "user",
+ "clients"
+ ],
+ "type": "object"
+ },
+ "Priority": {
+ "enum": [
+ "low",
+ "high"
+ ],
+ "type": "string"
+ },
+ "PropertyKeysAndValues": {
+ "type": "object"
+ },
+ "PropertyValue": {
+ "description": "An arbitrary JSON value for a property"
+ },
+ "Protocol": {
+ "enum": [
+ "proteus",
+ "mls",
+ "mixed"
+ ],
+ "type": "string"
+ },
+ "ProtocolUpdate": {
+ "properties": {
+ "protocol": {
+ "$ref": "#/components/schemas/Protocol"
+ }
+ },
+ "type": "object"
+ },
+ "Provider": {
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "email",
+ "url",
+ "description"
+ ],
+ "type": "object"
+ },
+ "ProviderActivationResponse": {
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ }
+ },
+ "required": [
+ "email"
+ ],
+ "type": "object"
+ },
+ "ProviderLogin": {
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "email",
+ "password"
+ ],
+ "type": "object"
+ },
+ "PubClient": {
+ "properties": {
+ "class": {
+ "$ref": "#/components/schemas/ClientClass"
+ },
+ "id": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": "object"
+ },
+ "PublicSubConversation": {
+ "description": "An MLS subconversation",
+ "properties": {
+ "cipher_suite": {
+ "$ref": "#/components/schemas/CipherSuiteTag"
+ },
+ "epoch": {
+ "description": "The epoch number of the corresponding MLS group",
+ "format": "int64",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "epoch_timestamp": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "group_id": {
+ "$ref": "#/components/schemas/GroupId"
+ },
+ "members": {
+ "items": {
+ "$ref": "#/components/schemas/ClientIdentity"
+ },
+ "type": "array"
+ },
+ "parent_qualified_id": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "subconv_id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "parent_qualified_id",
+ "subconv_id",
+ "group_id",
+ "epoch",
+ "members"
+ ],
+ "type": "object"
+ },
+ "PushToken": {
+ "description": "Native Push Token",
+ "properties": {
+ "app": {
+ "description": "Application",
+ "type": "string"
+ },
+ "client": {
+ "description": "Client ID",
+ "type": "string"
+ },
+ "token": {
+ "description": "Access Token",
+ "type": "string"
+ },
+ "transport": {
+ "$ref": "#/components/schemas/Transport"
+ }
+ },
+ "required": [
+ "transport",
+ "app",
+ "token",
+ "client"
+ ],
+ "type": "object"
+ },
+ "PushTokenList": {
+ "description": "List of Native Push Tokens",
+ "properties": {
+ "tokens": {
+ "description": "Push tokens",
+ "items": {
+ "$ref": "#/components/schemas/PushToken"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "tokens"
+ ],
+ "type": "object"
+ },
+ "QualifiedNewOtrMessage": {
+ "description": "This object can only be parsed from Protobuf.\nThe specification for the protobuf types is here: \nhttps://github.com/wireapp/generic-message-proto/blob/master/proto/otr.proto."
+ },
+ "QualifiedUserClientPrekeyMapV4": {
+ "properties": {
+ "failed_to_list": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ },
+ "qualified_user_client_prekeys": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/UserClientPrekeyMap"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "qualified_user_client_prekeys"
+ ],
+ "type": "object"
+ },
+ "QualifiedUserClients": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "items": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "type": "object"
+ },
+ "description": "Map of Domain to UserClients",
+ "example": {
+ "domain1.example.com": {
+ "1d51e2d6-9c70-605f-efc8-ff85c3dabdc7": [
+ "60f85e4b15ad3786",
+ "6e323ab31554353b"
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "QualifiedUserIdList with EdMemberLeftReason": {
+ "properties": {
+ "qualified_user_ids": {
+ "items": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "type": "array"
+ },
+ "reason": {
+ "$ref": "#/components/schemas/EdMemberLeftReason"
+ },
+ "user_ids": {
+ "deprecated": true,
+ "description": "Deprecated, use qualified_user_ids",
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "reason",
+ "qualified_user_ids",
+ "user_ids"
+ ],
+ "type": "object"
+ },
+ "QualifiedUserMap_Set_PubClient": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/UserMap_Set_PubClient"
+ },
+ "description": "Map of Domain to (UserMap (Set_PubClient)).",
+ "example": {
+ "domain1.example.com": {
+ "1d51e2d6-9c70-605f-efc8-ff85c3dabdc7": [
+ {
+ "class": "legalhold",
+ "id": "d0"
+ }
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "Qualified_ConvId": {
+ "properties": {
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "domain",
+ "id"
+ ],
+ "type": "object"
+ },
+ "Qualified_Handle": {
+ "properties": {
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "handle": {
+ "$ref": "#/components/schemas/Handle"
+ }
+ },
+ "required": [
+ "domain",
+ "handle"
+ ],
+ "type": "object"
+ },
+ "Qualified_UserId": {
+ "properties": {
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "domain",
+ "id"
+ ],
+ "type": "object"
+ },
+ "QueuedNotification": {
+ "description": "A single notification",
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "payload": {
+ "description": "List of events",
+ "items": {
+ "$ref": "#/components/schemas/Object"
+ },
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "id",
+ "payload"
+ ],
+ "type": "object"
+ },
+ "QueuedNotificationList": {
+ "description": "Zero or more notifications",
+ "properties": {
+ "has_more": {
+ "description": "Whether there are still more notifications.",
+ "type": "boolean"
+ },
+ "notifications": {
+ "description": "Notifications",
+ "items": {
+ "$ref": "#/components/schemas/QueuedNotification"
+ },
+ "type": "array"
+ },
+ "time": {
+ "$ref": "#/components/schemas/UTCTime"
+ }
+ },
+ "required": [
+ "notifications"
+ ],
+ "type": "object"
+ },
+ "RTCConfiguration": {
+ "description": "A subset of the WebRTC 'RTCConfiguration' dictionary",
+ "properties": {
+ "ice_servers": {
+ "description": "Array of 'RTCIceServer' objects",
+ "items": {
+ "$ref": "#/components/schemas/RTCIceServer"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "is_federating": {
+ "description": "True if the client should connect to an SFT in the sft_servers_all and request it to federate",
+ "type": "boolean"
+ },
+ "sft_servers": {
+ "description": "Array of 'SFTServer' objects (optional)",
+ "items": {
+ "$ref": "#/components/schemas/SftServer"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "sft_servers_all": {
+ "description": "Array of all SFT servers",
+ "items": {
+ "$ref": "#/components/schemas/SftServer"
+ },
+ "type": "array"
+ },
+ "ttl": {
+ "description": "Number of seconds after which the configuration should be refreshed (advisory)",
+ "format": "int32",
+ "maximum": 4294967295,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "ice_servers",
+ "ttl"
+ ],
+ "type": "object"
+ },
+ "RTCIceServer": {
+ "description": "A subset of the WebRTC 'RTCIceServer' object",
+ "properties": {
+ "credential": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "urls": {
+ "description": "Array of TURN server addresses of the form 'turn::'",
+ "items": {
+ "$ref": "#/components/schemas/TurnURI"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "username": {
+ "$ref": "#/components/schemas/"
+ }
+ },
+ "required": [
+ "urls",
+ "username",
+ "credential"
+ ],
+ "type": "object"
+ },
+ "RedirectUrl": {
+ "description": "The URL must match the URL that was used to generate the authorization code.",
+ "type": "string"
+ },
+ "Relation": {
+ "enum": [
+ "accepted",
+ "blocked",
+ "pending",
+ "ignored",
+ "sent",
+ "cancelled",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "RemoveBotResponse": {
+ "properties": {
+ "event": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "required": [
+ "event"
+ ],
+ "type": "object"
+ },
+ "RemoveCookies": {
+ "description": "Data required to remove cookies",
+ "properties": {
+ "ids": {
+ "description": "A list of cookie IDs to revoke",
+ "items": {
+ "format": "int32",
+ "maximum": 4294967295,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ "labels": {
+ "description": "A list of cookie labels for which to revoke the cookies",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "password": {
+ "description": "The user's password",
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "required": [
+ "password"
+ ],
+ "type": "object"
+ },
+ "RemoveLegalHoldSettingsRequest": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "RichField": {
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "value"
+ ],
+ "type": "object"
+ },
+ "RichInfoAssocList": {
+ "description": "json object with case-insensitive fields.",
+ "properties": {
+ "fields": {
+ "items": {
+ "$ref": "#/components/schemas/RichField"
+ },
+ "type": "array"
+ },
+ "version": {
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "fields"
+ ],
+ "type": "object"
+ },
+ "Role": {
+ "description": "Role of the invited user",
+ "enum": [
+ "owner",
+ "admin",
+ "member",
+ "partner"
+ ],
+ "type": "string"
+ },
+ "RoleName": {
+ "description": "Role name, between 2 and 128 chars, 'wire_' prefix is reserved for roles designed by Wire (i.e., no custom roles can have the same prefix)",
+ "type": "string"
+ },
+ "SSOConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "ScimTokenInfo": {
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTime"
+ },
+ "description": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "idp": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "team",
+ "id",
+ "created_at",
+ "description"
+ ],
+ "type": "object"
+ },
+ "ScimTokenList": {
+ "properties": {
+ "tokens": {
+ "items": {
+ "$ref": "#/components/schemas/ScimTokenInfo"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "tokens"
+ ],
+ "type": "object"
+ },
+ "SearchResult": {
+ "properties": {
+ "documents": {
+ "description": "List of contacts found",
+ "items": {
+ "$ref": "#/components/schemas/TeamContact"
+ },
+ "type": "array"
+ },
+ "found": {
+ "description": "Total number of hits",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "has_more": {
+ "description": "Indicates whether there are more results to be fetched",
+ "type": "boolean"
+ },
+ "paging_state": {
+ "$ref": "#/components/schemas/PagingState"
+ },
+ "returned": {
+ "description": "Total number of hits returned",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "search_policy": {
+ "$ref": "#/components/schemas/FederatedUserSearchPolicy"
+ },
+ "took": {
+ "description": "Search time in ms",
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "found",
+ "returned",
+ "took",
+ "documents",
+ "search_policy"
+ ],
+ "type": "object"
+ },
+ "SearchVisibilityAvailableConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "SearchVisibilityAvailableConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "SearchVisibilityInboundConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "SearchVisibilityInboundConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "SelfDeletingMessagesConfig": {
+ "properties": {
+ "enforcedTimeoutSeconds": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "enforcedTimeoutSeconds"
+ ],
+ "type": "object"
+ },
+ "SelfDeletingMessagesConfig.Feature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "config"
+ ],
+ "type": "object"
+ },
+ "SelfDeletingMessagesConfig.LockableFeature": {
+ "properties": {
+ "config": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig"
+ },
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus",
+ "config"
+ ],
+ "type": "object"
+ },
+ "SendActivationCode": {
+ "description": "Data for requesting an email code to be sent. 'email' must be present.",
+ "properties": {
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ }
+ },
+ "required": [
+ "email"
+ ],
+ "type": "object"
+ },
+ "SendVerificationCode": {
+ "properties": {
+ "action": {
+ "$ref": "#/components/schemas/VerificationAction"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ }
+ },
+ "required": [
+ "action",
+ "email"
+ ],
+ "type": "object"
+ },
+ "Service": {
+ "properties": {
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "auth_tokens": {
+ "$ref": "#/components/schemas/List1"
+ },
+ "base_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "description": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "public_keys": {
+ "$ref": "#/components/schemas/List1"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "tags": {
+ "items": {
+ "$ref": "#/components/schemas/"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "summary",
+ "description",
+ "base_url",
+ "auth_tokens",
+ "public_keys",
+ "assets",
+ "tags",
+ "enabled"
+ ],
+ "type": "object"
+ },
+ "ServiceKey": {
+ "properties": {
+ "pem": {
+ "$ref": "#/components/schemas/ServiceKeyPEM"
+ },
+ "size": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ServiceKeyType"
+ }
+ },
+ "required": [
+ "type",
+ "size",
+ "pem"
+ ],
+ "type": "object"
+ },
+ "ServiceKeyPEM": {
+ "example": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu+Kg/PHHU3atXrUbKnw0\nG06FliXcNt3lMwl2os5twEDcPPFw/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPH\nWvUBdiLfGrZqJO223DB6D8K2Su/odmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKV\nVPOaOzgtAB21XKRiQ4ermqgi3/njr03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiS\nbUKr/BeArYRcjzr/h5m1In6fG/if9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg8\n7X883H+LA/d6X5CTiPv1VMxXdBUiGPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7la\nnQIDAQAB\n-----END PUBLIC KEY-----\n",
+ "type": "string"
+ },
+ "ServiceKeyType": {
+ "enum": [
+ "rsa"
+ ],
+ "type": "string"
+ },
+ "ServiceProfile": {
+ "properties": {
+ "has_more": {
+ "type": "boolean"
+ },
+ "services": {
+ "items": {
+ "$ref": "#/components/schemas/ServiceProfile"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "has_more",
+ "services"
+ ],
+ "type": "object"
+ },
+ "ServiceRef": {
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "provider": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "id",
+ "provider"
+ ],
+ "type": "object"
+ },
+ "ServiceTagList": {
+ "items": {
+ "$ref": "#/components/schemas/"
+ },
+ "type": "array"
+ },
+ "SftServer": {
+ "description": "Inspired by WebRTC 'RTCIceServer' object, contains details of SFT servers",
+ "properties": {
+ "urls": {
+ "description": "Array containing exactly one SFT server address of the form 'https://:'",
+ "items": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "urls"
+ ],
+ "type": "object"
+ },
+ "SimpleMember": {
+ "properties": {
+ "conversation_role": {
+ "$ref": "#/components/schemas/RoleName"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ }
+ },
+ "required": [
+ "qualified_id"
+ ],
+ "type": "object"
+ },
+ "SimpleMembers": {
+ "properties": {
+ "user_ids": {
+ "deprecated": true,
+ "description": "deprecated",
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ },
+ "users": {
+ "items": {
+ "$ref": "#/components/schemas/SimpleMember"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "users"
+ ],
+ "type": "object"
+ },
+ "SndFactorPasswordChallengeConfig.Feature": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "SndFactorPasswordChallengeConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "SomeKey": {},
+ "Sso": {
+ "properties": {
+ "issuer": {
+ "type": "string"
+ },
+ "nameid": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "issuer",
+ "nameid"
+ ],
+ "type": "object"
+ },
+ "SsoSettings": {
+ "properties": {
+ "default_sso_code": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "type": "object"
+ },
+ "SupportedProtocolUpdate": {
+ "properties": {
+ "supported_protocols": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "supported_protocols"
+ ],
+ "type": "object"
+ },
+ "SystemSettings": {
+ "properties": {
+ "setEnableMls": {
+ "description": "Whether MLS is enabled or not",
+ "type": "boolean"
+ },
+ "setRestrictUserCreation": {
+ "description": "Do not allow certain user creation flows",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "setRestrictUserCreation",
+ "setEnableMls"
+ ],
+ "type": "object"
+ },
+ "SystemSettingsPublic": {
+ "properties": {
+ "setRestrictUserCreation": {
+ "description": "Do not allow certain user creation flows",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "setRestrictUserCreation"
+ ],
+ "type": "object"
+ },
+ "Team": {
+ "description": "`binding` is deprecated, and should be ignored. The non-binding teams API is not used (and will not be supported from API version V4 onwards), and `binding` will always be `true`.",
+ "properties": {
+ "binding": {
+ "$ref": "#/components/schemas/TeamBinding"
+ },
+ "creator": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "icon": {
+ "$ref": "#/components/schemas/Icon"
+ },
+ "icon_key": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "name": {
+ "type": "string"
+ },
+ "splash_screen": {
+ "$ref": "#/components/schemas/Icon"
+ }
+ },
+ "required": [
+ "id",
+ "creator",
+ "name",
+ "icon"
+ ],
+ "type": "object"
+ },
+ "TeamBinding": {
+ "deprecated": true,
+ "description": "Deprecated, please ignore.",
+ "enum": [
+ true,
+ false
+ ],
+ "type": "boolean"
+ },
+ "TeamContact": {
+ "properties": {
+ "accent_id": {
+ "maximum": 9223372036854775807,
+ "minimum": -9223372036854775808,
+ "type": "integer"
+ },
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "email_unvalidated": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "handle": {
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "managed_by": {
+ "$ref": "#/components/schemas/ManagedBy"
+ },
+ "name": {
+ "type": "string"
+ },
+ "role": {
+ "$ref": "#/components/schemas/Role"
+ },
+ "saml_idp": {
+ "type": "string"
+ },
+ "scim_external_id": {
+ "type": "string"
+ },
+ "sso": {
+ "$ref": "#/components/schemas/Sso"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "id",
+ "name"
+ ],
+ "type": "object"
+ },
+ "TeamConversation": {
+ "description": "Team conversation data",
+ "properties": {
+ "conversation": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "managed": {
+ "description": "This field MUST NOT be used by clients. It is here only for backwards compatibility of the interface."
+ }
+ },
+ "required": [
+ "conversation",
+ "managed"
+ ],
+ "type": "object"
+ },
+ "TeamConversationList": {
+ "description": "Team conversation list",
+ "properties": {
+ "conversations": {
+ "items": {
+ "$ref": "#/components/schemas/TeamConversation"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "conversations"
+ ],
+ "type": "object"
+ },
+ "TeamDeleteData": {
+ "properties": {
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "verification_code": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "type": "object"
+ },
+ "TeamMember": {
+ "description": "team member data",
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "created_by": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "legalhold_status": {
+ "$ref": "#/components/schemas/UserLegalHoldStatus"
+ },
+ "permissions": {
+ "$ref": "#/components/schemas/Permissions"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "user"
+ ],
+ "type": "object"
+ },
+ "TeamMemberDeleteData": {
+ "description": "Data for a team member deletion request in case of binding teams.",
+ "properties": {
+ "password": {
+ "description": "The account password to authorise the deletion.",
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "TeamMemberList": {
+ "description": "list of team member",
+ "properties": {
+ "hasMore": {
+ "$ref": "#/components/schemas/ListType"
+ },
+ "members": {
+ "description": "the array of team members",
+ "items": {
+ "$ref": "#/components/schemas/TeamMember"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "members",
+ "hasMore"
+ ],
+ "type": "object"
+ },
+ "TeamMembersPage": {
+ "properties": {
+ "hasMore": {
+ "type": "boolean"
+ },
+ "members": {
+ "items": {
+ "$ref": "#/components/schemas/TeamMember"
+ },
+ "type": "array"
+ },
+ "pagingState": {
+ "$ref": "#/components/schemas/TeamMembers_PagingState"
+ }
+ },
+ "required": [
+ "members",
+ "hasMore",
+ "pagingState"
+ ],
+ "type": "object"
+ },
+ "TeamMembers_PagingState": {
+ "type": "string"
+ },
+ "TeamSearchVisibility": {
+ "description": "value of visibility",
+ "enum": [
+ "standard",
+ "no-name-outside-team"
+ ],
+ "type": "string"
+ },
+ "TeamSearchVisibilityView": {
+ "description": "Search visibility value for the team",
+ "properties": {
+ "search_visibility": {
+ "$ref": "#/components/schemas/TeamSearchVisibility"
+ }
+ },
+ "required": [
+ "search_visibility"
+ ],
+ "type": "object"
+ },
+ "TeamSize": {
+ "description": "A simple object with a total number of team members.",
+ "properties": {
+ "teamSize": {
+ "description": "Team size.",
+ "exclusiveMinimum": false,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "teamSize"
+ ],
+ "type": "object"
+ },
+ "TeamUpdateData": {
+ "properties": {
+ "icon": {
+ "$ref": "#/components/schemas/Icon"
+ },
+ "icon_key": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "splash_screen": {
+ "$ref": "#/components/schemas/Icon"
+ }
+ },
+ "type": "object"
+ },
+ "Time": {
+ "properties": {
+ "time": {
+ "$ref": "#/components/schemas/UTCTime"
+ }
+ },
+ "required": [
+ "time"
+ ],
+ "type": "object"
+ },
+ "TokenType": {
+ "enum": [
+ "Bearer"
+ ],
+ "type": "string"
+ },
+ "Transport": {
+ "description": "Transport",
+ "enum": [
+ "GCM",
+ "APNS",
+ "APNS_SANDBOX",
+ "APNS_VOIP",
+ "APNS_VOIP_SANDBOX"
+ ],
+ "type": "string"
+ },
+ "TurnURI": {
+ "type": "string"
+ },
+ "TypingData": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/TypingStatus"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "TypingStatus": {
+ "enum": [
+ "started",
+ "stopped"
+ ],
+ "type": "string"
+ },
+ "URIRef Absolute": {
+ "description": "URL of the invitation link to be sent to the invitee",
+ "type": "string"
+ },
+ "UTCTime": {
+ "example": "2021-05-12T10:52:02Z",
+ "format": "yyyy-mm-ddThh:MM:ssZ",
+ "type": "string"
+ },
+ "UTCTimeMillis": {
+ "description": "The time when the session was created",
+ "example": "2021-05-12T10:52:02.671Z",
+ "format": "yyyy-mm-ddThh:MM:ss.qqqZ",
+ "type": "string"
+ },
+ "UUID": {
+ "description": "The OAuth client's ID",
+ "example": "99db9768-04e3-4b5d-9268-831b6a25c4ab",
+ "format": "uuid",
+ "type": "string"
+ },
+ "Unnamed": {
+ "properties": {
+ "created_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "created_by": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "permissions": {
+ "$ref": "#/components/schemas/Permissions"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "user",
+ "permissions"
+ ],
+ "type": "object"
+ },
+ "UpdateBotPrekeys": {
+ "properties": {
+ "prekeys": {
+ "items": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "prekeys"
+ ],
+ "type": "object"
+ },
+ "UpdateClient": {
+ "properties": {
+ "capabilities": {
+ "description": "Hints provided by the client for the backend so it can behave in a backwards-compatible way.",
+ "items": {
+ "$ref": "#/components/schemas/ClientCapability"
+ },
+ "type": "array"
+ },
+ "label": {
+ "description": "A new name for this client.",
+ "type": "string"
+ },
+ "lastkey": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "mls_public_keys": {
+ "$ref": "#/components/schemas/MLSPublicKeys"
+ },
+ "prekeys": {
+ "description": "New prekeys for other clients to establish OTR sessions.",
+ "items": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "UpdateProvider": {
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ }
+ },
+ "type": "object"
+ },
+ "UpdateService": {
+ "properties": {
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "description": {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "summary": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "tags": {
+ "items": {
+ "$ref": "#/components/schemas/"
+ },
+ "maxItems": 3,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "UpdateServiceConn": {
+ "properties": {
+ "auth_tokens": {
+ "items": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "maxItems": 2,
+ "minItems": 1,
+ "type": "array"
+ },
+ "base_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "password": {
+ "maxLength": 1024,
+ "minLength": 6,
+ "type": "string"
+ },
+ "public_keys": {
+ "items": {
+ "$ref": "#/components/schemas/ServiceKeyPEM"
+ },
+ "maxItems": 2,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "password"
+ ],
+ "type": "object"
+ },
+ "UpdateServiceWhitelist": {
+ "properties": {
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "provider": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "whitelisted": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "provider",
+ "id",
+ "whitelisted"
+ ],
+ "type": "object"
+ },
+ "User": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "expires_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "handle": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "locale": {
+ "$ref": "#/components/schemas/Locale"
+ },
+ "managed_by": {
+ "$ref": "#/components/schemas/ManagedBy"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "picture": {
+ "$ref": "#/components/schemas/Pict"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "service": {
+ "$ref": "#/components/schemas/ServiceRef"
+ },
+ "sso_id": {
+ "$ref": "#/components/schemas/UserSSOId"
+ },
+ "supported_protocols": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "text_status": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "name",
+ "accent_id",
+ "locale"
+ ],
+ "type": "object"
+ },
+ "UserAsset": {
+ "properties": {
+ "key": {
+ "$ref": "#/components/schemas/AssetKey"
+ },
+ "size": {
+ "$ref": "#/components/schemas/AssetSize"
+ },
+ "type": {
+ "$ref": "#/components/schemas/AssetType"
+ }
+ },
+ "required": [
+ "key",
+ "type"
+ ],
+ "type": "object"
+ },
+ "UserClientMap": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "type": "object"
+ },
+ "UserClientPrekeyMap": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "properties": {
+ "id": {
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "key"
+ ],
+ "type": "object"
+ },
+ "type": "object"
+ },
+ "example": {
+ "1d51e2d6-9c70-605f-efc8-ff85c3dabdc7": {
+ "44901fb0712e588f": {
+ "id": 1,
+ "key": "pQABAQECoQBYIOjl7hw0D8YRNq..."
+ }
+ }
+ },
+ "type": "object"
+ },
+ "UserClients": {
+ "additionalProperties": {
+ "items": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "description": "Map of user id to list of client ids.",
+ "example": {
+ "1d51e2d6-9c70-605f-efc8-ff85c3dabdc7": [
+ "60f85e4b15ad3786",
+ "6e323ab31554353b"
+ ]
+ },
+ "type": "object"
+ },
+ "UserConnection": {
+ "properties": {
+ "conversation": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "from": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "last_update": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "qualified_conversation": {
+ "$ref": "#/components/schemas/Qualified_ConvId"
+ },
+ "qualified_to": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "status": {
+ "$ref": "#/components/schemas/Relation"
+ },
+ "to": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "from",
+ "qualified_to",
+ "status",
+ "last_update"
+ ],
+ "type": "object"
+ },
+ "UserIdList": {
+ "properties": {
+ "user_ids": {
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "user_ids"
+ ],
+ "type": "object"
+ },
+ "UserLegalHoldStatus": {
+ "description": "The state of Legal Hold compliance for the member",
+ "enum": [
+ "enabled",
+ "pending",
+ "disabled",
+ "no_consent"
+ ],
+ "type": "string"
+ },
+ "UserLegalHoldStatusResponse": {
+ "properties": {
+ "client": {
+ "$ref": "#/components/schemas/Id"
+ },
+ "last_prekey": {
+ "$ref": "#/components/schemas/Prekey"
+ },
+ "status": {
+ "$ref": "#/components/schemas/UserLegalHoldStatus"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "UserMap_Set_PubClient": {
+ "additionalProperties": {
+ "items": {
+ "$ref": "#/components/schemas/PubClient"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
+ "description": "Map of UserId to (Set PubClient)",
+ "example": {
+ "1d51e2d6-9c70-605f-efc8-ff85c3dabdc7": [
+ {
+ "class": "legalhold",
+ "id": "d0"
+ }
+ ]
+ },
+ "type": "object"
+ },
+ "UserProfile": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "deleted": {
+ "type": "boolean"
+ },
+ "email": {
+ "$ref": "#/components/schemas/Email"
+ },
+ "expires_at": {
+ "$ref": "#/components/schemas/UTCTimeMillis"
+ },
+ "handle": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "id": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "legalhold_status": {
+ "$ref": "#/components/schemas/UserLegalHoldStatus"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "picture": {
+ "$ref": "#/components/schemas/Pict"
+ },
+ "qualified_id": {
+ "$ref": "#/components/schemas/Qualified_UserId"
+ },
+ "service": {
+ "$ref": "#/components/schemas/ServiceRef"
+ },
+ "supported_protocols": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "text_status": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "qualified_id",
+ "name",
+ "accent_id",
+ "legalhold_status"
+ ],
+ "type": "object"
+ },
+ "UserSSOId": {
+ "properties": {
+ "scim_external_id": {
+ "type": "string"
+ },
+ "subject": {
+ "type": "string"
+ },
+ "tenant": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "UserUpdate": {
+ "properties": {
+ "accent_id": {
+ "format": "int32",
+ "maximum": 2147483647,
+ "minimum": -2147483648,
+ "type": "integer"
+ },
+ "assets": {
+ "items": {
+ "$ref": "#/components/schemas/UserAsset"
+ },
+ "type": "array"
+ },
+ "name": {
+ "maxLength": 128,
+ "minLength": 1,
+ "type": "string"
+ },
+ "picture": {
+ "$ref": "#/components/schemas/Pict"
+ },
+ "text_status": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "ValidateSAMLEmailsConfig.LockableFeature": {
+ "properties": {
+ "lockStatus": {
+ "$ref": "#/components/schemas/LockStatus"
+ },
+ "status": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "ttl": {
+ "example": "unlimited",
+ "maximum": 18446744073709551615,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "status",
+ "lockStatus"
+ ],
+ "type": "object"
+ },
+ "VerificationAction": {
+ "enum": [
+ "create_scim_token",
+ "login",
+ "delete_team"
+ ],
+ "type": "string"
+ },
+ "VerifyDeleteUser": {
+ "description": "Data for verifying an account deletion.",
+ "properties": {
+ "code": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "key": {
+ "$ref": "#/components/schemas/ASCII"
+ }
+ },
+ "required": [
+ "key",
+ "code"
+ ],
+ "type": "object"
+ },
+ "VersionInfo": {
+ "example": {
+ "development": [
+ 7
+ ],
+ "domain": "example.com",
+ "federation": false,
+ "supported": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ]
+ },
+ "properties": {
+ "development": {
+ "items": {
+ "$ref": "#/components/schemas/VersionNumber"
+ },
+ "type": "array"
+ },
+ "domain": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "federation": {
+ "type": "boolean"
+ },
+ "supported": {
+ "items": {
+ "$ref": "#/components/schemas/VersionNumber"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "supported",
+ "development",
+ "federation",
+ "domain"
+ ],
+ "type": "object"
+ },
+ "VersionNumber": {
+ "enum": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "type": "integer"
+ },
+ "ViewLegalHoldService": {
+ "properties": {
+ "settings": {
+ "$ref": "#/components/schemas/ViewLegalHoldServiceInfo"
+ },
+ "status": {
+ "$ref": "#/components/schemas/LHServiceStatus"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ "ViewLegalHoldServiceInfo": {
+ "properties": {
+ "auth_token": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "base_url": {
+ "$ref": "#/components/schemas/HttpsUrl"
+ },
+ "fingerprint": {
+ "$ref": "#/components/schemas/Fingerprint"
+ },
+ "public_key": {
+ "$ref": "#/components/schemas/ServiceKeyPEM"
+ },
+ "team_id": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "team_id",
+ "base_url",
+ "fingerprint",
+ "auth_token",
+ "public_key"
+ ],
+ "type": "object"
+ },
+ "WireIdP": {
+ "properties": {
+ "apiVersion": {
+ "$ref": "#/components/schemas/WireIdPAPIVersion"
+ },
+ "handle": {
+ "type": "string"
+ },
+ "oldIssuers": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "replacedBy": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "team": {
+ "$ref": "#/components/schemas/UUID"
+ }
+ },
+ "required": [
+ "team",
+ "oldIssuers",
+ "handle"
+ ],
+ "type": "object"
+ },
+ "WireIdPAPIVersion": {
+ "enum": [
+ "WireIdPAPIV1",
+ "WireIdPAPIV2"
+ ],
+ "type": "string"
+ },
+ "XmlText": {
+ "properties": {
+ "fromXmlText": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "fromXmlText"
+ ],
+ "type": "object"
+ },
+ "new-otr-message": {
+ "properties": {
+ "data": {
+ "type": "string"
+ },
+ "native_priority": {
+ "$ref": "#/components/schemas/Priority"
+ },
+ "native_push": {
+ "type": "boolean"
+ },
+ "recipients": {
+ "$ref": "#/components/schemas/UserClientMap"
+ },
+ "report_missing": {
+ "items": {
+ "$ref": "#/components/schemas/UUID"
+ },
+ "type": "array"
+ },
+ "sender": {
+ "description": "A 64-bit unsigned integer, represented as a hexadecimal numeral. Any valid hexadecimal numeral is accepted, but the backend will only produce representations with lowercase digits and no leading zeros",
+ "type": "string"
+ },
+ "transient": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "sender",
+ "recipients"
+ ],
+ "type": "object"
+ }
+ },
+ "securitySchemes": {
+ "ZAuth": {
+ "description": "Must be a token retrieved by calling 'POST /login' or 'POST /access'. It must be presented in this format: 'Bearer \\'.",
+ "in": "header",
+ "name": "Authorization",
+ "type": "apiKey"
+ }
+ }
+ },
+ "info": {
+ "description": "## Authentication / Authorization\n\nThe end-points in this API support differing authorization protocols:\nsome are unauthenticated (`/api-version`, `/login`), some require\n[zauth](), and some support both [zauth]() and [oauth]().\n\nThe end-points that require zauth are labelled so in the description\nbelow. The end-points that support oauth as an alternative to zauth\nhave the required oauth scopes listed in the same description.\n\nFuther reading:\n- https://docs.wire.com/developer/reference/oauth.html\n- https://github.com/wireapp/wire-server/blob/develop/libs/wire-api/src/Wire/API/Routes/Public.hs (search for HasSwagger instances)\n- `curl https://staging-nginz-https.zinfra.io/v4/api/swagger.json | jq '.security, .securityDefinitions`\n\n### SSO Endpoints\n\n#### Overview\n\n`/sso/metadata` will be requested by the IdPs to learn how to talk to wire.\n\n`/sso/initiate-login`, `/sso/finalize-login` are for the SAML authentication handshake performed by a user in order to log into wire. They are not exactly standard in their details: they may return HTML or XML; redirect to error URLs instead of throwing errors, etc.\n\n`/identity-providers` end-points are for use in the team settings page when IdPs are registered. They talk json.\n\n\n#### Configuring IdPs\n\nIdPs usually allow you to copy the metadata into your clipboard. That should contain all the details you need to post the idp in your team under `/identity-providers`. (Team id is derived from the authorization credentials of the request.)\n\n##### okta.com\n\nOkta will ask you to provide two URLs when you set it up for talking to wireapp:\n\n1. The `Single sign on URL`. This is the end-point that accepts the user's credentials after successful authentication against the IdP. Choose `/sso/finalize-login` with schema and hostname of the wire server you are configuring.\n\n2. The `Audience URI`. You can find this in the metadata returned by the `/sso/metadata` end-point. It is the contents of the `md:OrganizationURL` element.\n\n##### centrify.com\n\nCentrify allows you to upload the metadata xml document that you get from the `/sso/metadata` end-point. You can also enter the metadata url and have centrify retrieve the xml, but to guarantee integrity of the setup, the metadata should be copied from the team settings page and pasted into the centrify setup page without any URL indirections.\n\n## Federation errors\n\nEndpoints involving federated calls to other domains can return some extra failure responses, common to all endpoints. Instead of listing them as possible responses for each endpoint, we document them here.\n\nFor errors that are more likely to be transient, we suggest clients to retry whatever request resulted in the error. Transient errors are indicated explicitly below.\n\n**Note**: when a failure occurs as a result of making a federated RPC to another backend, the error response contains the following extra fields:\n\n - `type`: \"federation\" (just the literal string in quotes, which can be used as an error type identifier when parsing errors)\n - `domain`: the target backend of the RPC that failed;\n - `path`: the path of the RPC that failed.\n\n### Domain errors\n\nErrors in this category result from trying to communicate with a backend that is considered non-existent or invalid. They can result from invalid user input or client issues, but they can also be a symptom of misconfiguration in one or multiple backends. These errors have a 4xx status code.\n\n - **Remote backend not found** (status: 422, label: `invalid-domain`): This backend attempted to contact a backend which does not exist or is not properly configured. For the most part, clients can consider this error equivalent to a domain not existing, although it should be noted that certain mistakes in the DNS configuration on a remote backend can lead to the backend not being recognized, and hence to this error. It is therefore not advisable to take any destructive action upon encountering this error, such as deleting remote users from conversations.\n - **Federation denied locally** (status: 400, label: `federation-denied`): This backend attempted an RPC to a non-whitelisted backend. Similar considerations as for the previous error apply.\n - **Federation not enabled** (status: 400, label: `federation-not-enabled`): Federation has not been configured for this backend. This will happen if a federation-aware client tries to talk to a backend for which federation is disabled, or if federation was disabled on the backend after reaching a federation-specific state (e.g. conversations with remote users). There is no way to cleanly recover from these errors at this point.\n\n### Local federation errors\n\nAn error in this category likely indicates an issue with the configuration of federation on the local backend. Possibly transient errors are indicated explicitly below. All these errors have a 500 status code.\n\n - **Federation unavailable** (status: 500, label: `federation-not-available`): Federation is configured for this backend, but the local federator cannot be reached. This can be transient, so clients should retry the request.\n - **Federation not implemented** (status: 500, label: `federation-not-implemented`): Federated behaviour for a certain endpoint is not yet implemented.\n - **Federator discovery failed** (status: 400, label: `discovery-failure`): A DNS error occurred during discovery of a remote backend. This can be transient, so clients should retry the request.\n - **Local federation error** (status: 500, label: `federation-local-error`): An error occurred in the communication between this backend and its local federator. These errors are most likely caused by bugs in the backend, and should be reported as such.\n\n### Remote federation errors\n\nErrors in this category are returned in case of communication issues between the local backend and a remote one, or if the remote side encountered an error while processing an RPC. Some errors in this category might be caused by incorrect client behaviour, wrong user input, or incorrect certificate configuration. Possibly transient errors are indicated explicitly. We use non-standard 5xx status codes for these errors.\n\n - **HTTP2 error** (status: 533, label: `federation-http2-error`): The current federator encountered an error when making an HTTP2 request to a remote one. Check the error message for more details.\n - **Connection refused** (status: 521, label: `federation-connection-refused`): The local federator could not connect to a remote one. This could be transient, so clients should retry the request.\n - **TLS failure**: (status: 525, label: `federation-tls-error`): An error occurred during the TLS handshake between the local federator and a remote one. This is most likely due to an issue with the certificate on the remote end.\n - **Remote federation error** (status: 533, label: `federation-remote-error`): The remote backend could not process a request coming from this backend. Check the error message for more details.\n - **Version negotiation error** (status: 533, label: `federation-version-error`): The remote backend returned invalid version information.\n\n### Backend compatibility errors\n\nAn error in this category will be returned when this backend makes an invalid or unsupported RPC to another backend. This can indicate some incompatibility between backends or a backend bug. These errors are unlikely to be transient, so retrying requests is *not* advised.\n\n - **Version mismatch** (status: 531, label: `federation-version-mismatch`): A remote backend is running an unsupported version of the federator.\n - **Invalid content type** (status: 533, label: `federation-invalid-content-type`): An RPC to another backend returned with an invalid content type.\n - **Unsupported content type** (status: 533, label: `federation-unsupported-content-type`): An RPC to another backend returned with an unsupported content type.\n",
+ "title": "Wire-Server API",
+ "version": ""
+ },
+ "openapi": "3.0.0",
+ "paths": {
+ "/": {
+ "get": {
+ "description": " [internal route ID: \"get-services-tags\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceTagList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Get services tags"
+ }
+ },
+ "/access": {
+ "post": {
+ "description": " [internal route ID: \"access\"]\n\nYou can provide only a cookie or a cookie and token. Every other combination is invalid. Access tokens can be given as query parameter or authorisation header, with the latter being preferred.Calls federation service brig on send-connection-action",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "client_id",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AccessToken"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AccessToken"
+ }
+ }
+ },
+ "description": "OK",
+ "headers": {
+ "Set-Cookie": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)"
+ }
+ },
+ "summary": "Obtain an access tokens for a cookie"
+ }
+ },
+ "/access/logout": {
+ "post": {
+ "description": " [internal route ID: \"logout\"]\n\nCalling this endpoint will effectively revoke the given cookie and subsequent calls to /access with the same cookie will result in a 403.",
+ "responses": {
+ "200": {
+ "description": "Logout"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)"
+ }
+ },
+ "summary": "Log out in order to remove a cookie from the server"
+ }
+ },
+ "/access/self/email": {
+ "put": {
+ "description": " [internal route ID: \"change-self-email\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EmailUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": "Update accepted and pending activation of the new email"
+ },
+ "204": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": "No update, current and new email address are the same"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-email",
+ "message": "Invalid e-mail address."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid e-mail address. (label: `invalid-email`) or `body`"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "blacklisted-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nThe given e-mail address has been blacklisted due to a permanent bounce or a complaint. (label: `blacklisted-email`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address is in use. (label: `key-exists`)"
+ }
+ },
+ "summary": "Change your email address"
+ }
+ },
+ "/activate": {
+ "get": {
+ "description": " [internal route ID: \"get-activate\"]\n\nSee also 'POST /activate' which has a larger feature set.
Calls federation service brig on send-connection-action",
+ "parameters": [
+ {
+ "description": "Activation key",
+ "in": "query",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Activation code",
+ "in": "query",
+ "name": "code",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ActivationResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ActivationResponse"
+ }
+ }
+ },
+ "description": "Activation successful.\n\nActivation successful. (Dry run)\n\nActivation successful."
+ },
+ "204": {
+ "description": "A recent activation was already successful."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-phone",
+ "message": "Invalid mobile phone number"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-phone",
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `code` or `key`\n\nInvalid mobile phone number (label: `invalid-phone`)\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "invalid-code",
+ "message": "Invalid activation code"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid activation code (label: `invalid-code`)\n\nUser does not exist (label: `invalid-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address is in use. (label: `key-exists`)"
+ }
+ },
+ "summary": "Activate (i.e. confirm) an email address."
+ },
+ "post": {
+ "description": " [internal route ID: \"post-activate\"]\n\nActivation only succeeds once and the number of failed attempts for a valid key is limited.Calls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Activate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ActivationResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ActivationResponse"
+ }
+ }
+ },
+ "description": "Activation successful.\n\nActivation successful. (Dry run)\n\nActivation successful."
+ },
+ "204": {
+ "description": "A recent activation was already successful."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-phone",
+ "message": "Invalid mobile phone number"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-phone",
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid mobile phone number (label: `invalid-phone`)\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "invalid-code",
+ "message": "Invalid activation code"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid activation code (label: `invalid-code`)\n\nUser does not exist (label: `invalid-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address is in use. (label: `key-exists`)"
+ }
+ },
+ "summary": "Activate (i.e. confirm) an email address."
+ }
+ },
+ "/activate/send": {
+ "post": {
+ "description": " [internal route ID: \"post-activate-send\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SendActivationCode"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Activation code sent."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-email",
+ "message": "Invalid e-mail address."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "blacklisted-email",
+ "message": "The given e-mail address has been blacklisted due to a permanent bounce or a complaint."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "blacklisted-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address has been blacklisted due to a permanent bounce or a complaint. (label: `blacklisted-email`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address is in use. (label: `key-exists`)"
+ },
+ "451": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 451,
+ "label": "domain-blocked-for-registration",
+ "message": "[Customer extension] the email domain example.com that you are attempting to register a user with has been blocked for creating wire users. Please contact your IT department."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 451
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "domain-blocked-for-registration"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "[Customer extension] the email domain example.com that you are attempting to register a user with has been blocked for creating wire users. Please contact your IT department. (label: `domain-blocked-for-registration`)"
+ }
+ },
+ "summary": "Send (or resend) an email activation code."
+ }
+ },
+ "/api-version": {
+ "get": {
+ "description": " [internal route ID: \"get-version\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/VersionInfo"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/assets": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "multipart/mixed": {
+ "schema": {
+ "$ref": "#/components/schemas/AssetSource"
+ }
+ }
+ },
+ "description": "A body with content type `multipart/mixed body`. The first section's content type should be `application/json`. The second section's content type should be always be `application/octet-stream`. Other content types will be ignored by the server."
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ }
+ },
+ "description": "Asset posted",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-length",
+ "message": "Invalid content length"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-length"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid content length (label: `invalid-length`)"
+ },
+ "413": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 413,
+ "label": "client-error",
+ "message": "Asset too large"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 413
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Asset too large (label: `client-error`)"
+ }
+ },
+ "summary": "Upload an asset"
+ }
+ },
+ "/assets/{key_domain}/{key}": {
+ "delete": {
+ "description": "**Note**: only local assets can be deleted.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Asset deleted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorised",
+ "message": "Unauthorised operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorised"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unauthorised operation (label: `unauthorised`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key_domain` or `key` not found\n\nAsset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Delete an asset"
+ },
+ "get": {
+ "description": "**Note**: local assets result in a redirect, while remote assets are streamed directly.Calls federation service cargohold on stream-asset
Calls federation service cargohold on get-asset",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "header",
+ "name": "Asset-Token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "asset_token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Asset returned directly with content type `application/octet-stream`"
+ },
+ "302": {
+ "description": "Asset found",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key_domain` or `key` or Asset not found (label: `not-found`)\n\nAsset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Download an asset"
+ }
+ },
+ "/assets/{key}/token": {
+ "delete": {
+ "description": "**Note**: deleting the token makes the asset public.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Asset token deleted"
+ }
+ },
+ "summary": "Delete an asset token"
+ },
+ "post": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewAssetToken"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorised",
+ "message": "Unauthorised operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorised"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unauthorised operation (label: `unauthorised`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key` not found\n\nAsset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Renew an asset token"
+ }
+ },
+ "/await": {
+ "get": {
+ "description": " [internal route ID: \"await-notifications\"]\n\n",
+ "externalDocs": {
+ "description": "RFC 6455",
+ "url": "https://datatracker.ietf.org/doc/html/rfc6455"
+ },
+ "parameters": [
+ {
+ "description": "Client ID",
+ "in": "query",
+ "name": "client",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "101": {
+ "description": "Connection upgraded."
+ },
+ "426": {
+ "description": "Upgrade required."
+ }
+ },
+ "summary": "Establish websocket connection"
+ }
+ },
+ "/bot/assets": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "multipart/mixed": {
+ "schema": {
+ "$ref": "#/components/schemas/AssetSource"
+ }
+ }
+ },
+ "description": "A body with content type `multipart/mixed body`. The first section's content type should be `application/json`. The second section's content type should be always be `application/octet-stream`. Other content types will be ignored by the server."
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ }
+ },
+ "description": "Asset posted",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-length",
+ "message": "Invalid content length"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-length"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid content length (label: `invalid-length`)"
+ },
+ "413": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 413,
+ "label": "client-error",
+ "message": "Asset too large"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 413
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Asset too large (label: `client-error`)"
+ }
+ },
+ "summary": "Upload an asset"
+ }
+ },
+ "/bot/assets/{key}": {
+ "delete": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Asset deleted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorised",
+ "message": "Unauthorised operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorised"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unauthorised operation (label: `unauthorised`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key` not found\n\nAsset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Delete an asset"
+ },
+ "get": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "header",
+ "name": "Asset-Token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "asset_token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "302": {
+ "description": "Asset found",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key` or Asset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Download an asset"
+ }
+ },
+ "/bot/client": {
+ "get": {
+ "description": " [internal route ID: \"bot-get-client-v6\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Clientv6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Clientv6"
+ }
+ }
+ },
+ "description": "Client found"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "client-not-found",
+ "message": "Client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "client-not-found",
+ "message": "Client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Client not found (label: `client-not-found`)\n\nClient not found (label: `client-not-found`)"
+ }
+ },
+ "summary": "Get client for bot"
+ }
+ },
+ "/bot/client/prekeys": {
+ "get": {
+ "description": " [internal route ID: \"bot-list-prekeys\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "List prekeys for bot"
+ },
+ "post": {
+ "description": " [internal route ID: \"bot-update-prekeys\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateBotPrekeys"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "client-not-found",
+ "message": "Client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Client not found (label: `client-not-found`)"
+ }
+ },
+ "summary": "Update prekeys for bot"
+ }
+ },
+ "/bot/conversation": {
+ "get": {
+ "description": " [internal route ID: \"get-bot-conversation\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/BotConvView"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)\n\nYou do not have permission to access this resource (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Team not found (label: `no-team`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ }
+ }
+ },
+ "/bot/messages": {
+ "post": {
+ "description": " [internal route ID: \"post-bot-message-unqualified\"]\n\nCalls federation service brig on get-user-clients
Calls federation service galley on on-message-sent",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "ignore_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "report_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/new-otr-message"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unknown Client (label: `unknown-client`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nConversation not found (label: `no-conversation`)"
+ },
+ "412": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Missing clients"
+ }
+ }
+ }
+ },
+ "/bot/self": {
+ "delete": {
+ "description": " [internal route ID: \"bot-delete-self\"]\n\n",
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-bot",
+ "message": "The targeted user is not a bot."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-bot",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The targeted user is not a bot. (label: `invalid-bot`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Delete self"
+ },
+ "get": {
+ "description": " [internal route ID: \"bot-get-self\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserProfile"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "User not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "User not found (label: `not-found`)"
+ }
+ },
+ "summary": "Get self"
+ }
+ },
+ "/bot/users": {
+ "get": {
+ "description": " [internal route ID: \"bot-list-users\"]\n\n",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "ids",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/BotUserView"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "List users"
+ }
+ },
+ "/bot/users/prekeys": {
+ "post": {
+ "description": " [internal route ID: \"bot-claim-users-prekeys\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserClients"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserClientPrekeyMap"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "missing-legalhold-consent",
+ "message": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "missing-legalhold-consent",
+ "missing-legalhold-consent-old-clients",
+ "too-many-clients",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nToo many clients (label: `too-many-clients`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Claim users prekeys"
+ }
+ },
+ "/bot/users/{User ID}/clients": {
+ "get": {
+ "description": " [internal route ID: \"bot-get-user-clients\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "User ID",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/PubClient"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Get user clients"
+ }
+ },
+ "/broadcast/otr/messages": {
+ "post": {
+ "description": " [internal route ID: \"post-otr-broadcast-unqualified\"]\n\nThis endpoint ensures that the list of clients is correct and only sends the message if the list is correct.\nTo override this, the endpoint accepts two query params:\n- `ignore_missing`: Can be 'true' 'false' or a comma separated list of user IDs.\n - When 'true' all missing clients are ignored.\n - When 'false' all missing clients are reported.\n - When comma separated list of user-ids, only clients for listed users are ignored.\n- `report_missing`: Can be 'true' 'false' or a comma separated list of user IDs.\n - When 'true' all missing clients are reported.\n - When 'false' all missing clients are ignored.\n - When comma separated list of user-ids, only clients for listed users are reported.\n\nApart from these, the request body also accepts `report_missing` which can only be a list of user ids and behaves the same way as the query parameter.\n\nAll three of these should be considered mutually exclusive. The server however does not error if more than one is specified, it reads them in this order of precedence:\n- `report_missing` in the request body has highest precedence.\n- `ignore_missing` in the query param is the next.\n- `report_missing` in the query param has the lowest precedence.\n\nThis endpoint can lead to OtrMessageAdd event being sent to the recipients.\n\n**NOTE:** The protobuf definitions of the request body can be found at https://github.com/wireapp/generic-message-proto/blob/master/proto/otr.proto.",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "ignore_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "report_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/new-otr-message"
+ }
+ },
+ "application/x-protobuf": {
+ "schema": {
+ "$ref": "#/components/schemas/new-otr-message"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "too-many-users-to-broadcast",
+ "message": "Too many users to fan out the broadcast event to"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-users-to-broadcast"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body` or `report_missing` or `ignore_missing`\n\nToo many users to fan out the broadcast event to (label: `too-many-users-to-broadcast`)"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unknown Client (label: `unknown-client`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "non-binding-team",
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nNot a member of a binding team (label: `non-binding-team`)\n\nTeam not found (label: `no-team`)"
+ },
+ "412": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Missing clients"
+ }
+ },
+ "summary": "Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
+ }
+ },
+ "/broadcast/proteus/messages": {
+ "post": {
+ "description": " [internal route ID: \"post-proteus-broadcast\"]\n\nThis endpoint ensures that the list of clients is correct and only sends the message if the list is correct.\nTo override this, the endpoint accepts `client_mismatch_strategy` in the body. It can have these values:\n- `report_all`: When set, the message is not sent if any clients are missing. The missing clients are reported in the response.\n- `ignore_all`: When set, no checks about missing clients are carried out.\n- `report_only`: Takes a list of qualified UserIDs. If any clients of the listed users are missing, the message is not sent. The missing clients are reported in the response.\n- `ignore_only`: Takes a list of qualified UserIDs. If any clients of the non-listed users are missing, the message is not sent. The missing clients are reported in the response.\n\nThe sending of messages in a federated conversation could theoretically fail partially. To make this case unlikely, the backend first gets a list of clients from all the involved backends and then tries to send a message. So, if any backend is down, the message is not propagated to anyone. But the actual message fan out to multiple backends could still fail partially. This type of failure is reported as a 201, the clients for which the message sending failed are part of the response body.\n\nThis endpoint can lead to OtrMessageAdd event being sent to the recipients.\n\n**NOTE:** The protobuf definitions of the request body can be found at https://github.com/wireapp/generic-message-proto/blob/master/proto/otr.proto.",
+ "requestBody": {
+ "content": {
+ "application/x-protobuf": {
+ "schema": {
+ "$ref": "#/components/schemas/QualifiedNewOtrMessage"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "too-many-users-to-broadcast",
+ "message": "Too many users to fan out the broadcast event to"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-users-to-broadcast"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nToo many users to fan out the broadcast event to (label: `too-many-users-to-broadcast`)"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unknown Client (label: `unknown-client`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "non-binding-team",
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nNot a member of a binding team (label: `non-binding-team`)\n\nTeam not found (label: `no-team`)"
+ },
+ "412": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ }
+ },
+ "description": "Missing clients"
+ }
+ },
+ "summary": "Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
+ }
+ },
+ "/calls/config": {
+ "get": {
+ "deprecated": true,
+ "description": " [internal route ID: \"get-calls-config\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RTCConfiguration"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Retrieve TURN server addresses and credentials for IP addresses, scheme `turn` and transport `udp` only (deprecated)"
+ }
+ },
+ "/calls/config/v2": {
+ "get": {
+ "description": " [internal route ID: \"get-calls-config-v2\"]\n\n",
+ "parameters": [
+ {
+ "description": "Limit resulting list. Allowed values [1..10]",
+ "in": "query",
+ "name": "limit",
+ "required": false,
+ "schema": {
+ "maximum": 10,
+ "minimum": 1,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RTCConfiguration"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Retrieve all TURN server addresses and credentials. Clients are expected to do a DNS lookup to resolve the IP addresses of the given hostnames "
+ }
+ },
+ "/clients": {
+ "get": {
+ "description": " [internal route ID: \"list-clients-v6\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientListv6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientListv6"
+ }
+ }
+ },
+ "description": "List of clients"
+ }
+ },
+ "summary": "List the registered clients"
+ },
+ "post": {
+ "description": " [internal route ID: \"add-client\"]\n\nCalls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewClient"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Client"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Client"
+ }
+ }
+ },
+ "description": "Client registered",
+ "headers": {
+ "Location": {
+ "description": "Client ID",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "bad-request",
+ "message": "Malformed prekeys uploaded"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "bad-request"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nMalformed prekeys uploaded (label: `bad-request`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Code authentication is required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "missing-auth",
+ "too-many-clients"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Code authentication is required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nRe-authentication via password required (label: `missing-auth`)\n\nToo many clients (label: `too-many-clients`)"
+ }
+ },
+ "summary": "Register a new client"
+ }
+ },
+ "/clients/{cid}/access-token": {
+ "post": {
+ "description": " [internal route ID: \"create-access-token\"]\n\nCreate an JWT DPoP access token for the client CSR, given a JWT DPoP proof, specified in the `DPoP` header. The access token will be returned as JWT DPoP token in the `DPoP` header.",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "cid",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "header",
+ "name": "DPoP",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DPoPAccessTokenResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DPoPAccessTokenResponse"
+ }
+ }
+ },
+ "description": "Access token created",
+ "headers": {
+ "Cache-Control": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Create a JWT DPoP access token"
+ }
+ },
+ "/clients/{client}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-client\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteClient"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Client deleted"
+ }
+ },
+ "summary": "Delete an existing client"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-client-v6\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Clientv6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Clientv6"
+ }
+ }
+ },
+ "description": "Client found"
+ },
+ "404": {
+ "description": "`client` or Client not found(**Note**: This error has an empty body for legacy reasons)"
+ }
+ },
+ "summary": "Get a registered client by ID"
+ },
+ "put": {
+ "description": " [internal route ID: \"update-client\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateClient"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Client updated"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "bad-request",
+ "message": "Malformed prekeys uploaded"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "bad-request"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nMalformed prekeys uploaded (label: `bad-request`)"
+ }
+ },
+ "summary": "Update a registered client"
+ }
+ },
+ "/clients/{client}/capabilities": {
+ "get": {
+ "description": " [internal route ID: \"get-client-capabilities\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientCapabilityList"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Read back what the client has been posting about itself"
+ }
+ },
+ "/clients/{client}/nonce": {
+ "get": {
+ "description": " [internal route ID: \"get-nonce\"]\n\nGet a new nonce for a client CSR, specified in the response header `Replay-Nonce` as a uuidv4 in base64url encoding.",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "headers": {
+ "Cache-Control": {
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Replay-Nonce": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Get a new nonce for a client CSR"
+ },
+ "head": {
+ "description": " [internal route ID: \"head-nonce\"]\n\nGet a new nonce for a client CSR, specified in the response header `Replay-Nonce` as a uuidv4 in base64url encoding.",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "No Content",
+ "headers": {
+ "Cache-Control": {
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Replay-Nonce": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Get a new nonce for a client CSR"
+ }
+ },
+ "/clients/{client}/prekeys": {
+ "get": {
+ "description": " [internal route ID: \"get-client-prekeys\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List the remaining prekey IDs of a client"
+ }
+ },
+ "/connections/{uid_domain}/{uid}": {
+ "get": {
+ "description": " [internal route ID: \"get-connection\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ }
+ },
+ "description": "Connection found"
+ },
+ "404": {
+ "description": "`uid_domain` or `uid` or Connection not found(**Note**: This error has an empty body for legacy reasons)"
+ }
+ },
+ "summary": "Get an existing connection to another user (local or remote)"
+ },
+ "post": {
+ "description": " [internal route ID: \"create-connection\"]\n\nYou can have no more than 1000 connections in accepted or sent state
Calls federation service brig on send-connection-action
Calls federation service brig on get-users-by-ids",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ }
+ },
+ "description": "Connection existed"
+ },
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ }
+ },
+ "description": "Connection was created"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-user",
+ "message": "Invalid user"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-user"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid user (label: `invalid-user`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-identity",
+ "message": "The user has no verified email"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-identity",
+ "connection-limit",
+ "missing-legalhold-consent",
+ "missing-legalhold-consent-old-clients"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The user has no verified email (label: `no-identity`)\n\nToo many sent/accepted connections (label: `connection-limit`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)"
+ }
+ },
+ "summary": "Create a connection to another user"
+ },
+ "put": {
+ "description": " [internal route ID: \"update-connection\"]\n\nCalls federation service brig on send-connection-action
Calls federation service brig on get-users-by-ids",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConnectionUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserConnection"
+ }
+ }
+ },
+ "description": "Connection updated"
+ },
+ "204": {
+ "description": "Connection unchanged"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-user",
+ "message": "Invalid user"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-user"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid user (label: `invalid-user`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-identity",
+ "message": "The user has no verified email"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-identity",
+ "bad-conn-update",
+ "not-connected",
+ "connection-limit",
+ "missing-legalhold-consent",
+ "missing-legalhold-consent-old-clients"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The user has no verified email (label: `no-identity`)\n\nInvalid status transition (label: `bad-conn-update`)\n\nUsers are not connected (label: `not-connected`)\n\nToo many sent/accepted connections (label: `connection-limit`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)"
+ }
+ },
+ "summary": "Update a connection to another user"
+ }
+ },
+ "/conversations": {
+ "post": {
+ "description": " [internal route ID: \"create-group-conversation\"]\n\nThis returns 201 when a new conversation is created, and 200 when the conversation already existed
Calls federation service galley on on-conversation-updated
Calls federation service galley on on-conversation-created
Calls federation service brig on get-not-fully-connected-backends
Calls federation service brig on api-version",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewConv"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ }
+ },
+ "description": "Conversation existed",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateGroupConversationv6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateGroupConversationv6"
+ }
+ }
+ },
+ "description": "Conversation created",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled",
+ "non-empty-member-list"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nMLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)\n\nAttempting to add group members outside MLS (label: `non-empty-member-list`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "missing-legalhold-consent",
+ "message": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "missing-legalhold-consent",
+ "operation-denied",
+ "no-team-member",
+ "not-connected",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nInsufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nUsers are not connected (label: `not-connected`)\n\nConversation access denied (label: `access-denied`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "non_federating_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "non_federating_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Adding members to the conversation is not possible because the backends involved do not form a fully connected graph"
+ },
+ "533": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "unreachable_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "unreachable_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some domains are unreachable"
+ }
+ },
+ "summary": "Create a new conversation"
+ }
+ },
+ "/conversations/code-check": {
+ "post": {
+ "description": " [internal route ID: \"code-check\"]\n\nIf the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCode"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Valid"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-conversation-password",
+ "message": "Invalid conversation password"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-conversation-password"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid conversation password (label: `invalid-conversation-password`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "no-conversation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nConversation code not found (label: `no-conversation-code`)"
+ }
+ },
+ "summary": "Check validity of a conversation code."
+ }
+ },
+ "/conversations/join": {
+ "get": {
+ "description": " [internal route ID: \"get-conversation-by-reusable-code\"]\n\n",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "code",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCoverView"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "access-denied",
+ "invalid-conversation-password"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nConversation access denied (label: `access-denied`)\n\nInvalid conversation password (label: `invalid-conversation-password`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "no-conversation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nConversation code not found (label: `no-conversation-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "guest-links-disabled",
+ "message": "The guest link feature is disabled and all guest links have been revoked"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "guest-links-disabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The guest link feature is disabled and all guest links have been revoked (label: `guest-links-disabled`)"
+ }
+ },
+ "summary": "Get limited conversation information by key/code pair"
+ },
+ "post": {
+ "description": " [internal route ID: \"join-conversation-by-code-unqualified\"]\n\nIf the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled.Calls federation service galley on on-conversation-updated",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/JoinConversationByCode"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Conversation joined"
+ },
+ "204": {
+ "description": "Conversation unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "too-many-members",
+ "message": "Maximum number of members per conversation reached"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-members",
+ "no-team-member",
+ "invalid-op",
+ "access-denied",
+ "invalid-conversation-password"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Maximum number of members per conversation reached (label: `too-many-members`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInvalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInvalid conversation password (label: `invalid-conversation-password`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "no-conversation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation not found (label: `no-conversation`)\n\nConversation code not found (label: `no-conversation-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "guest-links-disabled",
+ "message": "The guest link feature is disabled and all guest links have been revoked"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "guest-links-disabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The guest link feature is disabled and all guest links have been revoked (label: `guest-links-disabled`)"
+ }
+ },
+ "summary": "Join a conversation using a reusable code"
+ }
+ },
+ "/conversations/list": {
+ "post": {
+ "description": " [internal route ID: \"list-conversations\"]\n\nCalls federation service galley on get-conversations",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ListConversations"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationsResponse"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get conversation metadata for a list of conversation ids"
+ }
+ },
+ "/conversations/list-ids": {
+ "post": {
+ "description": " [internal route ID: \"list-conversation-ids\"]\n\nThe IDs returned by this endpoint are paginated. To get the first page, make a call with the `paging_state` field set to `null` (or omitted). Whenever the `has_more` field of the response is set to `true`, more results are available, and they can be obtained by calling the endpoint again, but this time passing the value of `paging_state` returned by the previous call. One can continue in this fashion until all results are returned, which is indicated by `has_more` being `false`. Note that `paging_state` should be considered an opaque token. It should not be inspected, or stored, or reused across multiple unrelated invocations of the endpoint.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GetPaginated_ConversationIds"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationIds_Page"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get all conversation IDs."
+ }
+ },
+ "/conversations/mls-self": {
+ "get": {
+ "description": " [internal route ID: \"get-mls-self-conversation\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Conversation"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Conversation"
+ }
+ }
+ },
+ "description": "The MLS self-conversation"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ }
+ },
+ "summary": "Get the user's MLS self-conversation"
+ }
+ },
+ "/conversations/one2one": {
+ "post": {
+ "description": " [internal route ID: \"create-one-to-one-conversation\"]\n\nCalls federation service galley on on-conversation-created",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewConv"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV3v3"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV3v3"
+ }
+ }
+ },
+ "description": "Conversation existed",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV3v3"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV3v3"
+ }
+ }
+ },
+ "description": "Conversation created",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "missing-legalhold-consent",
+ "message": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "missing-legalhold-consent",
+ "operation-denied",
+ "not-connected",
+ "no-team-member",
+ "non-binding-team-members",
+ "invalid-op",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nInsufficient permissions (label: `operation-denied`)\n\nUsers are not connected (label: `not-connected`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nBoth users must be members of the same binding team (label: `non-binding-team-members`)\n\nInvalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team",
+ "non-binding-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Team not found (label: `no-team`)\n\nNot a member of a binding team (label: `non-binding-team`)"
+ },
+ "533": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "unreachable_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "unreachable_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some domains are unreachable"
+ }
+ },
+ "summary": "Create a 1:1 conversation"
+ }
+ },
+ "/conversations/one2one/{usr_domain}/{usr}": {
+ "get": {
+ "description": " [internal route ID: \"get-one-to-one-mls-conversation@v6\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "usr_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "usr",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSOne2OneConversation_MLSPublicKey"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSOne2OneConversation_MLSPublicKey"
+ }
+ }
+ },
+ "description": "MLS 1-1 conversation"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "not-connected",
+ "message": "Users are not connected"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-connected"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Users are not connected (label: `not-connected`)"
+ }
+ },
+ "summary": "Get an MLS 1:1 conversation"
+ }
+ },
+ "/conversations/self": {
+ "post": {
+ "description": " [internal route ID: \"create-self-conversation\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ }
+ },
+ "description": "Conversation existed",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationV6v6"
+ }
+ }
+ },
+ "description": "Conversation created",
+ "headers": {
+ "Location": {
+ "description": "Conversation ID",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Create a self-conversation"
+ }
+ },
+ "/conversations/{Conversation ID}/bots": {
+ "post": {
+ "description": " [internal route ID: \"add-bot\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "Conversation ID",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AddBot"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AddBotResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AddBotResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "service-disabled",
+ "message": "The desired service is currently disabled."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "service-disabled",
+ "too-many-members",
+ "invalid-conversation",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The desired service is currently disabled. (label: `service-disabled`)\n\nMaximum number of members per conversation reached. (label: `too-many-members`)\n\nThe operation is not allowed in this conversation. (label: `invalid-conversation`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Add bot"
+ }
+ },
+ "/conversations/{Conversation ID}/bots/{Bot ID}": {
+ "delete": {
+ "description": " [internal route ID: \"remove-bot\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "Conversation ID",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "Bot ID",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RemoveBotResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RemoveBotResponse"
+ }
+ }
+ },
+ "description": "User found"
+ },
+ "204": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-conversation",
+ "message": "The operation is not allowed in this conversation."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-conversation",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The operation is not allowed in this conversation. (label: `invalid-conversation`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Remove bot"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}": {
+ "get": {
+ "description": " [internal route ID: \"get-conversation\"]\n\nCalls federation service galley on get-conversations",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Conversation"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get a conversation by ID"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/access": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-access\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationAccessData"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Access updated"
+ },
+ "204": {
+ "description": "Access unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid target access"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "access-denied",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid target access (label: `invalid-op`)\n\nInvalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)\n\nInsufficient authorization (missing modify_conversation_access) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update access modes for a conversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/groupinfo": {
+ "get": {
+ "description": " [internal route ID: \"get-group-info\"]\n\nCalls federation service galley on query-group-info",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "message/mls": {
+ "schema": {
+ "$ref": "#/components/schemas/GroupInfoData"
+ }
+ }
+ },
+ "description": "The group information"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "mls-missing-group-info",
+ "message": "The conversation has no group information"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-missing-group-info",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nThe conversation has no group information (label: `mls-missing-group-info`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get MLS group information"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/members": {
+ "post": {
+ "description": " [internal route ID: \"add-members-to-conversation\"]\n\nCalls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/InviteQualified"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Conversation updated"
+ },
+ "204": {
+ "description": "Conversation unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "missing-legalhold-consent",
+ "message": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "missing-legalhold-consent",
+ "not-connected",
+ "no-team-member",
+ "access-denied",
+ "too-many-members",
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Failed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nUsers are not connected (label: `not-connected`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nConversation access denied (label: `access-denied`)\n\nMaximum number of members per conversation reached (label: `too-many-members`)\n\nInvalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing leave_conversation) (label: `action-denied`)\n\nInsufficient authorization (missing add_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "non_federating_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "non_federating_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Adding members to the conversation is not possible because the backends involved do not form a fully connected graph"
+ },
+ "533": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "unreachable_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "unreachable_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some domains are unreachable"
+ }
+ },
+ "summary": "Add qualified members to an existing conversation."
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/members/{usr_domain}/{usr}": {
+ "delete": {
+ "description": " [internal route ID: \"remove-member\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated
Calls federation service galley on leave-conversation",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "usr_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Target User ID",
+ "in": "path",
+ "name": "usr",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Member removed"
+ },
+ "204": {
+ "description": "No change"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `usr_domain` or `usr` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Remove a member from a conversation"
+ },
+ "put": {
+ "description": " [internal route ID: \"update-other-member\"]\n\n**Note**: at least one field has to be provided.Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "usr_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Target User ID",
+ "in": "path",
+ "name": "usr",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OtherMemberUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Membership updated"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInvalid target (label: `invalid-op`)\n\nInsufficient authorization (missing modify_other_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation-member",
+ "message": "Conversation member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation-member",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `usr_domain` or `usr` not found\n\nConversation member not found (label: `no-conversation-member`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update membership of the specified user"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/message-timer": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-message-timer\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationMessageTimerUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Message timer updated"
+ },
+ "204": {
+ "description": "Message timer unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "access-denied",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInsufficient authorization (missing modify_conversation_message_timer) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update the message timer for a conversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/name": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-name\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationRename"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Name unchanged"
+ },
+ "204": {
+ "description": "Name updated"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing modify_conversation_name) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update conversation name"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/proteus/messages": {
+ "post": {
+ "description": " [internal route ID: \"post-proteus-message\"]\n\nThis endpoint ensures that the list of clients is correct and only sends the message if the list is correct.\nTo override this, the endpoint accepts `client_mismatch_strategy` in the body. It can have these values:\n- `report_all`: When set, the message is not sent if any clients are missing. The missing clients are reported in the response.\n- `ignore_all`: When set, no checks about missing clients are carried out.\n- `report_only`: Takes a list of qualified UserIDs. If any clients of the listed users are missing, the message is not sent. The missing clients are reported in the response.\n- `ignore_only`: Takes a list of qualified UserIDs. If any clients of the non-listed users are missing, the message is not sent. The missing clients are reported in the response.\n\nThe sending of messages in a federated conversation could theoretically fail partially. To make this case unlikely, the backend first gets a list of clients from all the involved backends and then tries to send a message. So, if any backend is down, the message is not propagated to anyone. But the actual message fan out to multiple backends could still fail partially. This type of failure is reported as a 201, the clients for which the message sending failed are part of the response body.\n\nThis endpoint can lead to OtrMessageAdd event being sent to the recipients.\n\n**NOTE:** The protobuf definitions of the request body can be found at https://github.com/wireapp/generic-message-proto/blob/master/proto/otr.proto.Calls federation service galley on send-message
Calls federation service galley on on-message-sent
Calls federation service brig on get-user-clients",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/x-protobuf": {
+ "schema": {
+ "$ref": "#/components/schemas/QualifiedNewOtrMessage"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unknown Client (label: `unknown-client`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or Conversation not found (label: `no-conversation`)"
+ },
+ "412": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MessageSendingStatus"
+ }
+ }
+ },
+ "description": "Missing clients"
+ }
+ },
+ "summary": "Post an encrypted message to a conversation (accepts only Protobuf)"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/protocol": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-protocol\"]\n\n**Note**: Only proteus->mixed upgrade is supported.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ProtocolUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Conversation updated"
+ },
+ "204": {
+ "description": "Conversation unchanged"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-migration-criteria-not-satisfied",
+ "message": "The migration criteria for mixed to MLS protocol transition are not satisfied for this conversation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-migration-criteria-not-satisfied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nThe migration criteria for mixed to MLS protocol transition are not satisfied for this conversation (label: `mls-migration-criteria-not-satisfied`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member",
+ "invalid-op",
+ "action-denied",
+ "invalid-protocol-transition"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInvalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing leave_conversation) (label: `action-denied`)\n\nProtocol transition is invalid (label: `invalid-protocol-transition`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nTeam not found (label: `no-team`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update the protocol of the conversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/receipt-mode": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-receipt-mode\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on update-conversation
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationReceiptModeUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Receipt mode updated"
+ },
+ "204": {
+ "description": "Receipt mode unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "access-denied",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInsufficient authorization (missing modify_conversation_receipt_mode) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update receipt mode for a conversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/self": {
+ "put": {
+ "description": " [internal route ID: \"update-conversation-self\"]\n\n**Note**: at least one field has to be provided.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MemberUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Update successful"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update self membership properties"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/subconversations/{subconv}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-subconversation\"]\n\nCalls federation service galley on delete-sub-conversation",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "subconv",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteSubConversationRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": "Deletion successful"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nMLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `subconv` not found\n\nConversation not found (label: `no-conversation`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "mls-stale-message",
+ "message": "The conversation epoch in a message is too old"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-stale-message"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The conversation epoch in a message is too old (label: `mls-stale-message`)"
+ }
+ },
+ "summary": "Delete an MLS subconversation"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-subconversation\"]\n\nCalls federation service galley on get-sub-conversation",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "subconv",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PublicSubConversation"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PublicSubConversation"
+ }
+ }
+ },
+ "description": "Subconversation"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "mls-subconv-unsupported-convtype",
+ "message": "MLS subconversations are only supported for regular conversations"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-subconv-unsupported-convtype",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS subconversations are only supported for regular conversations (label: `mls-subconv-unsupported-convtype`)\n\nConversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `subconv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get information about an MLS subconversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/subconversations/{subconv}/groupinfo": {
+ "get": {
+ "description": " [internal route ID: \"get-subconversation-group-info\"]\n\nCalls federation service galley on query-group-info",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "subconv",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "message/mls": {
+ "schema": {
+ "$ref": "#/components/schemas/GroupInfoData"
+ }
+ }
+ },
+ "description": "The group information"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "mls-missing-group-info",
+ "message": "The conversation has no group information"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-missing-group-info",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `subconv` not found\n\nThe conversation has no group information (label: `mls-missing-group-info`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get MLS group information of subconversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/subconversations/{subconv}/self": {
+ "delete": {
+ "description": " [internal route ID: \"leave-subconversation\"]\n\nCalls federation service galley on leave-sub-conversation
Calls federation service galley on on-mls-message-sent",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "subconv",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled",
+ "mls-protocol-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)\n\nMLS protocol error (label: `mls-protocol-error`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` or `subconv` not found\n\nConversation not found (label: `no-conversation`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "mls-stale-message",
+ "message": "The conversation epoch in a message is too old"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-stale-message"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The conversation epoch in a message is too old (label: `mls-stale-message`)"
+ }
+ },
+ "summary": "Leave an MLS subconversation"
+ }
+ },
+ "/conversations/{cnv_domain}/{cnv}/typing": {
+ "post": {
+ "description": " [internal route ID: \"member-typing-qualified\"]\n\nCalls federation service galley on on-typing-indicator-updated
Calls federation service galley on update-typing-indicator",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TypingData"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Notification sent"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv_domain` or `cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Sending typing notifications"
+ }
+ },
+ "/conversations/{cnv}": {
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-conversation-name-deprecated\"]\n\nUse `/conversations/:domain/:conv/name` instead.Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationRename"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Name updated"
+ },
+ "204": {
+ "description": "Name unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing modify_conversation_name) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update conversation name (deprecated)"
+ }
+ },
+ "/conversations/{cnv}/code": {
+ "delete": {
+ "description": " [internal route ID: \"remove-code-unqualified\"]\n\n",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Conversation code deleted."
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Delete conversation code"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-code\"]\n\n",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCodeInfo"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCodeInfo"
+ }
+ }
+ },
+ "description": "Conversation Code"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation",
+ "no-conversation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)\n\nConversation code not found (label: `no-conversation-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "guest-links-disabled",
+ "message": "The guest link feature is disabled and all guest links have been revoked"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "guest-links-disabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The guest link feature is disabled and all guest links have been revoked (label: `guest-links-disabled`)"
+ }
+ },
+ "summary": "Get existing conversation code"
+ },
+ "post": {
+ "description": " [internal route ID: \"create-conversation-code-unqualified\"]\n\n\nOAuth scope: `write:conversations_code`",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateConversationCodeRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCodeInfo"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationCodeInfo"
+ }
+ }
+ },
+ "description": "Conversation code already exists."
+ },
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Conversation code created."
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "create-conv-code-conflict",
+ "message": "Conversation code already exists with a different password setting than the requested one."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "create-conv-code-conflict",
+ "guest-links-disabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation code already exists with a different password setting than the requested one. (label: `create-conv-code-conflict`)\n\nThe guest link feature is disabled and all guest links have been revoked (label: `guest-links-disabled`)"
+ }
+ },
+ "summary": "Create or recreate a conversation code"
+ }
+ },
+ "/conversations/{cnv}/features/conversationGuestLinks": {
+ "get": {
+ "description": " [internal route ID: \"get-conversation-guest-links-status\"]\n\n",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GuestLinksConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
+ }
+ },
+ "/conversations/{cnv}/members/{usr}": {
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-other-member-unqualified\"]\n\nUse `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` insteadCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Target User ID",
+ "in": "path",
+ "name": "usr",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OtherMemberUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Membership updated"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInvalid target (label: `invalid-op`)\n\nInsufficient authorization (missing modify_other_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation-member",
+ "message": "Conversation member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation-member",
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` or `usr` not found\n\nConversation member not found (label: `no-conversation-member`)\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update membership of the specified user (deprecated)"
+ }
+ },
+ "/conversations/{cnv}/message-timer": {
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-conversation-message-timer-unqualified\"]\n\nUse `/conversations/:domain/:cnv/message-timer` instead.Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationMessageTimerUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Message timer updated"
+ },
+ "204": {
+ "description": "Message timer unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "access-denied",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInsufficient authorization (missing modify_conversation_message_timer) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update the message timer for a conversation (deprecated)"
+ }
+ },
+ "/conversations/{cnv}/name": {
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-conversation-name-unqualified\"]\n\nUse `/conversations/:domain/:conv/name` instead.Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationRename"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Name updated"
+ },
+ "204": {
+ "description": "Name unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing modify_conversation_name) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update conversation name (deprecated)"
+ }
+ },
+ "/conversations/{cnv}/otr/messages": {
+ "post": {
+ "description": " [internal route ID: \"post-otr-message-unqualified\"]\n\nThis endpoint ensures that the list of clients is correct and only sends the message if the list is correct.\nTo override this, the endpoint accepts two query params:\n- `ignore_missing`: Can be 'true' 'false' or a comma separated list of user IDs.\n - When 'true' all missing clients are ignored.\n - When 'false' all missing clients are reported.\n - When comma separated list of user-ids, only clients for listed users are ignored.\n- `report_missing`: Can be 'true' 'false' or a comma separated list of user IDs.\n - When 'true' all missing clients are reported.\n - When 'false' all missing clients are ignored.\n - When comma separated list of user-ids, only clients for listed users are reported.\n\nApart from these, the request body also accepts `report_missing` which can only be a list of user ids and behaves the same way as the query parameter.\n\nAll three of these should be considered mutually exclusive. The server however does not error if more than one is specified, it reads them in this order of precedence:\n- `report_missing` in the request body has highest precedence.\n- `ignore_missing` in the query param is the next.\n- `report_missing` in the query param has the lowest precedence.\n\nThis endpoint can lead to OtrMessageAdd event being sent to the recipients.\n\n**NOTE:** The protobuf definitions of the request body can be found at https://github.com/wireapp/generic-message-proto/blob/master/proto/otr.proto.Calls federation service brig on get-user-clients
Calls federation service galley on on-message-sent",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "ignore_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "report_missing",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/new-otr-message"
+ }
+ },
+ "application/x-protobuf": {
+ "schema": {
+ "$ref": "#/components/schemas/new-otr-message"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unknown-client",
+ "message": "Unknown Client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unknown-client",
+ "missing-legalhold-consent-old-clients",
+ "missing-legalhold-consent"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unknown Client (label: `unknown-client`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has old clients that do not support legalhold's UI requirements (label: `missing-legalhold-consent-old-clients`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` or Conversation not found (label: `no-conversation`)"
+ },
+ "412": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientMismatch"
+ }
+ }
+ },
+ "description": "Missing clients"
+ }
+ },
+ "summary": "Post an encrypted message to a conversation (accepts JSON or Protobuf)"
+ }
+ },
+ "/conversations/{cnv}/receipt-mode": {
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-conversation-receipt-mode-unqualified\"]\n\nUse `PUT /conversations/:domain/:cnv/receipt-mode` instead.Calls federation service brig on get-users-by-ids
Calls federation service galley on update-conversation
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationReceiptModeUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ },
+ "description": "Receipt mode updated"
+ },
+ "204": {
+ "description": "Receipt mode unchanged"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "access-denied",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nConversation access denied (label: `access-denied`)\n\nInsufficient authorization (missing modify_conversation_receipt_mode) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update receipt mode for a conversation (deprecated)"
+ }
+ },
+ "/conversations/{cnv}/roles": {
+ "get": {
+ "description": " [internal route ID: \"get-conversation-roles\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationRolesList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Conversation access denied"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Conversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get existing roles available for the given conversation"
+ }
+ },
+ "/conversations/{cnv}/self": {
+ "get": {
+ "deprecated": true,
+ "description": " [internal route ID: \"get-conversation-self-unqualified\"]\n\n",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Member"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get self membership properties (deprecated)"
+ },
+ "put": {
+ "deprecated": true,
+ "description": " [internal route ID: \"update-conversation-self-unqualified\"]\n\nUse `/conversations/:domain/:conv/self` instead.",
+ "parameters": [
+ {
+ "description": "Conversation ID",
+ "in": "path",
+ "name": "cnv",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MemberUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Update successful"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`cnv` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Update self membership properties (deprecated)"
+ }
+ },
+ "/cookies": {
+ "get": {
+ "description": " [internal route ID: \"list-cookies\"]\n\n",
+ "parameters": [
+ {
+ "description": "Filter by label (comma-separated list)",
+ "in": "query",
+ "name": "labels",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CookieList"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CookieList"
+ }
+ }
+ },
+ "description": "List of cookies"
+ }
+ },
+ "summary": "Retrieve the list of cookies currently stored for the user"
+ }
+ },
+ "/cookies/remove": {
+ "post": {
+ "description": " [internal route ID: \"remove-cookies\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RemoveCookies"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Cookies revoked"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)"
+ }
+ },
+ "summary": "Revoke stored cookies"
+ }
+ },
+ "/custom-backend/by-domain/{domain}": {
+ "get": {
+ "description": " [internal route ID: \"get-custom-backend-by-domain\"]\n\n",
+ "parameters": [
+ {
+ "description": "URL-encoded email domain",
+ "in": "path",
+ "name": "domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CustomBackend"
+ }
+ }
+ },
+ "description": ""
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "custom-backend-not-found",
+ "message": "Custom backend not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "custom-backend-not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`domain` not found\n\nCustom backend not found (label: `custom-backend-not-found`)"
+ }
+ },
+ "summary": "Shows information about custom backends related to a given email domain"
+ }
+ },
+ "/delete": {
+ "post": {
+ "description": " [internal route ID: \"verify-delete\"]\n\nCalls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyDeleteUser"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Deletion is initiated."
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-code",
+ "message": "Invalid verification code"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid verification code (label: `invalid-code`)"
+ }
+ },
+ "summary": "Verify account deletion with a code."
+ }
+ },
+ "/feature-configs": {
+ "get": {
+ "description": " [internal route ID: \"get-all-feature-configs-for-user\"]\n\nGets feature configs for a user. If the user is a member of a team and has the required permissions, this will return the team's feature configs.If the user is not a member of a team, this will return the personal feature configs (the server defaults).\nOAuth scope: `read:feature_configs`",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AllTeamFeatures"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Team not found (label: `no-team`)"
+ }
+ },
+ "summary": "Gets feature configs for a user"
+ }
+ },
+ "/identity-providers": {
+ "get": {
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPList"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "post": {
+ "parameters": [
+ {
+ "in": "query",
+ "name": "replaces",
+ "required": false,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "api_version",
+ "required": false,
+ "schema": {
+ "default": "v2",
+ "enum": [
+ "v1",
+ "v2"
+ ],
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "handle",
+ "required": false,
+ "schema": {
+ "maxLength": 1,
+ "minLength": 32,
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPMetadataInfo"
+ }
+ },
+ "application/xml": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPMetadataInfo"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPConfig_WireIdP"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/identity-providers/{id}": {
+ "delete": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "purge",
+ "required": false,
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": ""
+ }
+ }
+ },
+ "get": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPConfig_WireIdP"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "put": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "handle",
+ "required": false,
+ "schema": {
+ "maxLength": 1,
+ "minLength": 32,
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPMetadataInfo"
+ }
+ },
+ "application/xml": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPMetadataInfo"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/IdPConfig_WireIdP"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/identity-providers/{id}/raw": {
+ "get": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/list-connections": {
+ "post": {
+ "description": " [internal route ID: \"list-connections\"]\n\nThe IDs returned by this endpoint are paginated. To get the first page, make a call with the `paging_state` field set to `null` (or omitted). Whenever the `has_more` field of the response is set to `true`, more results are available, and they can be obtained by calling the endpoint again, but this time passing the value of `paging_state` returned by the previous call. One can continue in this fashion until all results are returned, which is indicated by `has_more` being `false`. Note that `paging_state` should be considered an opaque token. It should not be inspected, or stored, or reused across multiple unrelated invocations of the endpoint.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GetPaginated_Connections"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Connections_Page"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List the connections to other users, including remote users"
+ }
+ },
+ "/list-users": {
+ "post": {
+ "description": " [internal route ID: \"list-users-by-ids-or-handles\"]\n\nThe 'qualified_ids' and 'qualified_handles' parameters are mutually exclusive.Calls federation service brig on get-users-by-ids",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ListUsersQuery"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ListUsersById"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List users"
+ }
+ },
+ "/login": {
+ "post": {
+ "description": " [internal route ID: \"login\"]\n\nLogins are throttled at the server's discretionCalls federation service brig on send-connection-action",
+ "parameters": [
+ {
+ "description": "Request a persistent cookie instead of a session cookie",
+ "in": "query",
+ "name": "persist",
+ "required": false,
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Login"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AccessToken"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AccessToken"
+ }
+ }
+ },
+ "description": "OK",
+ "headers": {
+ "Set-Cookie": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Code authentication is required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "pending-activation",
+ "suspended",
+ "invalid-credentials"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Code authentication is required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nAccount pending activation (label: `pending-activation`)\n\nAccount suspended (label: `suspended`)\n\nAuthentication failed (label: `invalid-credentials`)"
+ }
+ },
+ "summary": "Authenticate a user to obtain a cookie and first access token"
+ }
+ },
+ "/mls/commit-bundles": {
+ "post": {
+ "description": " [internal route ID: \"mls-commit-bundle\"]\n\n\n\n**Note**: this endpoint can execute proposals, and therefore return all possible errors associated with adding or removing members to a conversation, in addition to the ones listed below. See the documentation of [POST /conversations/{cnv}/members/v2](#/default/post_conversations__cnv__members_v2) and [POST /conversations/{cnv_domain}/{cnv}/members/{usr_domain}/{usr}](#/default/delete_conversations__cnv_domain___cnv__members__usr_domain___usr_) for more details on the possible error responses of each type of proposal.
Calls federation service brig on api-version
Calls federation service brig on get-users-by-ids
Calls federation service brig on get-mls-clients
Calls federation service galley on on-conversation-updated
Calls federation service galley on send-mls-commit-bundle
Calls federation service galley on mls-welcome
Calls federation service galley on on-mls-message-sent",
+ "requestBody": {
+ "content": {
+ "message/mls": {
+ "schema": {
+ "$ref": "#/components/schemas/CommitBundle"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSMessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSMessageSendingStatus"
+ }
+ }
+ },
+ "description": "Commit accepted and forwarded"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-welcome-mismatch",
+ "message": "The list of targets of a welcome message does not match the list of new clients in a group"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-welcome-mismatch",
+ "mls-self-removal-not-allowed",
+ "mls-protocol-error",
+ "mls-not-enabled",
+ "mls-invalid-leaf-node-index",
+ "mls-group-conversation-mismatch",
+ "mls-commit-missing-references",
+ "mls-client-sender-user-mismatch"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nThe list of targets of a welcome message does not match the list of new clients in a group (label: `mls-welcome-mismatch`)\n\nSelf removal from group is not allowed (label: `mls-self-removal-not-allowed`)\n\nMLS protocol error (label: `mls-protocol-error`)\n\nMLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)\n\nA referenced leaf node index points to a blank or non-existing node (label: `mls-invalid-leaf-node-index`)\n\nConversation ID resolved from Group ID does not match submitted Conversation ID (label: `mls-group-conversation-mismatch`)\n\nThe commit is not referencing all pending proposals (label: `mls-commit-missing-references`)\n\nUser ID resolved from Client ID does not match message's sender user ID (label: `mls-client-sender-user-mismatch`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "mls-subconv-join-parent-missing",
+ "message": "MLS client cannot join the subconversation because it is not member of the parent conversation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-subconv-join-parent-missing",
+ "missing-legalhold-consent",
+ "legalhold-not-enabled",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS client cannot join the subconversation because it is not member of the parent conversation (label: `mls-subconv-join-parent-missing`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nlegal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nConversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "mls-proposal-not-found",
+ "message": "A proposal referenced in a commit message could not be found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-proposal-not-found",
+ "no-conversation",
+ "no-conversation-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "A proposal referenced in a commit message could not be found (label: `mls-proposal-not-found`)\n\nConversation not found (label: `no-conversation`)\n\nConversation member not found (label: `no-conversation-member`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "non_federating_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "non_federating_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Adding members to the conversation is not possible because the backends involved do not form a fully connected graph\n\nThe conversation epoch in a message is too old (label: `mls-stale-message`)\n\nA proposal of type Add or Remove does not apply to the full list of clients for a user (label: `mls-client-mismatch`)"
+ },
+ "422": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 422,
+ "label": "mls-unsupported-proposal",
+ "message": "Unsupported proposal type"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 422
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-unsupported-proposal",
+ "mls-unsupported-message"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unsupported proposal type (label: `mls-unsupported-proposal`)\n\nAttempted to send a message with an unsupported combination of content type and wire format (label: `mls-unsupported-message`)"
+ },
+ "533": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "unreachable_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "unreachable_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some domains are unreachable"
+ }
+ },
+ "summary": "Post a MLS CommitBundle"
+ }
+ },
+ "/mls/key-packages/claim/{user_domain}/{user}": {
+ "post": {
+ "description": " [internal route ID: \"mls-key-packages-claim\"]\n\nOnly key packages for the specified ciphersuite are claimed. For backwards compatibility, the `ciphersuite` parameter is optional, defaulting to ciphersuite 0x0001 when omitted.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "user_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "user",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Ciphersuite in hex format (e.g. 0xf031) - default is 0x0001",
+ "in": "query",
+ "name": "ciphersuite",
+ "required": false,
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/KeyPackageBundle"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/KeyPackageBundle"
+ }
+ }
+ },
+ "description": "Claimed key packages"
+ }
+ },
+ "summary": "Claim one key package for each client of the given user"
+ }
+ },
+ "/mls/key-packages/self/{client}": {
+ "delete": {
+ "description": " [internal route ID: \"mls-key-packages-delete\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Ciphersuite in hex format (e.g. 0xf031) - default is 0x0001",
+ "in": "query",
+ "name": "ciphersuite",
+ "required": false,
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteKeyPackages"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "OK"
+ }
+ },
+ "summary": "Delete all key packages for a given ciphersuite and client"
+ },
+ "post": {
+ "description": " [internal route ID: \"mls-key-packages-upload\"]\n\nThe request body should be a json object containing a list of base64-encoded key packages.",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/KeyPackageUpload"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Key packages uploaded"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-protocol-error",
+ "message": "MLS protocol error"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-protocol-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nMLS protocol error (label: `mls-protocol-error`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "mls-identity-mismatch",
+ "message": "Key package credential does not match qualified client ID"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-identity-mismatch"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Key package credential does not match qualified client ID (label: `mls-identity-mismatch`)"
+ }
+ },
+ "summary": "Upload a fresh batch of key packages"
+ },
+ "put": {
+ "description": " [internal route ID: \"mls-key-packages-replace\"]\n\nThe request body should be a json object containing a list of base64-encoded key packages. Use this sparingly.",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Comma-separated list of ciphersuites in hex format (e.g. 0xf031) - default is 0x0001",
+ "in": "query",
+ "name": "ciphersuites",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/KeyPackageUpload"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Key packages replaced"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-protocol-error",
+ "message": "MLS protocol error"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-protocol-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body` or `ciphersuites`\n\nMLS protocol error (label: `mls-protocol-error`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "mls-identity-mismatch",
+ "message": "Key package credential does not match qualified client ID"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-identity-mismatch"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Key package credential does not match qualified client ID (label: `mls-identity-mismatch`)"
+ }
+ },
+ "summary": "Upload a fresh batch of key packages and replace the old ones"
+ }
+ },
+ "/mls/key-packages/self/{client}/count": {
+ "get": {
+ "description": " [internal route ID: \"mls-key-packages-count\"]\n\n",
+ "parameters": [
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Ciphersuite in hex format (e.g. 0xf031) - default is 0x0001",
+ "in": "query",
+ "name": "ciphersuite",
+ "required": false,
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OwnKeyPackages"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OwnKeyPackages"
+ }
+ }
+ },
+ "description": "Number of key packages"
+ }
+ },
+ "summary": "Return the number of unclaimed key packages for a given ciphersuite and client"
+ }
+ },
+ "/mls/messages": {
+ "post": {
+ "description": " [internal route ID: \"mls-message\"]\n\n\n\n**Note**: this endpoint can execute proposals, and therefore return all possible errors associated with adding or removing members to a conversation, in addition to the ones listed below. See the documentation of [POST /conversations/{cnv}/members/v2](#/default/post_conversations__cnv__members_v2) and [POST /conversations/{cnv_domain}/{cnv}/members/{usr_domain}/{usr}](#/default/delete_conversations__cnv_domain___cnv__members__usr_domain___usr_) for more details on the possible error responses of each type of proposal.
Calls federation service brig on get-mls-clients
Calls federation service galley on on-conversation-updated
Calls federation service galley on send-mls-message
Calls federation service galley on on-mls-message-sent",
+ "requestBody": {
+ "content": {
+ "message/mls": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSMessage"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSMessageSendingStatus"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSMessageSendingStatus"
+ }
+ }
+ },
+ "description": "Message sent"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-self-removal-not-allowed",
+ "message": "Self removal from group is not allowed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-self-removal-not-allowed",
+ "mls-protocol-error",
+ "mls-not-enabled",
+ "mls-invalid-leaf-node-index",
+ "mls-group-conversation-mismatch",
+ "mls-commit-missing-references",
+ "mls-client-sender-user-mismatch"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nSelf removal from group is not allowed (label: `mls-self-removal-not-allowed`)\n\nMLS protocol error (label: `mls-protocol-error`)\n\nMLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)\n\nA referenced leaf node index points to a blank or non-existing node (label: `mls-invalid-leaf-node-index`)\n\nConversation ID resolved from Group ID does not match submitted Conversation ID (label: `mls-group-conversation-mismatch`)\n\nThe commit is not referencing all pending proposals (label: `mls-commit-missing-references`)\n\nUser ID resolved from Client ID does not match message's sender user ID (label: `mls-client-sender-user-mismatch`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "mls-subconv-join-parent-missing",
+ "message": "MLS client cannot join the subconversation because it is not member of the parent conversation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-subconv-join-parent-missing",
+ "missing-legalhold-consent",
+ "legalhold-not-enabled",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "MLS client cannot join the subconversation because it is not member of the parent conversation (label: `mls-subconv-join-parent-missing`)\n\nFailed to connect to a user or to invite a user to a group because somebody is under legalhold and somebody else has not granted consent (label: `missing-legalhold-consent`)\n\nlegal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nConversation access denied (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "mls-proposal-not-found",
+ "message": "A proposal referenced in a commit message could not be found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-proposal-not-found",
+ "no-conversation",
+ "no-conversation-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "A proposal referenced in a commit message could not be found (label: `mls-proposal-not-found`)\n\nConversation not found (label: `no-conversation`)\n\nConversation member not found (label: `no-conversation-member`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "non_federating_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "non_federating_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Adding members to the conversation is not possible because the backends involved do not form a fully connected graph\n\nThe conversation epoch in a message is too old (label: `mls-stale-message`)\n\nA proposal of type Add or Remove does not apply to the full list of clients for a user (label: `mls-client-mismatch`)"
+ },
+ "422": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 422,
+ "label": "mls-unsupported-proposal",
+ "message": "Unsupported proposal type"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 422
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-unsupported-proposal",
+ "mls-unsupported-message"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unsupported proposal type (label: `mls-unsupported-proposal`)\n\nAttempted to send a message with an unsupported combination of content type and wire format (label: `mls-unsupported-message`)"
+ },
+ "533": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "unreachable_backends": {
+ "items": {
+ "$ref": "#/components/schemas/Domain"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "unreachable_backends"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some domains are unreachable"
+ }
+ },
+ "summary": "Post an MLS message"
+ }
+ },
+ "/mls/public-keys": {
+ "get": {
+ "description": " [internal route ID: \"mls-public-keys\"]\n\nThe format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format.",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "format",
+ "required": false,
+ "schema": {
+ "enum": [
+ "raw",
+ "jwk"
+ ],
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSKeysByPurpose"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSKeysByPurpose"
+ }
+ }
+ },
+ "description": "Public keys"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "mls-not-enabled",
+ "message": "MLS is not configured on this backend. See docs.wire.com for instructions on how to enable it"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "mls-not-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `format`\n\nMLS is not configured on this backend. See docs.wire.com for instructions on how to enable it (label: `mls-not-enabled`)"
+ }
+ },
+ "summary": "Get public keys used by the backend to sign external proposals"
+ }
+ },
+ "/notifications": {
+ "get": {
+ "description": " [internal route ID: \"get-notifications\"]\n\n",
+ "parameters": [
+ {
+ "description": "Only return notifications more recent than this",
+ "in": "query",
+ "name": "since",
+ "required": false,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Only return notifications targeted at the given client",
+ "in": "query",
+ "name": "client",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Maximum number of notifications to return",
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 10000,
+ "minimum": 100,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotificationList"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotificationList"
+ }
+ }
+ },
+ "description": "Notification list"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some notifications not found (label: `not-found`)"
+ }
+ },
+ "summary": "Fetch notifications"
+ }
+ },
+ "/notifications/last": {
+ "get": {
+ "description": " [internal route ID: \"get-last-notification\"]\n\n",
+ "parameters": [
+ {
+ "description": "Only return notifications targeted at the given client",
+ "in": "query",
+ "name": "client",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotification"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotification"
+ }
+ }
+ },
+ "description": "Notification found"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Some notifications not found (label: `not-found`)"
+ }
+ },
+ "summary": "Fetch the last notification"
+ }
+ },
+ "/notifications/{id}": {
+ "get": {
+ "description": " [internal route ID: \"get-notification-by-id\"]\n\n",
+ "parameters": [
+ {
+ "description": "Notification ID",
+ "in": "path",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Only return notifications targeted at the given client",
+ "in": "query",
+ "name": "client",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotification"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotification"
+ }
+ }
+ },
+ "description": "Notification found"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Some notifications not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`id` or Some notifications not found (label: `not-found`)"
+ }
+ },
+ "summary": "Fetch a notification by ID"
+ }
+ },
+ "/oauth/applications": {
+ "get": {
+ "description": " [internal route ID: \"get-oauth-applications\"]\n\nGet all OAuth applications with active account access for a user.",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/OAuthApplication"
+ },
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/OAuthApplication"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": "OAuth applications found"
+ }
+ },
+ "summary": "Get OAuth applications with account access"
+ }
+ },
+ "/oauth/applications/{OAuthClientId}": {
+ "delete": {
+ "description": " [internal route ID: \"revoke-oauth-account-access-v6\"]\n\n",
+ "parameters": [
+ {
+ "description": "The ID of the OAuth client",
+ "in": "path",
+ "name": "OAuthClientId",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "OAuth application access revoked"
+ }
+ },
+ "summary": "Revoke account access from an OAuth application"
+ }
+ },
+ "/oauth/applications/{OAuthClientId}/sessions/{RefreshTokenId}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-oauth-refresh-token\"]\n\nRevoke an active OAuth session by providing the refresh token ID.",
+ "parameters": [
+ {
+ "description": "The ID of the OAuth client",
+ "in": "path",
+ "name": "OAuthClientId",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "The ID of the refresh token",
+ "in": "path",
+ "name": "RefreshTokenId",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PasswordReqBody"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "OAuth client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`OAuthClientId` or `RefreshTokenId` not found\n\nOAuth client not found (label: `not-found`)"
+ }
+ },
+ "summary": "Revoke an active OAuth session"
+ }
+ },
+ "/oauth/authorization/codes": {
+ "post": {
+ "description": " [internal route ID: \"create-oauth-auth-code\"]\n\nCurrently only supports the 'code' response type, which corresponds to the authorization code flow.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateOAuthAuthorizationCodeRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "redirect-url-miss-match",
+ "message": "The redirect URL does not match the one registered with the client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "redirect-url-miss-match"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "redirect-url-miss-match",
+ "message": "The redirect URL does not match the one registered with the client"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "redirect-url-miss-match"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Bad Request\n\nThe redirect URL does not match the one registered with the client (label: `redirect-url-miss-match`) or `body`",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Forbidden",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Create an OAuth authorization code"
+ }
+ },
+ "/oauth/clients/{OAuthClientId}": {
+ "get": {
+ "description": " [internal route ID: \"get-oauth-client\"]\n\n",
+ "parameters": [
+ {
+ "description": "The ID of the OAuth client",
+ "in": "path",
+ "name": "OAuthClientId",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OAuthClient"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OAuthClient"
+ }
+ }
+ },
+ "description": "OAuth client found"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "forbidden",
+ "message": "OAuth is disabled"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "forbidden"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "OAuth is disabled (label: `forbidden`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "OAuth client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "OAuth client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`OAuthClientId` or OAuth client not found (label: `not-found`)\n\nOAuth client not found (label: `not-found`)"
+ }
+ },
+ "summary": "Get OAuth client information"
+ }
+ },
+ "/oauth/revoke": {
+ "post": {
+ "description": " [internal route ID: \"revoke-oauth-refresh-token\"]\n\nRevoke an access token.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OAuthRevokeRefreshTokenRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "forbidden",
+ "message": "Invalid refresh token"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "forbidden"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid refresh token (label: `forbidden`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "OAuth client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "OAuth client not found (label: `not-found`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "jwt-error",
+ "message": "Internal error while handling JWT token"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "jwt-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Internal error while handling JWT token (label: `jwt-error`)"
+ }
+ },
+ "summary": "Revoke an OAuth refresh token"
+ }
+ },
+ "/oauth/token": {
+ "post": {
+ "description": " [internal route ID: \"create-oauth-access-token\"]\n\nObtain a new access token from an authorization code or a refresh token.",
+ "requestBody": {
+ "content": {
+ "application/x-www-form-urlencoded": {
+ "schema": {
+ "$ref": "#/components/schemas/Either_OAuthAccessTokenRequest_OAuthRefreshAccessTokenRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OAuthAccessTokenResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid_grant",
+ "message": "Invalid grant"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid_grant",
+ "forbidden"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid grant (label: `invalid_grant`)\n\nInvalid client credentials (label: `forbidden`)\n\nInvalid grant type (label: `forbidden`)\n\nInvalid refresh token (label: `forbidden`)\n\nOAuth is disabled (label: `forbidden`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "OAuth client not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "OAuth client not found (label: `not-found`)\n\nOAuth authorization code not found (label: `not-found`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "jwt-error",
+ "message": "Internal error while handling JWT token"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "jwt-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Internal error while handling JWT token (label: `jwt-error`)"
+ }
+ },
+ "summary": "Create an OAuth access token"
+ }
+ },
+ "/onboarding/v3": {
+ "post": {
+ "deprecated": true,
+ "description": " [internal route ID: \"onboarding\"]\n\nDEPRECATED: the feature has been turned off, the end-point does nothing and always returns '{\"results\":[],\"auto-connects\":[]}'.",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Body"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeprecatedMatchingResult"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Upload contacts and invoke matching."
+ }
+ },
+ "/password-reset": {
+ "post": {
+ "description": " [internal route ID: \"post-password-reset\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewPasswordReset"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Password reset code created and sent by email."
+ }
+ },
+ "summary": "Initiate a password reset."
+ }
+ },
+ "/password-reset/complete": {
+ "post": {
+ "description": " [internal route ID: \"post-password-reset-complete\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CompletePasswordReset"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Password reset successful."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-code",
+ "message": "Invalid password reset code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid password reset code. (label: `invalid-code`)"
+ }
+ },
+ "summary": "Complete a password reset."
+ }
+ },
+ "/password-reset/{key}": {
+ "post": {
+ "deprecated": true,
+ "description": " [internal route ID: \"post-password-reset-key-deprecated\"]\n\nDEPRECATED: Use 'POST /password-reset/complete'.",
+ "parameters": [
+ {
+ "description": "An opaque key for a pending password reset.",
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PasswordReset"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Password reset successful."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-code",
+ "message": "Invalid password reset code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code",
+ "invalid-key"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid password reset code. (label: `invalid-code`)\n\nInvalid email or mobile number for password reset. (label: `invalid-key`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password reset, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ",
+ "code-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "For password reset, new and old password must be different. (label: `password-must-differ`)\n\nA password reset is already in progress. (label: `code-exists`)"
+ }
+ },
+ "summary": "Complete a password reset."
+ }
+ },
+ "/properties": {
+ "delete": {
+ "description": " [internal route ID: \"clear-properties\"]\n\n",
+ "responses": {
+ "200": {
+ "description": "Properties cleared"
+ }
+ },
+ "summary": "Clear all properties"
+ },
+ "get": {
+ "description": " [internal route ID: \"list-property-keys\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/ASCII"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": "List of property keys"
+ }
+ },
+ "summary": "List all property keys"
+ }
+ },
+ "/properties-values": {
+ "get": {
+ "description": " [internal route ID: \"list-properties\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PropertyKeysAndValues"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List all properties with key and value"
+ }
+ },
+ "/properties/{key}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-property\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "format": "printable",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Property deleted"
+ }
+ },
+ "summary": "Delete a property"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-property\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "format": "printable",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PropertyValue"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PropertyValue"
+ }
+ }
+ },
+ "description": "The property value"
+ },
+ "404": {
+ "description": "`key` or Property not found(**Note**: This error has an empty body for legacy reasons)"
+ }
+ },
+ "summary": "Get a property value"
+ },
+ "put": {
+ "description": " [internal route ID: \"set-property\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "format": "printable",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PropertyValue"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Property set"
+ }
+ },
+ "summary": "Set a user property"
+ }
+ },
+ "/provider": {
+ "delete": {
+ "description": " [internal route ID: \"provider-delete\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteProvider"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "invalid-provider",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nThe provider does not exist. (label: `invalid-provider`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Delete a provider"
+ },
+ "get": {
+ "description": " [internal route ID: \"provider-get-account\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Provider"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Provider"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Provider not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Provider not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Provider not found. (label: `not-found`)\n\nProvider not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Get account"
+ },
+ "put": {
+ "description": " [internal route ID: \"provider-update\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateProvider"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-provider",
+ "message": "The provider does not exist."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-provider",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The provider does not exist. (label: `invalid-provider`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Update a provider"
+ }
+ },
+ "/provider/activate": {
+ "get": {
+ "description": " [internal route ID: \"provider-activate\"]\n\n",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "code",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ProviderActivationResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ProviderActivationResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "204": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-code",
+ "message": "Invalid verification code"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid verification code (label: `invalid-code`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Activate a provider"
+ }
+ },
+ "/provider/assets": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "multipart/mixed": {
+ "schema": {
+ "$ref": "#/components/schemas/AssetSource"
+ }
+ }
+ },
+ "description": "A body with content type `multipart/mixed body`. The first section's content type should be `application/json`. The second section's content type should be always be `application/octet-stream`. Other content types will be ignored by the server."
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Asset"
+ }
+ }
+ },
+ "description": "Asset posted",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-length",
+ "message": "Invalid content length"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-length"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid content length (label: `invalid-length`)"
+ },
+ "413": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 413,
+ "label": "client-error",
+ "message": "Asset too large"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 413
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "client-error"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Asset too large (label: `client-error`)"
+ }
+ },
+ "summary": "Upload an asset"
+ }
+ },
+ "/provider/assets/{key}": {
+ "delete": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Asset deleted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorised",
+ "message": "Unauthorised operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorised"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unauthorised operation (label: `unauthorised`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key` not found\n\nAsset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Delete an asset"
+ },
+ "get": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "header",
+ "name": "Asset-Token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "asset_token",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "302": {
+ "description": "Asset found",
+ "headers": {
+ "Location": {
+ "description": "Asset location",
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Asset not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`key` or Asset not found (label: `not-found`)"
+ }
+ },
+ "summary": "Download an asset"
+ }
+ },
+ "/provider/email": {
+ "put": {
+ "description": " [internal route ID: \"provider-update-email\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EmailUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-email",
+ "message": "Invalid e-mail address."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-provider",
+ "message": "The provider does not exist."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-provider",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The provider does not exist. (label: `invalid-provider`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "429": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 429,
+ "label": "too-many-requests",
+ "message": "Too many request to generate a verification code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 429
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-requests"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Too many request to generate a verification code. (label: `too-many-requests`)"
+ }
+ },
+ "summary": "Update a provider email"
+ }
+ },
+ "/provider/login": {
+ "post": {
+ "description": " [internal route ID: \"provider-login\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ProviderLogin"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "headers": {
+ "Set-Cookie": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nAccess denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Login as a provider"
+ }
+ },
+ "/provider/password": {
+ "put": {
+ "description": " [internal route ID: \"provider-update-password\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PasswordChange"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password reset, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "For password reset, new and old password must be different. (label: `password-must-differ`)"
+ }
+ },
+ "summary": "Update a provider password"
+ }
+ },
+ "/provider/password-reset": {
+ "post": {
+ "description": " [internal route ID: \"provider-password-reset\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PasswordReset"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-code",
+ "message": "Invalid password reset code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code",
+ "invalid-key"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid password reset code. (label: `invalid-code`)\n\nInvalid email or mobile number for password reset. (label: `invalid-key`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password reset, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ",
+ "code-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "For password reset, new and old password must be different. (label: `password-must-differ`)\n\nA password reset is already in progress. (label: `code-exists`)\n\nA password reset is already in progress. (label: `code-exists`)"
+ },
+ "429": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 429,
+ "label": "too-many-requests",
+ "message": "Too many request to generate a verification code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 429
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-requests"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Too many request to generate a verification code. (label: `too-many-requests`)"
+ }
+ },
+ "summary": "Begin a password reset"
+ }
+ },
+ "/provider/password-reset/complete": {
+ "post": {
+ "description": " [internal route ID: \"provider-password-reset-complete\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CompletePasswordReset"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-code",
+ "message": "Invalid password reset code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid password reset code. (label: `invalid-code`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "invalid-code",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nInvalid verification code (label: `invalid-code`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password reset, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "For password reset, new and old password must be different. (label: `password-must-differ`)"
+ }
+ },
+ "summary": "Complete a password reset"
+ }
+ },
+ "/provider/register": {
+ "post": {
+ "description": " [internal route ID: \"provider-register\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewProvider"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NewProviderResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewProviderResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-email",
+ "message": "Invalid e-mail address."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "429": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 429,
+ "label": "too-many-requests",
+ "message": "Too many request to generate a verification code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 429
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-requests"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Too many request to generate a verification code. (label: `too-many-requests`)"
+ }
+ },
+ "summary": "Register a new provider"
+ }
+ },
+ "/provider/services": {
+ "get": {
+ "description": " [internal route ID: \"get-provider-services\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/Service"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "List provider services"
+ },
+ "post": {
+ "description": " [internal route ID: \"post-provider-services\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewService"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NewServiceResponse"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewServiceResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-service-key",
+ "message": "Invalid service key."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-service-key"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid service key. (label: `invalid-service-key`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Create a new service"
+ }
+ },
+ "/provider/services/{service-id}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-provider-services-by-service-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "service-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteService"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Service not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`service-id` not found\n\nService not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Delete service"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-provider-services-by-service-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "service-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Service"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Service not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`service-id` not found\n\nService not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Get provider service by service id"
+ },
+ "put": {
+ "description": " [internal route ID: \"put-provider-services-by-service-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "service-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateService"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Provider service updated"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Provider not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`service-id` not found\n\nProvider not found. (label: `not-found`)\n\nService not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Update provider service"
+ }
+ },
+ "/provider/services/{service-id}/connection": {
+ "put": {
+ "description": " [internal route ID: \"put-provider-services-connection-by-service-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "service-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateServiceConn"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Provider service connection updated"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-service-key",
+ "message": "Invalid service key."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-service-key"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid service key. (label: `invalid-service-key`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nAccess denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Service not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`service-id` not found\n\nService not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Update provider service connection"
+ }
+ },
+ "/providers/{pid}": {
+ "get": {
+ "description": " [internal route ID: \"provider-get-profile\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "pid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Provider"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Provider"
+ }
+ }
+ },
+ "description": ""
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Provider not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Provider not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`pid` or Provider not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Get profile"
+ }
+ },
+ "/providers/{provider-id}/services": {
+ "get": {
+ "description": " [internal route ID: \"get-provider-services-by-provider-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "provider-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/ServiceProfile"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "Get provider services by provider id"
+ }
+ },
+ "/providers/{provider-id}/services/{service-id}": {
+ "get": {
+ "description": " [internal route ID: \"get-provider-services-by-provider-id-and-service-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "provider-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "service-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceProfile"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Service not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`provider-id` or `service-id` not found\n\nService not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Get provider service by provider id and service id"
+ }
+ },
+ "/proxy/giphy/v1/gifs": {},
+ "/proxy/googlemaps/api/staticmap": {},
+ "/proxy/googlemaps/maps/api/geocode": {},
+ "/proxy/youtube/v3": {},
+ "/push/tokens": {
+ "get": {
+ "description": " [internal route ID: \"get-push-tokens\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PushTokenList"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List the user's registered push tokens"
+ },
+ "post": {
+ "description": " [internal route ID: \"register-push-token\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PushToken"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PushToken"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PushToken"
+ }
+ }
+ },
+ "description": "Push token registered",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "apns-voip-not-supported",
+ "message": "Adding APNS_VOIP tokens is not supported"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "apns-voip-not-supported"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "apns-voip-not-supported",
+ "message": "Adding APNS_VOIP tokens is not supported"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "apns-voip-not-supported"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Adding APNS_VOIP tokens is not supported (label: `apns-voip-not-supported`) or `body`"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "app-not-found",
+ "message": "App does not exist"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "app-not-found",
+ "invalid-token"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "app-not-found",
+ "message": "App does not exist"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "app-not-found",
+ "invalid-token"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "App does not exist (label: `app-not-found`)\n\nInvalid push token (label: `invalid-token`)"
+ },
+ "413": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 413,
+ "label": "sns-thread-budget-reached",
+ "message": "Too many concurrent calls to SNS; is SNS down?"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 413
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "sns-thread-budget-reached",
+ "token-too-long",
+ "metadata-too-long"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 413,
+ "label": "sns-thread-budget-reached",
+ "message": "Too many concurrent calls to SNS; is SNS down?"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 413
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "sns-thread-budget-reached",
+ "token-too-long",
+ "metadata-too-long"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Too many concurrent calls to SNS; is SNS down? (label: `sns-thread-budget-reached`)\n\nPush token length must be < 8192 for GCM or 400 for APNS (label: `token-too-long`)\n\nTried to add token to endpoint resulting in metadata length > 2048 (label: `metadata-too-long`)"
+ }
+ },
+ "summary": "Register a native push token"
+ }
+ },
+ "/push/tokens/{pid}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-push-token\"]\n\n",
+ "parameters": [
+ {
+ "description": "The push token to delete",
+ "in": "path",
+ "name": "pid",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Push token unregistered"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Push token not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Push token not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`pid` or Push token not found (label: `not-found`)"
+ }
+ },
+ "summary": "Unregister a native push token"
+ }
+ },
+ "/register": {
+ "post": {
+ "description": " [internal route ID: \"register\"]\n\nIf the environment where the registration takes place is private and a registered email address is not whitelisted, a 403 error is returned.Calls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewUser"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/User"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/User"
+ }
+ }
+ },
+ "description": "User created and pending activation",
+ "headers": {
+ "Location": {
+ "description": "UserId",
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ "Set-Cookie": {
+ "description": "Cookie",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-invitation-code",
+ "message": "Invalid invitation code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-invitation-code",
+ "invalid-email",
+ "invalid-phone"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-invitation-code",
+ "message": "Invalid invitation code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-invitation-code",
+ "invalid-email",
+ "invalid-phone"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid invitation code. (label: `invalid-invitation-code`)\n\nInvalid e-mail address. (label: `invalid-email`)\n\nInvalid mobile phone number (label: `invalid-phone`) or `body`"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorized",
+ "message": "Unauthorized e-mail address"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorized",
+ "missing-identity",
+ "blacklisted-email",
+ "too-many-team-members",
+ "user-creation-restricted"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "unauthorized",
+ "message": "Unauthorized e-mail address"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "unauthorized",
+ "missing-identity",
+ "blacklisted-email",
+ "too-many-team-members",
+ "user-creation-restricted"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Unauthorized e-mail address (label: `unauthorized`)\n\nUsing an invitation code requires registering the given email. (label: `missing-identity`)\n\nThe given e-mail address has been blacklisted due to a permanent bounce or a complaint. (label: `blacklisted-email`)\n\nToo many members in this team. (label: `too-many-team-members`)\n\nThis instance does not allow creation of personal users or teams. (label: `user-creation-restricted`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "invalid-code",
+ "message": "User does not exist"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "invalid-code",
+ "message": "User does not exist"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "User does not exist (label: `invalid-code`)\n\nInvalid activation code (label: `invalid-code`)"
+ },
+ "409": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "key-exists",
+ "message": "The given e-mail address is in use."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "key-exists"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given e-mail address is in use. (label: `key-exists`)"
+ }
+ },
+ "summary": "Register a new user."
+ }
+ },
+ "/scim/auth-tokens": {
+ "delete": {
+ "parameters": [
+ {
+ "in": "query",
+ "name": "id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Code authentication is required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "password-authentication-failed"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Code authentication is required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nPassword authentication failed. (label: `password-authentication-failed`)"
+ }
+ }
+ },
+ "get": {
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ScimTokenList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Code authentication is required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "password-authentication-failed"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Code authentication is required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nPassword authentication failed. (label: `password-authentication-failed`)"
+ }
+ }
+ },
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateScimToken"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateScimTokenResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Code authentication is required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "password-authentication-failed"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Code authentication is required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nPassword authentication failed. (label: `password-authentication-failed`)"
+ }
+ }
+ }
+ },
+ "/search/contacts": {
+ "get": {
+ "description": " [internal route ID: \"search-contacts\"]\n\nCalls federation service brig on search-users
Calls federation service brig on get-users-by-ids",
+ "parameters": [
+ {
+ "description": "Search query",
+ "in": "query",
+ "name": "q",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Searched domain. Note: This is optional only for backwards compatibility, future versions will mandate this.",
+ "in": "query",
+ "name": "domain",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Number of results to return (min: 1, max: 500, default 15)",
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 500,
+ "minimum": 1,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchResult"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Search for users"
+ }
+ },
+ "/self": {
+ "delete": {
+ "description": " [internal route ID: \"delete-self\"]\n\nif the account has a verified identity, a verification code is sent and needs to be confirmed to authorise the deletion. if the account has no verified identity but a password, it must be provided. if password is correct, or if neither a verified identity nor a password exists, account deletion is scheduled immediately.Calls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteUser"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Deletion is initiated."
+ },
+ "202": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DeletionCodeTimeout"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DeletionCodeTimeout"
+ }
+ }
+ },
+ "description": "Deletion is pending verification with a code."
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-user",
+ "message": "Invalid user"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-user"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid user (label: `invalid-user`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-self-delete-for-team-owner",
+ "message": "Team owners are not allowed to delete themselves; ask a fellow owner"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-self-delete-for-team-owner",
+ "pending-delete",
+ "missing-auth",
+ "invalid-credentials",
+ "invalid-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Team owners are not allowed to delete themselves; ask a fellow owner (label: `no-self-delete-for-team-owner`)\n\nA verification code for account deletion is still pending (label: `pending-delete`)\n\nRe-authentication via password required (label: `missing-auth`)\n\nAuthentication failed (label: `invalid-credentials`)\n\nInvalid verification code (label: `invalid-code`)"
+ }
+ },
+ "summary": "Initiate account deletion."
+ },
+ "get": {
+ "description": " [internal route ID: \"get-self\"]\n\n\nOAuth scope: `read:self`",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/User"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get your own profile"
+ },
+ "put": {
+ "description": " [internal route ID: \"put-self\"]\n\nCalls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "User updated"
+ }
+ },
+ "summary": "Update your profile."
+ }
+ },
+ "/self/email": {
+ "delete": {
+ "description": " [internal route ID: \"remove-email\"]\n\nYour email address can only be removed if you also have a phone number.Calls federation service brig on send-connection-action",
+ "responses": {
+ "200": {
+ "description": "Identity Removed"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "last-identity",
+ "message": "The last user identity cannot be removed."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "last-identity",
+ "no-password",
+ "no-identity"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "last-identity",
+ "message": "The last user identity cannot be removed."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "last-identity",
+ "no-password",
+ "no-identity"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The last user identity cannot be removed. (label: `last-identity`)\n\nThe user has no password. (label: `no-password`)\n\nThe user has no verified email (label: `no-identity`)"
+ }
+ },
+ "summary": "Remove your email address."
+ }
+ },
+ "/self/handle": {
+ "put": {
+ "description": " [internal route ID: \"change-handle\"]\n\nCalls federation service brig on send-connection-action
Calls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/HandleUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Handle Changed"
+ }
+ },
+ "summary": "Change your handle."
+ }
+ },
+ "/self/locale": {
+ "put": {
+ "description": " [internal route ID: \"change-locale\"]\n\nCalls federation service brig on send-connection-action",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LocaleUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Local Changed"
+ }
+ },
+ "summary": "Change your locale."
+ }
+ },
+ "/self/password": {
+ "head": {
+ "description": " [internal route ID: \"check-password-exists\"]\n\n",
+ "responses": {
+ "200": {
+ "description": "Password is set"
+ },
+ "404": {
+ "description": "Password is not set"
+ }
+ },
+ "summary": "Check that your password is set."
+ },
+ "put": {
+ "description": " [internal route ID: \"change-password\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PasswordChange"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Password Changed"
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "no-identity"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-credentials",
+ "message": "Authentication failed"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-credentials",
+ "no-identity"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Authentication failed (label: `invalid-credentials`)\n\nThe user has no verified email (label: `no-identity`)"
+ },
+ "409": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password change, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "password-must-differ",
+ "message": "For password change, new and old password must be different."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "password-must-differ"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "For password change, new and old password must be different. (label: `password-must-differ`)"
+ }
+ },
+ "summary": "Change your password."
+ }
+ },
+ "/self/supported-protocols": {
+ "put": {
+ "description": " [internal route ID: \"change-supported-protocols\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SupportedProtocolUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Supported protocols changed"
+ }
+ },
+ "summary": "Change your supported protocols"
+ }
+ },
+ "/services": {
+ "get": {
+ "description": " [internal route ID: \"get-services\"]\n\n",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "tags",
+ "required": false,
+ "schema": {
+ "enum": [
+ "audio",
+ "books",
+ "business",
+ "design",
+ "education",
+ "entertainment",
+ "finance",
+ "fitness",
+ "food-drink",
+ "games",
+ "graphics",
+ "health",
+ "integration",
+ "lifestyle",
+ "media",
+ "medical",
+ "movies",
+ "music",
+ "news",
+ "photography",
+ "poll",
+ "productivity",
+ "quiz",
+ "rating",
+ "shopping",
+ "social",
+ "sports",
+ "travel",
+ "tutorial",
+ "video",
+ "weather"
+ ],
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "start",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 100,
+ "minimum": 10,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceProfile"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "Access denied."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Access denied. (label: `access-denied`)"
+ }
+ },
+ "summary": "List services"
+ }
+ },
+ "/sso/finalize-login": {
+ "post": {
+ "deprecated": true,
+ "description": "DEPRECATED! use /sso/metadata/:tid instead! Details: https://docs.wire.com/understand/single-sign-on/trouble-shooting.html#can-i-use-the-same-sso-login-code-for-multiple-teams",
+ "responses": {
+ "200": {
+ "content": {
+ "text/plain;charset=utf-8": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/sso/finalize-login/{team}": {
+ "post": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "team",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "text/plain;charset=utf-8": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/sso/initiate-login/{idp}": {
+ "get": {
+ "parameters": [
+ {
+ "in": "query",
+ "name": "success_redirect",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "error_redirect",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "idp",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "text/html": {
+ "schema": {
+ "$ref": "#/components/schemas/FormRedirect"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "head": {
+ "parameters": [
+ {
+ "in": "query",
+ "name": "success_redirect",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "error_redirect",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "idp",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "text/plain;charset=utf-8": {}
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/sso/metadata": {
+ "get": {
+ "deprecated": true,
+ "description": "DEPRECATED! use /sso/metadata/:tid instead! Details: https://docs.wire.com/understand/single-sign-on/trouble-shooting.html#can-i-use-the-same-sso-login-code-for-multiple-teams",
+ "responses": {
+ "200": {
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/sso/metadata/{team}": {
+ "get": {
+ "parameters": [
+ {
+ "in": "path",
+ "name": "team",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/xml": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/sso/settings": {
+ "get": {
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SsoSettings"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ }
+ },
+ "/system/settings": {
+ "get": {
+ "description": " [internal route ID: \"get-system-settings\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SystemSettings"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Returns a curated set of system configuration settings for authorized users."
+ }
+ },
+ "/system/settings/unauthorized": {
+ "get": {
+ "description": " [internal route ID: \"get-system-settings-unauthorized\"]\n\n",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SystemSettingsPublic"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Returns a curated set of system configuration settings."
+ }
+ },
+ "/teams/invitations/by-email": {
+ "head": {
+ "description": " [internal route ID: \"head-team-invitations\"]\n\n",
+ "parameters": [
+ {
+ "description": "Email address",
+ "in": "query",
+ "name": "email",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Pending invitation exists."
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "No pending invitations exists."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "No pending invitations exists."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "No pending invitations exists. (label: `not-found`)"
+ },
+ "409": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "conflicting-invitations",
+ "message": "Multiple conflicting invitations to different teams exists."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "conflicting-invitations"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "conflicting-invitations",
+ "message": "Multiple conflicting invitations to different teams exists."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "conflicting-invitations"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Multiple conflicting invitations to different teams exists. (label: `conflicting-invitations`)"
+ }
+ },
+ "summary": "Check if there is an invitation pending given an email address."
+ }
+ },
+ "/teams/invitations/info": {
+ "get": {
+ "description": " [internal route ID: \"get-team-invitation-info\"]\n\n",
+ "parameters": [
+ {
+ "description": "Invitation code",
+ "in": "query",
+ "name": "code",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ }
+ },
+ "description": "Invitation info"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-invitation-code",
+ "message": "Invalid invitation code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-invitation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `code`\n\nInvalid invitation code. (label: `invalid-invitation-code`)"
+ }
+ },
+ "summary": "Get invitation info given a code."
+ }
+ },
+ "/teams/notifications": {
+ "get": {
+ "description": " [internal route ID: \"get-team-notifications\"]\n\nThis is a work-around for scalability issues with gundeck user event fan-out. It does not track all team-wide events, but only `member-join`.\nNote that `/teams/notifications` behaves differently from `/notifications`:\n- If there is a gap between the notification id requested with `since` and the available data, team queues respond with 200 and the data that could be found. They do NOT respond with status 404, but valid data in the body.\n- The notification with the id given via `since` is included in the response if it exists. You should remove this and only use it to decide whether there was a gap between your last request and this one.\n- If the notification id does *not* exist, you get the more recent events from the queue (instead of all of them). This can be done because a notification id is a UUIDv1, which is essentially a time stamp.\n- There is no corresponding `/last` end-point to get only the most recent event. That end-point was only useful to avoid having to pull the entire queue. In team queues, if you have never requested the queue before and have no prior notification id, just pull with timestamp 'now'.",
+ "parameters": [
+ {
+ "description": "Notification id to start with in the response (UUIDv1)",
+ "in": "query",
+ "name": "since",
+ "required": false,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Maximum number of events to return (1..10000; default: 1000)",
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QueuedNotificationList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-notification-id",
+ "message": "Could not parse notification id (must be UUIDv1)."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-notification-id"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `size` or `since`\n\nCould not parse notification id (must be UUIDv1). (label: `invalid-notification-id`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Team not found (label: `no-team`)"
+ }
+ },
+ "summary": "Read recently added team members from team queue"
+ }
+ },
+ "/teams/{team-id}/services/whitelist": {
+ "post": {
+ "description": " [internal route ID: \"post-team-whitelist-by-team-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "team-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateServiceWhitelist"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "UpdateServiceWhitelistRespChanged"
+ },
+ "204": {
+ "description": "UpdateServiceWhitelistRespUnchanged"
+ }
+ },
+ "summary": "Update service whitelist"
+ }
+ },
+ "/teams/{team-id}/services/whitelisted": {
+ "get": {
+ "description": " [internal route ID: \"get-whitelisted-services-by-team-id\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "team-id",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "prefix",
+ "required": false,
+ "schema": {
+ "maxLength": 1,
+ "minLength": 128,
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "filter_disabled",
+ "required": false,
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 100,
+ "minimum": 10,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceProfile"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get whitelisted services by team id"
+ }
+ },
+ "/teams/{tid}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-team\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamDeleteData"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "description": "Team is scheduled for removal"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "code-authentication-required",
+ "message": "Verification code required"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "code-authentication-required",
+ "code-authentication-failed",
+ "access-denied",
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Verification code required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nThis operation requires reauthentication (label: `access-denied`)\n\nInsufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (missing DeleteTeam) (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ },
+ "503": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 503,
+ "label": "queue-full",
+ "message": "The delete queue is full; no further delete requests can be processed at the moment"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 503
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "queue-full"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The delete queue is full; no further delete requests can be processed at the moment (label: `queue-full`)"
+ }
+ },
+ "summary": "Delete a team"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-team\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Team"
+ }
+ }
+ },
+ "description": ""
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get a team by ID"
+ },
+ "put": {
+ "description": " [internal route ID: \"update-team\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamUpdateData"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Team updated"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions (missing SetTeamData)"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (missing SetTeamData) (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Update team properties"
+ }
+ },
+ "/teams/{tid}/conversations": {
+ "get": {
+ "description": " [internal route ID: \"get-team-conversations\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamConversationList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ }
+ },
+ "summary": "Get team conversations"
+ }
+ },
+ "/teams/{tid}/conversations/roles": {
+ "get": {
+ "description": " [internal route ID: \"get-team-conversation-roles\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConversationRolesList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get existing roles available for the given team"
+ }
+ },
+ "/teams/{tid}/conversations/{cid}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-team-conversation\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Conversation deleted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInvalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing delete_conversation) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `cid` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Remove a team conversation"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-team-conversation\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "cid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamConversation"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-conversation",
+ "message": "Conversation not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-conversation"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `cid` not found\n\nConversation not found (label: `no-conversation`)"
+ }
+ },
+ "summary": "Get one team conversation"
+ }
+ },
+ "/teams/{tid}/features": {
+ "get": {
+ "description": " [internal route ID: \"get-all-feature-configs-for-team\"]\n\nGets feature configs for a team. User must be a member of the team and have permission to view team features.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AllTeamFeatures"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Gets feature configs for a team"
+ }
+ },
+ "/teams/{tid}/features/appLock": {
+ "get": {
+ "description": " [internal route ID: (\"get\", AppLockConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AppLockConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for appLock"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", AppLockConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AppLockConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/AppLockConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for appLock"
+ }
+ },
+ "/teams/{tid}/features/classifiedDomains": {
+ "get": {
+ "description": " [internal route ID: (\"get\", ClassifiedDomainsConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClassifiedDomainsConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for classifiedDomains"
+ }
+ },
+ "/teams/{tid}/features/conferenceCalling": {
+ "get": {
+ "description": " [internal route ID: (\"get\", ConferenceCallingConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for conferenceCalling"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", ConferenceCallingConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ConferenceCallingConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for conferenceCalling"
+ }
+ },
+ "/teams/{tid}/features/conversationGuestLinks": {
+ "get": {
+ "description": " [internal route ID: (\"get\", GuestLinksConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GuestLinksConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for conversationGuestLinks"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", GuestLinksConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GuestLinksConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/GuestLinksConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for conversationGuestLinks"
+ }
+ },
+ "/teams/{tid}/features/digitalSignatures": {
+ "get": {
+ "description": " [internal route ID: (\"get\", DigitalSignaturesConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DigitalSignaturesConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for digitalSignatures"
+ }
+ },
+ "/teams/{tid}/features/enforceFileDownloadLocation": {
+ "get": {
+ "description": " [internal route ID: (\"get\", EnforceFileDownloadLocationConfig)]\n\nCustom feature: only supported on some dedicated on-prem systems.
",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for enforceFileDownloadLocation"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", EnforceFileDownloadLocationConfig)]\n\nCustom feature: only supported on some dedicated on-prem systems.
",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EnforceFileDownloadLocation.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for enforceFileDownloadLocation"
+ }
+ },
+ "/teams/{tid}/features/exposeInvitationURLsToTeamAdmin": {
+ "get": {
+ "description": " [internal route ID: (\"get\", ExposeInvitationURLsToTeamAdminConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ExposeInvitationURLsToTeamAdminConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for exposeInvitationURLsToTeamAdmin"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", ExposeInvitationURLsToTeamAdminConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ExposeInvitationURLsToTeamAdminConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ExposeInvitationURLsToTeamAdminConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for exposeInvitationURLsToTeamAdmin"
+ }
+ },
+ "/teams/{tid}/features/fileSharing": {
+ "get": {
+ "description": " [internal route ID: (\"get\", FileSharingConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/FileSharingConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for fileSharing"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", FileSharingConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/FileSharingConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/FileSharingConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for fileSharing"
+ }
+ },
+ "/teams/{tid}/features/legalhold": {
+ "get": {
+ "description": " [internal route ID: (\"get\", LegalholdConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LegalholdConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for legalhold"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", LegalholdConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LegalholdConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LegalholdConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-not-registered",
+ "message": "legal hold service has not been registered for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-registered"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nlegal hold service has not been registered for this team (label: `legalhold-not-registered`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "legalhold-disable-unimplemented",
+ "message": "legal hold cannot be disabled for whitelisted teams"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-disable-unimplemented",
+ "legalhold-not-enabled",
+ "too-large-team-for-legalhold",
+ "action-denied",
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold cannot be disabled for whitelisted teams (label: `legalhold-disable-unimplemented`)\n\nlegal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nCannot enable legalhold on large teams (reason: for removing LH from team, we need to iterate over all members, which is only supported for teams with less than 2k members) (label: `too-large-team-for-legalhold`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-internal",
+ "message": "legal hold service: could not block connections when resolving policy conflicts."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-internal",
+ "legalhold-illegal-op"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)\n\ninternal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)"
+ }
+ },
+ "summary": "Put config for legalhold"
+ }
+ },
+ "/teams/{tid}/features/limitedEventFanout": {
+ "get": {
+ "description": " [internal route ID: (\"get\", LimitedEventFanoutConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LimitedEventFanoutConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for limitedEventFanout"
+ }
+ },
+ "/teams/{tid}/features/mls": {
+ "get": {
+ "description": " [internal route ID: (\"get\", MLSConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for mls"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", MLSConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MLSConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for mls"
+ }
+ },
+ "/teams/{tid}/features/mlsE2EId": {
+ "get": {
+ "description": " [internal route ID: (\"get\", MlsE2EIdConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for mlsE2EId"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", MlsE2EIdConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsE2EIdConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for mlsE2EId"
+ }
+ },
+ "/teams/{tid}/features/mlsMigration": {
+ "get": {
+ "description": " [internal route ID: (\"get\", MlsMigrationConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsMigration.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for mlsMigration"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", MlsMigrationConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsMigration.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/MlsMigration.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for mlsMigration"
+ }
+ },
+ "/teams/{tid}/features/outlookCalIntegration": {
+ "get": {
+ "description": " [internal route ID: (\"get\", OutlookCalIntegrationConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OutlookCalIntegrationConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for outlookCalIntegration"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", OutlookCalIntegrationConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OutlookCalIntegrationConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/OutlookCalIntegrationConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for outlookCalIntegration"
+ }
+ },
+ "/teams/{tid}/features/searchVisibility": {
+ "get": {
+ "description": " [internal route ID: (\"get\", SearchVisibilityAvailableConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityAvailableConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for searchVisibility"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", SearchVisibilityAvailableConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityAvailableConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityAvailableConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for searchVisibility"
+ }
+ },
+ "/teams/{tid}/features/searchVisibilityInbound": {
+ "get": {
+ "description": " [internal route ID: (\"get\", SearchVisibilityInboundConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityInboundConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for searchVisibilityInbound"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", SearchVisibilityInboundConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityInboundConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchVisibilityInboundConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for searchVisibilityInbound"
+ }
+ },
+ "/teams/{tid}/features/selfDeletingMessages": {
+ "get": {
+ "description": " [internal route ID: (\"get\", SelfDeletingMessagesConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for selfDeletingMessages"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", SelfDeletingMessagesConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SelfDeletingMessagesConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for selfDeletingMessages"
+ }
+ },
+ "/teams/{tid}/features/sndFactorPasswordChallenge": {
+ "get": {
+ "description": " [internal route ID: (\"get\", SndFactorPasswordChallengeConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SndFactorPasswordChallengeConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for sndFactorPasswordChallenge"
+ },
+ "put": {
+ "description": " [internal route ID: (\"put\", SndFactorPasswordChallengeConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SndFactorPasswordChallengeConfig.Feature"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SndFactorPasswordChallengeConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Put config for sndFactorPasswordChallenge"
+ }
+ },
+ "/teams/{tid}/features/sso": {
+ "get": {
+ "description": " [internal route ID: (\"get\", SSOConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SSOConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for sso"
+ }
+ },
+ "/teams/{tid}/features/validateSAMLemails": {
+ "get": {
+ "description": " [internal route ID: (\"get\", ValidateSAMLEmailsConfig)]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ValidateSAMLEmailsConfig.LockableFeature"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "operation-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Get config for validateSAMLemails"
+ }
+ },
+ "/teams/{tid}/get-members-by-ids-using-post": {
+ "post": {
+ "description": " [internal route ID: \"get-team-members-by-ids\"]\n\nThe `has_more` field in the response body is always `false`.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Maximum results to be returned",
+ "in": "query",
+ "name": "maxResults",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 2000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserIdList"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamMemberList"
+ }
+ }
+ },
+ "description": ""
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "too-many-uids",
+ "message": "Can only process 2000 user ids per request."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "too-many-uids"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body` or `maxResults`\n\nCan only process 2000 user ids per request. (label: `too-many-uids`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get team members by user id list"
+ }
+ },
+ "/teams/{tid}/invitations": {
+ "get": {
+ "description": " [internal route ID: \"get-team-invitations\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Invitation id to start from (ascending).",
+ "in": "query",
+ "name": "start",
+ "required": false,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Number of results to return (default 100, max 500).",
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 500,
+ "minimum": 1,
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InvitationList"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/InvitationList"
+ }
+ }
+ },
+ "description": "List of sent invitations"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "insufficient-permissions",
+ "message": "Insufficient team permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "insufficient-permissions"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient team permissions (label: `insufficient-permissions`)"
+ }
+ },
+ "summary": "List the sent team invitations"
+ },
+ "post": {
+ "description": " [internal route ID: \"send-team-invitation\"]\n\nInvitations are sent by email. The maximum allowed number of pending team invitations is equal to the team size.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/InvitationRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ }
+ },
+ "description": "Invitation was created and sent.",
+ "headers": {
+ "Location": {
+ "schema": {
+ "format": "url",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-email",
+ "message": "Invalid e-mail address."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nInvalid e-mail address. (label: `invalid-email`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "insufficient-permissions",
+ "message": "Insufficient team permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "insufficient-permissions",
+ "too-many-team-invitations",
+ "blacklisted-email",
+ "no-identity",
+ "no-email"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient team permissions (label: `insufficient-permissions`)\n\nToo many team invitations for this team (label: `too-many-team-invitations`)\n\nThe given e-mail address has been blacklisted due to a permanent bounce or a complaint. (label: `blacklisted-email`)\n\nThe user has no verified email (label: `no-identity`)\n\nThis operation requires the user to have a verified email address. (label: `no-email`)"
+ }
+ },
+ "summary": "Create and send a new team invitation."
+ }
+ },
+ "/teams/{tid}/invitations/{iid}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-team-invitation\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "iid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Invitation deleted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "insufficient-permissions",
+ "message": "Insufficient team permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "insufficient-permissions"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient team permissions (label: `insufficient-permissions`)"
+ }
+ },
+ "summary": "Delete a pending team invitation by ID."
+ },
+ "get": {
+ "description": " [internal route ID: \"get-team-invitation\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "iid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/Invitation"
+ }
+ }
+ },
+ "description": "Invitation"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "insufficient-permissions",
+ "message": "Insufficient team permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "insufficient-permissions"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient team permissions (label: `insufficient-permissions`)"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Notification not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Notification not found."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `iid` or Notification not found. (label: `not-found`)"
+ }
+ },
+ "summary": "Get a pending team invitation by ID."
+ }
+ },
+ "/teams/{tid}/legalhold/consent": {
+ "post": {
+ "description": " [internal route ID: \"consent-to-legal-hold\"]\n\nCalls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Grant consent successful"
+ },
+ "204": {
+ "description": "Consent already granted"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "invalid-op",
+ "message": "Invalid operation"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-op",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team-member",
+ "message": "Team member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam member not found (label: `no-team-member`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-internal",
+ "message": "legal hold service: could not block connections when resolving policy conflicts."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-internal",
+ "legalhold-illegal-op"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)\n\ninternal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)"
+ }
+ },
+ "summary": "Consent to legal hold"
+ }
+ },
+ "/teams/{tid}/legalhold/settings": {
+ "delete": {
+ "description": " [internal route ID: \"delete-legal-hold-settings\"]\n\nThis endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)
Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RemoveLegalHoldSettingsRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "204": {
+ "description": "Legal hold service settings deleted"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-not-registered",
+ "message": "legal hold service has not been registered for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-registered"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nlegal hold service has not been registered for this team (label: `legalhold-not-registered`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "legalhold-disable-unimplemented",
+ "message": "legal hold cannot be disabled for whitelisted teams"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-disable-unimplemented",
+ "legalhold-not-enabled",
+ "invalid-op",
+ "action-denied",
+ "no-team-member",
+ "operation-denied",
+ "code-authentication-required",
+ "code-authentication-failed",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold cannot be disabled for whitelisted teams (label: `legalhold-disable-unimplemented`)\n\nlegal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nInvalid operation (label: `invalid-op`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient permissions (label: `operation-denied`)\n\nVerification code required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nThis operation requires reauthentication (label: `access-denied`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-internal",
+ "message": "legal hold service: could not block connections when resolving policy conflicts."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-internal",
+ "legalhold-illegal-op"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)\n\ninternal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)"
+ }
+ },
+ "summary": "Delete legal hold service settings"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-legal-hold-settings\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ViewLegalHoldService"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get legal hold service settings"
+ },
+ "post": {
+ "description": " [internal route ID: \"create-legal-hold-settings\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewLegalHoldService"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ViewLegalHoldService"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ViewLegalHoldService"
+ }
+ }
+ },
+ "description": "Legal hold service settings created"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-status-bad",
+ "message": "legal hold service: invalid response"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-status-bad",
+ "legalhold-invalid-key"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nlegal hold service: invalid response (label: `legalhold-status-bad`)\n\nlegal hold service pubkey is invalid (label: `legalhold-invalid-key`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "legalhold-not-enabled",
+ "message": "legal hold is not enabled for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-enabled",
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nInsufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Create legal hold service settings"
+ }
+ },
+ "/teams/{tid}/legalhold/{uid}": {
+ "delete": {
+ "description": " [internal route ID: \"disable-legal-hold-for-user\"]\n\nThis endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)
Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/DisableLegalHoldForUserRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Disable legal hold successful"
+ },
+ "204": {
+ "description": "Legal hold was not enabled"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-not-registered",
+ "message": "legal hold service has not been registered for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-registered"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nlegal hold service has not been registered for this team (label: `legalhold-not-registered`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member",
+ "action-denied",
+ "code-authentication-required",
+ "code-authentication-failed",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)\n\nVerification code required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nThis operation requires reauthentication (label: `access-denied`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-internal",
+ "message": "legal hold service: could not block connections when resolving policy conflicts."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-internal",
+ "legalhold-illegal-op"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)\n\ninternal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)"
+ }
+ },
+ "summary": "Disable legal hold for user"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-legal-hold\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserLegalHoldStatusResponse"
+ }
+ }
+ },
+ "description": ""
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team-member",
+ "message": "Team member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `uid` not found\n\nTeam member not found (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get legal hold status"
+ },
+ "post": {
+ "description": " [internal route ID: \"request-legal-hold-device\"]\n\nThis endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)
Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Request device successful"
+ },
+ "204": {
+ "description": "Request device already pending"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-not-registered",
+ "message": "legal hold service has not been registered for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-registered",
+ "legalhold-status-bad"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service has not been registered for this team (label: `legalhold-not-registered`)\n\nlegal hold service: invalid response (label: `legalhold-status-bad`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "legalhold-not-enabled",
+ "message": "legal hold is not enabled for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-enabled",
+ "operation-denied",
+ "no-team-member",
+ "action-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nInsufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team-member",
+ "message": "Team member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `uid` not found\n\nTeam member not found (label: `no-team-member`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "legalhold-no-consent",
+ "message": "user has not given consent to using legal hold"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-no-consent",
+ "legalhold-already-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "user has not given consent to using legal hold (label: `legalhold-no-consent`)\n\nlegal hold is already enabled for this user (label: `legalhold-already-enabled`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-illegal-op",
+ "message": "internal server error: inconsistent change of user's legalhold state"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-illegal-op",
+ "legalhold-internal"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "internal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)\n\nlegal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)"
+ }
+ },
+ "summary": "Request legal hold device"
+ }
+ },
+ "/teams/{tid}/legalhold/{uid}/approve": {
+ "put": {
+ "description": " [internal route ID: \"approve-legal-hold-device\"]\n\nThis endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)
Calls federation service brig on get-users-by-ids
Calls federation service galley on on-mls-message-sent
Calls federation service galley on on-conversation-updated",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ApproveLegalHoldForUserRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Legal hold approved"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "legalhold-not-registered",
+ "message": "legal hold service has not been registered for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-registered"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid `body`\n\nlegal hold service has not been registered for this team (label: `legalhold-not-registered`)"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "legalhold-not-enabled",
+ "message": "legal hold is not enabled for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-enabled",
+ "no-team-member",
+ "action-denied",
+ "access-denied",
+ "code-authentication-required",
+ "code-authentication-failed"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold is not enabled for this team (label: `legalhold-not-enabled`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nInsufficient authorization (missing remove_conversation_member) (label: `action-denied`)\n\nYou do not have permission to access this resource (label: `access-denied`)\n\nVerification code required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nThis operation requires reauthentication (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "legalhold-no-device-allocated",
+ "message": "no legal hold device is registered for this user. POST /teams/:tid/legalhold/:uid/ to start the flow."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-no-device-allocated"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `uid` not found\n\nno legal hold device is registered for this user. POST /teams/:tid/legalhold/:uid/ to start the flow. (label: `legalhold-no-device-allocated`)"
+ },
+ "409": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 409,
+ "label": "legalhold-already-enabled",
+ "message": "legal hold is already enabled for this user"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 409
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-already-enabled"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold is already enabled for this user (label: `legalhold-already-enabled`)"
+ },
+ "412": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 412,
+ "label": "legalhold-not-pending",
+ "message": "legal hold cannot be approved without being in a pending state"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 412
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-not-pending"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold cannot be approved without being in a pending state (label: `legalhold-not-pending`)"
+ },
+ "500": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 500,
+ "label": "legalhold-internal",
+ "message": "legal hold service: could not block connections when resolving policy conflicts."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 500
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "legalhold-internal",
+ "legalhold-illegal-op"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "legal hold service: could not block connections when resolving policy conflicts. (label: `legalhold-internal`)\n\ninternal server error: inconsistent change of user's legalhold state (label: `legalhold-illegal-op`)"
+ }
+ },
+ "summary": "Approve legal hold device"
+ }
+ },
+ "/teams/{tid}/members": {
+ "get": {
+ "description": " [internal route ID: \"get-team-members\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Maximum results to be returned",
+ "in": "query",
+ "name": "maxResults",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 2000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ {
+ "description": "Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page.",
+ "in": "query",
+ "name": "pagingState",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamMembersPage"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get team members"
+ },
+ "put": {
+ "description": " [internal route ID: \"update-team-member\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/NewTeamMember"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member",
+ "too-many-team-admins",
+ "invalid-permissions",
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nMaximum number of admins per team reached (label: `too-many-team-admins`)\n\nThe specified permissions are invalid (label: `invalid-permissions`)\n\nYou do not have permission to access this resource (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team-member",
+ "message": "Team member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member",
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam member not found (label: `no-team-member`)\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Update an existing team member"
+ }
+ },
+ "/teams/{tid}/members/csv": {
+ "get": {
+ "description": " [internal route ID: \"get-team-members-csv\"]\n\nThe endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "text/csv": {}
+ },
+ "description": "CSV of team members"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "access-denied",
+ "message": "You do not have permission to access this resource"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "access-denied"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "You do not have permission to access this resource (label: `access-denied`)"
+ }
+ },
+ "summary": "Get all members of the team as a CSV file"
+ }
+ },
+ "/teams/{tid}/members/{uid}": {
+ "delete": {
+ "description": " [internal route ID: \"delete-team-member\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamMemberDeleteData"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ },
+ "202": {
+ "description": "Team member scheduled for deletion"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member",
+ "access-denied",
+ "code-authentication-required",
+ "code-authentication-failed"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)\n\nYou do not have permission to access this resource (label: `access-denied`)\n\nVerification code required (label: `code-authentication-required`)\n\nCode authentication failed (label: `code-authentication-failed`)\n\nThis operation requires reauthentication (label: `access-denied`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `uid` not found\n\nTeam not found (label: `no-team`)\n\nTeam member not found (label: `no-team-member`)"
+ }
+ },
+ "summary": "Remove an existing team member"
+ },
+ "get": {
+ "description": " [internal route ID: \"get-team-member\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamMember"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "no-team-member",
+ "message": "Requesting user is not a team member"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Requesting user is not a team member (label: `no-team-member`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team-member",
+ "message": "Team member not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` or `uid` not found\n\nTeam member not found (label: `no-team-member`)"
+ }
+ },
+ "summary": "Get single team member"
+ }
+ },
+ "/teams/{tid}/search": {
+ "get": {
+ "description": " [internal route ID: \"browse-team\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "Search expression",
+ "in": "query",
+ "name": "q",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "Role filter, eg. `member,partner`. Empty list means do not filter.",
+ "in": "query",
+ "name": "frole",
+ "required": false,
+ "schema": {
+ "items": {
+ "enum": [
+ "owner",
+ "admin",
+ "member",
+ "partner"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ {
+ "description": "Can be one of name, handle, email, saml_idp, managed_by, role, created_at.",
+ "in": "query",
+ "name": "sortby",
+ "required": false,
+ "schema": {
+ "enum": [
+ "name",
+ "handle",
+ "email",
+ "saml_idp",
+ "managed_by",
+ "role",
+ "created_at"
+ ],
+ "type": "string"
+ }
+ },
+ {
+ "description": "Can be one of asc, desc.",
+ "in": "query",
+ "name": "sortorder",
+ "required": false,
+ "schema": {
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "type": "string"
+ }
+ },
+ {
+ "description": "Number of results to return (min: 1, max: 500, default: 15)",
+ "in": "query",
+ "name": "size",
+ "required": false,
+ "schema": {
+ "format": "int32",
+ "maximum": 500,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ {
+ "description": "Optional, when not specified, the first page will be returned. Every returned page contains a `paging_state`, this should be supplied to retrieve the next page.",
+ "in": "query",
+ "name": "pagingState",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchResult"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchResult"
+ }
+ }
+ },
+ "description": "Search results"
+ }
+ },
+ "summary": "Browse team for members (requires add-user permission)"
+ }
+ },
+ "/teams/{tid}/search-visibility": {
+ "get": {
+ "description": " [internal route ID: \"get-search-visibility\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamSearchVisibilityView"
+ }
+ }
+ },
+ "description": ""
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "operation-denied",
+ "message": "Insufficient permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ }
+ },
+ "summary": "Shows the value for search visibility"
+ },
+ "put": {
+ "description": " [internal route ID: \"set-search-visibility\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamSearchVisibilityView"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "204": {
+ "description": "Search visibility set"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "team-search-visibility-not-enabled",
+ "message": "Custom search is not available for this team"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "team-search-visibility-not-enabled",
+ "operation-denied",
+ "no-team-member"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Custom search is not available for this team (label: `team-search-visibility-not-enabled`)\n\nInsufficient permissions (label: `operation-denied`)\n\nRequesting user is not a team member (label: `no-team-member`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "no-team",
+ "message": "Team not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "no-team"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`tid` not found\n\nTeam not found (label: `no-team`)"
+ }
+ },
+ "summary": "Sets the search visibility for the whole team"
+ }
+ },
+ "/teams/{tid}/size": {
+ "get": {
+ "description": " [internal route ID: \"get-team-size\"]\n\nCan be out of sync by roughly the `refresh_interval` of the ES index.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "tid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamSize"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/TeamSize"
+ }
+ }
+ },
+ "description": "Number of team members"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-invitation-code",
+ "message": "Invalid invitation code."
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-invitation-code"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Invalid invitation code. (label: `invalid-invitation-code`)"
+ }
+ },
+ "summary": "Get the number of team members as an integer"
+ }
+ },
+ "/users/handles": {
+ "post": {
+ "description": " [internal route ID: \"check-user-handles\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/CheckHandles"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/Handle"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": "List of free handles"
+ }
+ },
+ "summary": "Check availability of user handles"
+ }
+ },
+ "/users/handles/{handle}": {
+ "head": {
+ "description": " [internal route ID: \"check-user-handle\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "handle",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": "Handle is taken"
+ },
+ "400": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 400,
+ "label": "invalid-handle",
+ "message": "The given handle is invalid (less than 2 or more than 256 characters; chars not in \"a-z0-9_.-\"; or on the blocklist)"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 400
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "invalid-handle"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "The given handle is invalid (less than 2 or more than 256 characters; chars not in \"a-z0-9_.-\"; or on the blocklist) (label: `invalid-handle`)"
+ },
+ "404": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "Handle not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`handle` not found\n\nHandle not found (label: `not-found`)"
+ }
+ },
+ "summary": "Check whether a user handle can be taken"
+ }
+ },
+ "/users/list-clients": {
+ "post": {
+ "description": " [internal route ID: \"list-clients-bulk@v2\"]\n\nIf a backend is unreachable, the clients from that backend will be omitted from the responseCalls federation service brig on get-user-clients",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/LimitedQualifiedUserIdList_500"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "properties": {
+ "qualified_user_map": {
+ "$ref": "#/components/schemas/QualifiedUserMap_Set_PubClient"
+ }
+ },
+ "type": "object"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "List all clients for a set of user ids"
+ }
+ },
+ "/users/list-prekeys": {
+ "post": {
+ "description": " [internal route ID: \"get-multi-user-prekey-bundle-qualified\"]\n\nYou can't request information for more users than maximum conversation size.Calls federation service brig on claim-multi-prekey-bundle",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QualifiedUserClients"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/QualifiedUserClientPrekeyMapV4"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "(deprecated) Given a map of user IDs to client IDs return a prekey for each one."
+ }
+ },
+ "/users/{uid_domain}/{uid}": {
+ "get": {
+ "description": " [internal route ID: \"get-user-qualified\"]\n\nCalls federation service brig on get-users-by-ids",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserProfile"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/UserProfile"
+ }
+ }
+ },
+ "description": "User found"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "User not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 404,
+ "label": "not-found",
+ "message": "User not found"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 404
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "not-found"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "`uid_domain` or `uid` or User not found (label: `not-found`)"
+ }
+ },
+ "summary": "Get a user by Domain and UserId"
+ }
+ },
+ "/users/{uid_domain}/{uid}/clients": {
+ "get": {
+ "description": " [internal route ID: \"get-user-clients-qualified\"]\n\nCalls federation service brig on get-user-clients",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/PubClient"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get all of a user's clients"
+ }
+ },
+ "/users/{uid_domain}/{uid}/clients/{client}": {
+ "get": {
+ "description": " [internal route ID: \"get-user-client-qualified\"]\n\nCalls federation service brig on get-user-clients",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PubClient"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get a specific client of a user"
+ }
+ },
+ "/users/{uid_domain}/{uid}/prekeys": {
+ "get": {
+ "description": " [internal route ID: \"get-users-prekey-bundle-qualified\"]\n\nCalls federation service brig on claim-prekey-bundle",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/PrekeyBundle"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get a prekey for each client of a user."
+ }
+ },
+ "/users/{uid_domain}/{uid}/prekeys/{client}": {
+ "get": {
+ "description": " [internal route ID: \"get-users-prekeys-client-qualified\"]\n\nCalls federation service brig on claim-prekey",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ },
+ {
+ "description": "ClientId",
+ "in": "path",
+ "name": "client",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientPrekey"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Get a prekey for a specific client of a user."
+ }
+ },
+ "/users/{uid_domain}/{uid}/supported-protocols": {
+ "get": {
+ "description": " [internal route ID: \"get-supported-protocols\"]\n\n",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "uid_domain",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/BaseProtocol"
+ },
+ "type": "array",
+ "uniqueItems": true
+ }
+ }
+ },
+ "description": "Protocols supported by the user"
+ }
+ },
+ "summary": "Get a user's supported protocols"
+ }
+ },
+ "/users/{uid}/email": {
+ "put": {
+ "description": " [internal route ID: \"update-user-email\"]\n\nIf the user has a pending email validation, the validation email will be resent.",
+ "parameters": [
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/EmailUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": [],
+ "items": {},
+ "maxItems": 0,
+ "type": "array"
+ }
+ }
+ },
+ "description": ""
+ }
+ },
+ "summary": "Resend email address validation email."
+ }
+ },
+ "/users/{uid}/rich-info": {
+ "get": {
+ "description": " [internal route ID: \"get-rich-info\"]\n\n",
+ "parameters": [
+ {
+ "description": "User Id",
+ "in": "path",
+ "name": "uid",
+ "required": true,
+ "schema": {
+ "format": "uuid",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RichInfoAssocList"
+ }
+ },
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/RichInfoAssocList"
+ }
+ }
+ },
+ "description": "Rich info about the user"
+ },
+ "403": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "example": {
+ "code": 403,
+ "label": "insufficient-permissions",
+ "message": "Insufficient team permissions"
+ },
+ "properties": {
+ "code": {
+ "enum": [
+ 403
+ ],
+ "type": "integer"
+ },
+ "label": {
+ "enum": [
+ "insufficient-permissions"
+ ],
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "code",
+ "label",
+ "message"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Insufficient team permissions (label: `insufficient-permissions`)"
+ }
+ },
+ "summary": "Get a user's rich info"
+ }
+ },
+ "/verification-code/send": {
+ "post": {
+ "description": " [internal route ID: \"send-verification-code\"]\n\n",
+ "requestBody": {
+ "content": {
+ "application/json;charset=utf-8": {
+ "schema": {
+ "$ref": "#/components/schemas/SendVerificationCode"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Verification code sent."
+ }
+ },
+ "summary": "Send a verification code to a given email address."
+ }
+ }
+ },
+ "security": [
+ {
+ "ZAuth": []
+ }
+ ],
+ "servers": [
+ {
+ "url": "/v6"
+ }
+ ]
+}
diff --git a/services/brig/src/Brig/API/Public.hs b/services/brig/src/Brig/API/Public.hs
index 3a46223946a..1ebeea8615f 100644
--- a/services/brig/src/Brig/API/Public.hs
+++ b/services/brig/src/Brig/API/Public.hs
@@ -209,22 +209,23 @@ internalEndpointsSwaggerDocsAPIs =
--
-- Dual to `internalEndpointsSwaggerDocsAPI`.
versionedSwaggerDocsAPI :: Servant.Server VersionedSwaggerDocsAPI
-versionedSwaggerDocsAPI (Just (VersionNumber V7)) =
+versionedSwaggerDocsAPI (Just (VersionNumber V8)) =
swaggerSchemaUIServer $
- ( serviceSwagger @VersionAPITag @'V7
- <> serviceSwagger @BrigAPITag @'V7
- <> serviceSwagger @GalleyAPITag @'V7
- <> serviceSwagger @SparAPITag @'V7
- <> serviceSwagger @CargoholdAPITag @'V7
- <> serviceSwagger @CannonAPITag @'V7
- <> serviceSwagger @GundeckAPITag @'V7
- <> serviceSwagger @ProxyAPITag @'V7
- <> serviceSwagger @OAuthAPITag @'V7
+ ( serviceSwagger @VersionAPITag @'V8
+ <> serviceSwagger @BrigAPITag @'V8
+ <> serviceSwagger @GalleyAPITag @'V8
+ <> serviceSwagger @SparAPITag @'V8
+ <> serviceSwagger @CargoholdAPITag @'V8
+ <> serviceSwagger @CannonAPITag @'V8
+ <> serviceSwagger @GundeckAPITag @'V8
+ <> serviceSwagger @ProxyAPITag @'V8
+ <> serviceSwagger @OAuthAPITag @'V8
)
& S.info . S.title .~ "Wire-Server API"
& S.info . S.description ?~ $(embedText =<< makeRelativeToProject "docs/swagger.md")
- & S.servers .~ [S.Server ("/" <> toUrlPiece V7) Nothing mempty]
+ & S.servers .~ [S.Server ("/" <> toUrlPiece V8) Nothing mempty]
& cleanupSwagger
+versionedSwaggerDocsAPI (Just (VersionNumber V7)) = swaggerPregenUIServer $(pregenSwagger V7)
versionedSwaggerDocsAPI (Just (VersionNumber V6)) = swaggerPregenUIServer $(pregenSwagger V6)
versionedSwaggerDocsAPI (Just (VersionNumber V5)) = swaggerPregenUIServer $(pregenSwagger V5)
versionedSwaggerDocsAPI (Just (VersionNumber V4)) = swaggerPregenUIServer $(pregenSwagger V4)
@@ -452,14 +453,16 @@ servantSitemap =
userClientAPI :: ServerT UserClientAPI (Handler r)
userClientAPI =
- Named @"add-client-v6" addClient
+ Named @"add-client@v7" addClient
:<|> Named @"add-client" addClient
+ :<|> Named @"update-client@v7" API.updateClient
:<|> Named @"update-client" API.updateClient
:<|> Named @"delete-client" deleteClient
- :<|> Named @"list-clients-v6" listClients
+ :<|> Named @"list-clients@v7" listClients
:<|> Named @"list-clients" listClients
- :<|> Named @"get-client-v6" getClient
+ :<|> Named @"get-client@v7" getClient
:<|> Named @"get-client" getClient
+ :<|> Named @"get-client-capabilities@v7" getClientCapabilities
:<|> Named @"get-client-capabilities" getClientCapabilities
:<|> Named @"get-client-prekeys" getClientPrekeys
:<|> Named @"head-nonce" newNonce
diff --git a/services/brig/src/Brig/Provider/API.hs b/services/brig/src/Brig/Provider/API.hs
index 162a1109060..c54362abcd7 100644
--- a/services/brig/src/Brig/Provider/API.hs
+++ b/services/brig/src/Brig/Provider/API.hs
@@ -153,7 +153,7 @@ botAPI =
:<|> Named @"bot-delete-self" botDeleteSelf
:<|> Named @"bot-list-prekeys" botListPrekeys
:<|> Named @"bot-update-prekeys" botUpdatePrekeys
- :<|> Named @"bot-get-client-v6" botGetClient
+ :<|> Named @"bot-get-client@v7" botGetClient
:<|> Named @"bot-get-client" botGetClient
:<|> Named @"bot-claim-users-prekeys" botClaimUsersPrekeys
:<|> Named @"bot-list-users" botListUserProfiles
diff --git a/services/brig/test/integration/API/User/Client.hs b/services/brig/test/integration/API/User/Client.hs
index c73e81861f0..82546fd9d8e 100644
--- a/services/brig/test/integration/API/User/Client.hs
+++ b/services/brig/test/integration/API/User/Client.hs
@@ -259,7 +259,7 @@ testAddGetClient params brig cannon = do
let etype = j ^? key "type" . _String
let eclient = j ^? key "client"
etype @?= Just "user.client-add"
- fmap fromJSON eclient @?= Just (Success (Versioned @'V6 c))
+ fmap fromJSON eclient @?= Just (Success (Versioned @'V7 c))
pure c
liftIO $ clientMLSPublicKeys c @?= keys
getClient brig uid (clientId c) !!! do
diff --git a/tools/stern/src/Stern/Intra.hs b/tools/stern/src/Stern/Intra.hs
index a5e17507ff2..3c0ad708181 100644
--- a/tools/stern/src/Stern/Intra.hs
+++ b/tools/stern/src/Stern/Intra.hs
@@ -819,7 +819,7 @@ getUserClients uid = do
. expect2xx
)
info $ msg ("Response" ++ show r)
- let resultOrError :: Either String [Versioned 'V6 Client] = responseJsonEither r
+ let resultOrError :: Either String [Versioned 'V7 Client] = responseJsonEither r
case resultOrError of
Left e -> do
Log.err $ msg ("Error parsing client response: " ++ e)