### Access App Suite URL Source: https://documentation.open-xchange.com/appsuite/operation-guides Example URL to access the App Suite web application after setup. Ensure the port matches your NodePort configuration. ```bash https://as8.lab.test:30443/appsuite/ ``` -------------------------------- ### Install App Suite and Batteries Source: https://documentation.open-xchange.com/appsuite/operation-guides Run the installation script (Bash or PowerShell) to deploy App Suite and all its managed components ('batteries'). ```bash ./install.sh ``` -------------------------------- ### Clone Operation Guides Repository Source: https://documentation.open-xchange.com/appsuite/operation-guides Clone the App Suite operation guides repository to your local machine. ```bash git clone https://gitlab.open-xchange.com/appsuite/operation-guides.git ``` -------------------------------- ### Install Python Dependencies Source: https://documentation.open-xchange.com/appsuite/operation-guides Install the required Python modules from the requirements.txt file into the virtual environment. ```bash v/bin/pip install -r requirements.txt ``` -------------------------------- ### Install App Suite 8 with Helm Source: https://documentation.open-xchange.com/appsuite/operation-guides Use this command for a minimal App Suite 8 installation, assuming all prerequisites are met. The `values.yaml` file is crucial for environment-specific configuration. ```bash helm install as8 oci://registry.open-xchange.com/appsuite/charts/appsuite --version 8.x.y --values values.yaml ``` -------------------------------- ### Advanced Upsell Configuration Example Source: https://documentation.open-xchange.com/8/ui/upsell.html Configure advanced upsell triggers and capabilities using boolean expressions for complex requirements. This example demonstrates enabling specific features and defining custom upsell messages based on user capabilities. ```yaml io.ox/core//upsell/activated: true io.ox/core//upsell/enabled: calendar: true infostore: true caldav: true carddav: true ai-service: true io.ox/core//upsell/triggers: upgrade-button: enabled: true requires: 'carddav && caldav' #1 folderview: mail: enabled: true requires: 'ai-service' #2 i18n: en_US: title: 'Try our new AI-Integration' de_DE: title: 'Probier unsere KI aus' contacts: enabled: true requires: 'calendar' i18n: en_US: title: 'Get the Calendar App!' de_DE: title: 'Hol\' dir die Kalender App!'' tasks: enabled: true requires: 'infostore' i18n: en_US: title: 'Upgrade to online storage' de_DE: title: 'Nutzen sie unseren Cloud-Speicher' ``` -------------------------------- ### Update Operation Guides Git Repository Source: https://documentation.open-xchange.com/appsuite/operation-guides Standard procedure for pulling updates for the operation guides, checking for breaking changes, and re-rendering the lab configuration. ```bash git pull ``` -------------------------------- ### Simple Upsell Condition Example Source: https://documentation.open-xchange.com/8/ui/upsell.html Define a basic upsell condition using the 'requires' keyword. This example shows a simple check for the 'infostore' capability. ```yaml requires: infostore ``` -------------------------------- ### Multiple Capabilities Condition Example Source: https://documentation.open-xchange.com/8/ui/upsell.html Specify multiple capabilities for an upsell condition using space separation, which is interpreted as a logical AND. This example requires both 'mail_export' and 'infostore'. ```yaml requires: mail_export infostore ``` -------------------------------- ### Upsell Trigger Condition Example Source: https://documentation.open-xchange.com/8/ui/upsell.html Define conditions for upsell triggers that check for missing but available features. This example uses 'infostore || guard' which is shorthand for checking if either 'infostore' or 'guard' is upsell-eligible. ```yaml condition: infostore || guard # is shorthand for condition: upsell(infostore) || upsell(guard) ``` -------------------------------- ### Get the whitelist for user Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the whitelist for a specific user within a given context. Requires administrator privileges. ```APIDOC ## Get the whitelist for user ### Description Retrieves the whitelist for a specific user within a given context. Requires administrator privileges. ### Method GET ### Endpoint /oxaas/v1/admin/whitelist/{contextid}/{userid} ### Parameters #### Path Parameters - **contextid** (number) - Required - The context ID. - **userid** (number) - Required - The user ID. ### Responses #### Success Response (200) Success - **whitelist** (array) - A list of whitelisted email addresses or domains. #### Error Response (401) Authorization error ``` -------------------------------- ### Get All Domain Catchalls Response Sample Source: https://documentation.open-xchange.com/components/cloud-api/latest This JSON structure represents the successful retrieval of all domain catchalls for a given context. ```json [ { "domain": "example.com", "login": "catchall@example.com" } ] ``` -------------------------------- ### Get All Domain Catchalls Source: https://documentation.open-xchange.com/components/cloud-api/latest Retrieves all domain catchalls for a specified context. The context can be identified by its name or ID. ```APIDOC ## GET /cloudapi/v2/mail/catchall ### Description Retrieves all domain catchalls for a specified context. ### Method GET ### Endpoint /cloudapi/v2/mail/catchall ### Parameters #### Query Parameters - **name** (string or null) - Optional - The name of the context. - **id** (integer or null) - Optional - The ID of the context. ### Responses #### Success Response (200) Ok. Returns a list of catchall configurations. Example: ```json [ { "domain": "example.com", "login": "catchall@example.com" } ] ``` #### Error Response (401) Authentication failed #### Error Response (404) Context not found #### Error Response (409) Neither Context name nor id specified in query ``` -------------------------------- ### Get all domain catchalls Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Retrieves all domain catchalls for a specified context. The context can be identified by its name or ID. ```APIDOC ## GET /cloudapi/v2/mail/catchall ### Description Get all domain catchalls. The name or id of the context must be specified using either the name or the id query parameter. ### Method GET ### Endpoint /cloudapi/v2/mail/catchall ### Parameters #### Query Parameters - **name** (string) - Optional - The name of the context. - **id** (integer) - Optional - The ID of the context. ### Responses #### Success Response (200) Ok - **items** (array) - An array of DomainCatchall objects. #### Error Response (401) Authentication failed #### Error Response (409) Neither Context name nor id specified in query ``` -------------------------------- ### Get User Whitelist Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the entire whitelist for a specific user within a given context. Requires context and user IDs. ```json { "whitelist": [ "test@example.com", "test2@example.com", "@example.com" ] } ``` -------------------------------- ### Get Forwarding Alias Response Sample (Deprecated) Source: https://documentation.open-xchange.com/components/cloudplugins/stable Example response for retrieving a forwarding alias, showing a list of recipients. ```json [ "recipient1@example.com" ] ``` -------------------------------- ### Set Up Python Virtual Environment Source: https://documentation.open-xchange.com/appsuite/operation-guides Navigate to the cloned repository and create a Python virtual environment. Upgrade pip and wheel within the environment. ```bash cd operation-guides python3 -mvenv v v/bin/pip install --upgrade pip wheel ``` -------------------------------- ### Get DKIM Selector Rotation Status Source: https://documentation.open-xchange.com/components/dkim-service/latest/dkim-service-1.0.20.yml Use the REPORT method to retrieve the per-domain status of DKIM selector rotation. This example shows a successful response with two maintained selectors. ```shell $ curl -s --user dkim.oxcloud.localhost:secret -X REPORT https://cloud.example.com/cloudapi/v2/mail/dkim/dkim.oxcloud.localhost/example.com | jq [ { "brandName": "dkim.oxcloud.localhost", "selector": "selector1._domainkey.example.com", "domain": "example.com", "initiated": "2026-04-22T09:27:06.726Z", "lastUpdated": "2026-04-22T09:27:06.726Z", "state": { "dns": true, "dnsAttempts": 1, "dnsLastAttempt": "2026-04-22T09:27:06.687195971Z", "ldap": true ``` -------------------------------- ### Get DKIM Selector Rotation Status with Errors Source: https://documentation.open-xchange.com/components/dkim-service/latest This example demonstrates the response when DKIM selector rotation encounters issues, indicated by increased attempt counters and `dns` state being false. It uses a local development endpoint. ```bash $ curl -s --user dkim.oxcloud.localhost:secret -X REPORT http://localhost:8080/cloudapi/v2/mail/dkim/dkim.oxcloud.localhost/example.com | jq [ { "brandName": "dkim.oxcloud.localhost", "selector": "selector1._domainkey.example.com", "domain": "example.com", "initiated": "2026-04-22T12:14:10.197Z", "lastUpdated": "2026-04-22T12:14:10.197Z", "state": { "dns": true, "dnsAttempts": 1, "dnsLastAttempt": "2026-04-22T12:14:10.165898722Z", "ldap": true, "ldapAttempts": 1, "ldapLastAttempt": "2026-04-22T12:14:10.173204847Z" } }, { "brandName": "dkim.oxcloud.localhost", "selector": "selector2._domainkey.example.com", "domain": "example.com", "initiated": "2026-04-22T12:12:09.301Z", "lastUpdated": "2026-04-22T12:17:52.997Z", "state": { "dns": false, "dnsAttempts": 3, "dnsLastAttempt": "2026-04-22T12:17:52.973316214Z", "ldap": true, "ldapAttempts": 1, "ldapLastAttempt": "2026-04-22T12:12:09.269311222Z" } } ] ``` -------------------------------- ### Create Context using httpie Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Example of creating a new context using the httpie command-line tool. Ensure you replace 'mybrand:secret' with your actual credentials and the URL with the correct provisioning endpoint. ```shell http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/contexts name=acme ``` -------------------------------- ### Navigate to Rendered Lab Directory Source: https://documentation.open-xchange.com/appsuite/operation-guides Change the current directory to the 'rendered/lab' subdirectory, which contains the generated deployment files. ```bash cd rendered/lab ``` -------------------------------- ### Module Mappings Configuration Source: https://documentation.open-xchange.com/components/display/1.4.2/articles Example of module mappings configuration, mapping generic module names to specific module IDs for use in ad space configuration. ```json [ { "space": "io.ox/ads/leaderboard", "showInModules": ["mail", "portal"] } ] ``` -------------------------------- ### Render Deployment Templates Source: https://documentation.open-xchange.com/appsuite/operation-guides Execute the rendering script to generate deployment files from templates. This process also generates random passwords. ```bash v/bin/python render.py ``` -------------------------------- ### Get DKIM Entries by Brand Source: https://documentation.open-xchange.com/components/dkim-service/latest Retrieves all DKIM entries associated with a specific brand. This endpoint is useful for getting an overview of DKIM configurations for a given brand. ```APIDOC ## GET /cloudapi/v2/mail/dkim/{brand} ### Description Retrieves all DKIM entries associated with a specific brand. ### Method GET ### Endpoint /cloudapi/v2/mail/dkim/{brand} ### Parameters #### Path Parameters - **brand** (string) - Required - The brand identifier. ### Responses #### Success Response (200) - **application/json** - Ok #### Error Responses - **401** - Authentication failed - **404** - No DKIM entries found - **500** - Unexpected error ### Response Example (200) ```json { "property1": { "selector": "selector1._domainkey.example.info", "cname": "selector1-example-info.mybrand", "rsaPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp0+RJY8e7wDjqtq7h9KM4/fWmTVzoOGnheV7omU8zNyy7pWbvjPGM5uEvI9kG+d4TZ2nEG4Ru9prwTQw8NCOU/ECOa1RSP8y+O17TPvtOuL1W5NXD5FP1AazAz3Sbu6oEzXwddvtJVQBAy/C8Jkkh6R64iEbh0QreZYjsdlQ4obJ5jwo67FcrfjNV6X7HwbaerLvQZPcsykJLnHD50fTC4ar/qZX4R268a0Mk1r/ze2GGM5GdHD3AAoWn3f4rsHC46j9E1a21zC6ODMh+pnhTrTXARVt2Ao+vXvLLTdDuntf+RgODP4E/ZBLsRG9S5Z2JeTPjTdt8889yEcdpEg2/wIDAQAB", "rsaThumbPrint": "DMjyXBD7-RNQwfZVo1PvSPaWp4SgGBRP3LfQ2VG8s6M", "activated": "2025-09-04T06:17:02Z", "_self": "/cloudapi/v2/mail/dkim/mybrand/example.info/selector1._domainkey.example.info" }, "property2": { "selector": "selector1._domainkey.example.info", "cname": "selector1-example-info.mybrand", "rsaPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp0+RJY8e7wDjqtq7h9KM4/fWmTVzoOGnheV7omU8zNyy7pWbvjPGM5uEvI9kG+d4TZ2nEG4Ru9prwTQw8NCOU/ECOa1RSP8y+O17TPvtOuL1W5NXD5FP1AazAz3Sbu6oEzXwddvtJVQBAy/C8Jkkh6R64iEbh0QreZYjsdlQ4obJ5jwo67FcrfjNV6X7HwbaerLvQZPcsykJLnHD50fTC4ar/qZX4R268a0Mk1r/ze2GGM5GdHD3AAoWn3f4rsHC46j9E1a21zC6ODMh+pnhTrTXARVt2Ao+vXvLLTdDuntf+RgODP4E/ZBLsRG9S5Z2JeTPjTdt8889yEcdpEg2/wIDAQAB", "rsaThumbPrint": "DMjyXBD7-RNQwfZVo1PvSPaWp4SgGBRP3LfQ2VG8s6M", "activated": "2025-09-04T06:17:02Z", "_self": "/cloudapi/v2/mail/dkim/mybrand/example.info/selector1._domainkey.example.info" } } ``` ``` -------------------------------- ### Basic Authentication with Curl Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Use basic authentication by providing a brand name and password. This example shows how to list all contexts for a brand using curl. ```bash curl -u mybrand:secret https://provisioning.eu.appsuite.cloud/cloudapi/v2/contexts ``` -------------------------------- ### Create context Source: https://documentation.open-xchange.com/components/cloud-api/latest Create a context. Returns the created context. Example of a context creation using httpie: `http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/contexts name=acme` ```APIDOC ## Create context Create a context. Returns the created context. Example of a context creation using httpie: ``` http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/contexts name=acme ``` ##### Authorizations: _BrandAuth_ ##### Request Body schema: application/json required namerequired| string mandatory ---|--- maxQuota| integer or null optional, unlimited if not specified adminPassword| string or null optional, generated if not specified adminLogin| string or null optional, generated if not specified adminEmail| string or null optional, generated if not specified theme| object or null optional, default used if not specified maxUser| integer or null optional, if specified, creating users is restricted to this value. The context admin does not count as user so that each context has always one user more than specified. ### Responses **200** Ok **400** Other errors **401** Authentication failed **409** Wrong or missing parameters / Context already exists post/cloudapi/v2/contexts https://documentation.open-xchange.com/cloudapi/v2/contexts ### Request samples * Payload Content type application/json Copy Expand all Collapse all `{ * "name": "contextName", * "maxQuota": 1000, * "adminPassword": "string", * "adminLogin": "string", * "adminEmail": "adminEmail@example.com", * "theme": { * "mainColor": "#283f73", * "linkColor": "#283f73", * "toolbarColor": "#283f73", * "logoUrlLight": "http://example.com/light.png", * "logoUrlDark": "http://example.com/dark.png", * "logoWidth": "60", * "logoHeight": "auto", * "topbarBackground": "#283f73", * "topbarHover": "rgba(0, 0, 0, 0.3)", * "topbarColor": "#ddd", * "topbarSelected": "#eee", * "listSelected": "#aaa", * "listHover": "#f7f7f7", * "listSelectedFocus": "#283f73", * "folderBackground": "#f5f5f5", * "folderSelected": "rgba(0, 0, 0, 0.1)", * "folderHover": "rgba(0, 0, 0, 0.05)", * "folderSelectedFocus": "#283f73", * "mailDetailCSS": "body { color: #000 !important } h1 { color: red}", * "serverContact": "My Example Org | Contact" }, * "maxUser": 2 }` ``` -------------------------------- ### Minimal io.ox/display/leaderboard Configuration Source: https://documentation.open-xchange.com/components/display/2/articles This configuration sets up an ad space for a leaderboard banner using Google Publisher Tag. It specifies the ad unit path, a cooldown period of 5 seconds, and a reload interval of 30 seconds. ```json [ { "space": "io.ox/display/leaderboard", "gpt": { "adUnitPath": "/1234567/test_ads" }, "cooldown": 5000, "reloadAfter": 30000 } ] ``` -------------------------------- ### Get user uidname Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the uidname for a specific user within a context. ```APIDOC ## get uidname of user ### Description Retrieves the uidname for a specific user within a context. ### Method GET ### Endpoint /oxaas/v1/admin/contexts/{contextid}/users/{userid}/uidname ### Path Parameters - **contextid** (number) - Required - The ID of the context. - **userid** (number) - Required - The ID of the user. ### Responses - **200** - Success. - **401** - Authorization error. - **404** - User does not exist. ``` -------------------------------- ### Add Host Entry for App Suite Source: https://documentation.open-xchange.com/appsuite/operation-guides Add this entry to your local /etc/hosts file to resolve the App Suite hostname. Replace '10.50.2.89' with your k8s node IP. ```bash 10.50.2.89 as8.lab.test ``` -------------------------------- ### Get user blacklist Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the blacklist for a specific user within a given context. ```APIDOC ## Get the blacklist for user ### Description Get the blacklist for user ### Method GET ### Endpoint /oxaas/v1/admin/blacklist/{contextid}/{userid} ### Parameters #### Path Parameters - **contextId** (number) - Required - context id - **userid** (number) - Required - user id ### Responses #### Success Response (200) - **blacklist** (array) - A list of blacklisted email addresses or domains. - (string) - A blacklisted entry. #### Error Response (401) Authorization error ``` -------------------------------- ### Get Forwarding Alias (Deprecated) Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves a specific forwarding alias. This endpoint is deprecated. ```http GET /api/oxaas/v1/admin/forwards/{contextId}/{alias} ``` -------------------------------- ### Verify Kubernetes Deployment Source: https://documentation.open-xchange.com/appsuite/operation-guides Check the status of all resources within the 'as8' namespace to ensure that Pods, Deployments, and StatefulSets are ready. ```bash kubectl get all -n as8 ``` -------------------------------- ### Get antivirus state Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the antivirus state for a specific user within a context. ```APIDOC ## get the antivirus state ### Description Retrieves the antivirus state for a specific user within a context. ### Method GET ### Endpoint /oxaas/v1/admin/contexts/{contextid}/users/{userid}/antivirus ### Path Parameters - **contextid** (number) - Required - The ID of the context. - **userid** (number) - Required - The ID of the user. ### Responses - **200** - Success. - **401** - Authorization error. - **404** - User does not exist. ``` -------------------------------- ### Get Context Data Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Retrieves the data for a specific context using its name or ID. ```APIDOC ## GET /cloudapi/v2/contexts/{nameOrId} ### Description Retrieve context data. The path parameter is the context name. ### Method GET ### Endpoint /cloudapi/v2/contexts/{nameOrId} ### Parameters #### Path Parameters - **nameOrId** (string) - Required - The name or ID of the context. #### Query Parameters - **includebrand** (boolean) - Optional - If true, includes brand settings. Defaults to false. ### Response #### Success Response (200) - **schema** (object) - The context data. See components/schemas/GetContext. #### Error Response (401) - **schema** (object) - Authentication failed. See components/schemas/CloudApiErrors. #### Error Response (404) - **schema** (object) - Context not found. See components/schemas/CloudApiErrors. ``` -------------------------------- ### Add Domain Catchall Request Sample Source: https://documentation.open-xchange.com/components/cloud-api/latest This is a sample JSON payload for adding a new domain catchall. It requires the domain and the login for the catchall address. ```json { "domain": "example.com", "login": "catchall@example.com" } ``` -------------------------------- ### Get DKIM Record Source: https://documentation.open-xchange.com/components/dkim-service/latest Retrieves the DKIM record details for a specific domain and selector. ```APIDOC ## GET /cloudapi/v2/mail/dkim/{brand}/{domain}/{selector} ### Description Retrieves the DKIM record details, including the CNAME, public key, and activation status, for a specified brand, domain, and selector. ### Method GET ### Endpoint /cloudapi/v2/mail/dkim/{brand}/{domain}/{selector} ### Parameters #### Path Parameters - **brand** (string) - Required - The brand identifier. - **domain** (string) - Required - The domain for which to retrieve DKIM records. - **selector** (string) - Required - The DKIM selector. ### Response #### Success Response (200) - **selector** (string) - The DKIM selector. - **cname** (string) - The CNAME record value. - **rsaPublicKey** (string) - The RSA public key. - **rsaThumbPrint** (string) - The RSA key thumbprint. - **activated** (string) - The activation timestamp in ISO 8601 format. - **_self** (string) - The self-referential URL for this resource. #### Response Example ```json { "selector": "selector1._domainkey.example.info", "cname": "selector1-example-info.mybrand", "rsaPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp0+RJY8e7wDjqtq7h9KM4/fWmTVzoOGnheV7omU8zNyy7pWbvjPGM5uEvI9kG+d4TZ2nEG4Ru9prwTQw8NCOU/ECOa1RSP8y+O17TPvtOuL1W5NXD5FP1AazAz3Sbu6oEzXwddvtJVQBAy/C8Jkkh6R64iEbh0QreZYjsdlQ4obJ5jwo67FcrfjNV6X7HwbaerLvQZPcsykJLnHD50fTC4ar/qZX4R268a0Mk1r/ze2GGM5GdHD3AAoWn3f4rsHC46j9E1a21zC6ODMh+pnhTrTXARVt2Ao+vXvLLTdDuntf+RgODP4E/ZBLsRG9S5Z2JeTPjTdt8889yEcdpEg2/wIDAQAB", "rsaThumbPrint": "DMjyXBD7-RNQwfZVo1PvSPaWp4SgGBRP3LfQ2VG8s6M", "activated": "2025-09-04T06:17:02Z", "_self": "/cloudapi/v2/mail/dkim/mybrand/example.info/selector1._domainkey.example.info" } ``` ### Error Handling - **401**: Authentication failed. - **404**: Selector not found. - **500**: Unexpected error. ``` -------------------------------- ### Get Unread Message Count Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the count of unread messages in the INBOX for a specified user. ```APIDOC ## GET /api/oxaas/mail/unread/{uid} ### Description Get the unread message count from INBOX for user. ### Method GET ### Endpoint /api/oxaas/mail/unread/{uid} ### Parameters #### Path Parameters - **uid** (string) - Required - User identifier ### Responses #### Success Response (200) - Success #### Error Responses - **401**: Authorization error - **500**: General Error ### Response Example (200) ```json { "newmessages": 0 } ``` ``` -------------------------------- ### Create User with httpie Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Creates a new user within a specified context using httpie. The response does not include all possible values; quota usages are assumed to be 0, and webLoginEnabled is assumed to be true. ```shell http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/users?name=acme name="john.doe" password=secret displayName="John Doe" givenName=John surName=Doe mail=john@example.acme unifiedQuota=1000 ``` -------------------------------- ### Get filtered user blacklist Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves a filtered blacklist for a specific user, allowing wildcard searches. ```APIDOC ## Get the filtered blacklist for user ### Description Get the filtered blacklist for user ### Method GET ### Endpoint /oxaas/v1/admin/blacklist/{contextid}/{userid}/{filter} ### Parameters #### Path Parameters - **contextId** (number) - Required - context id - **userid** (number) - Required - user id - **filter** (string) - Required - the blacklist filter which can contain wildcard * ### Responses #### Success Response (200) Success #### Error Response (401) Authorization error ``` -------------------------------- ### Create user Source: https://documentation.open-xchange.com/components/cloud-api/latest/cloud-provisioning-rest-api-2.4.0.yml Creates a new user within a specified context. Requires context name and user details. ```APIDOC ## POST /cloudapi/v2/users ### Description Creates a user. The name of the context must be specified using the name query parameter. Example of a user creation using httpie: ```shell http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/users?name=acme name="john.doe" password=secret displayName="John Doe" givenName=John surName=Doe mail=john@example.acme unifiedQuota=1000 ``` Note that the response of a create does not contain all possible values. E.g. quota usages are not returned an can be assumed to be 0. The value of webLoginEnabled can be assumed to be true. ### Method POST ### Endpoint /cloudapi/v2/users ### Parameters #### Query Parameters - **name** (string, nullable) - Optional - The name of the context. - **id** (integer, nullable) - Optional - The ID of the user. #### Request Body - **name** (string) - Required - The username for the new user. - **password** (string) - Required - The password for the new user. - **displayName** (string) - Optional - The display name for the new user. - **givenName** (string) - Optional - The first name of the user. - **surName** (string) - Optional - The last name of the user. - **mail** (string) - Optional - The email address of the user. - **unifiedQuota** (integer) - Optional - The quota for the user in MB. ### Request Example { "example": "http --auth mybrand:secret POST https://provisioning.eu.appsuite.cloud/cloudapi/v2/users?name=acme name=\"john.doe\" password=secret displayName=\"John Doe\" givenName=John surName=Doe mail=john@example.acme unifiedQuota=1000" } ### Response #### Success Response (200) - Returns the created user object. Note that the response may not contain all possible values. ``` -------------------------------- ### List contexts Source: https://documentation.open-xchange.com/components/cloud-api/latest Lists all contexts matching the specified search pattern. The default pattern is '*'. The pattern is applied to the name of the contexts. Note that not all resource settings are contained in the response. E.g. the `brandName` and `toplevelBrandName` settings can only be retrieved using a `get` request of a single context using the related boolean `includebrand` query parameter. ```APIDOC ## List contexts Lists all contexts matching the specified search pattern. The default pattern is '*'. The pattern is applied to the name of the contexts. **Note** that not all resource settings are contained in the response. E.g. the `brandName` and `toplevelBrandName` settings can only be retrieved using a `get` request of a single context using the related boolean `includebrand` query parameter. ##### Authorizations: _BrandAuth_ ##### query Parameters pattern| string or null Default: "*" ---|--- ### Responses **200** Ok **401** Authentication failed get/cloudapi/v2/contexts https://documentation.open-xchange.com/cloudapi/v2/contexts ### Response samples * 200 * 401 Content type application/json Copy Expand all Collapse all `[ * { * "name": "string", * "maxQuota": 0, * "usedQuota": 0, * "theme": { * "mainColor": "#283f73", * "linkColor": "#283f73", * "toolbarColor": "#283f73", * "logoUrlLight": "http://example.com/light.png", * "logoUrlDark": "http://example.com/dark.png", * "logoWidth": "60", * "logoHeight": "auto", * "topbarBackground": "#283f73", * "topbarHover": "rgba(0, 0, 0, 0.3)", * "topbarColor": "#ddd", * "topbarSelected": "#eee", * "listSelected": "#aaa", * "listHover": "#f7f7f7", * "listSelectedFocus": "#283f73", * "folderBackground": "#f5f5f5", * "folderSelected": "rgba(0, 0, 0, 0.1)", * "folderHover": "rgba(0, 0, 0, 0.05)", * "folderSelectedFocus": "#283f73", * "mailDetailCSS": "body { color: #000 !important } h1 { color: red}", * "serverContact": "My Example Org | Contact" }, * "toplevelBrandName": "string", * "brandName": "string", * "maxUser": 0 } ]` ``` -------------------------------- ### Get User Delivery Status Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the delivery status for a specific user within a given context. ```APIDOC ## GET /oxaas/v1/admin/contexts/{contextid}/users/{userid}/oxdeliverystatus ### Description Retrieves the oxdeliverystatus of a user to determine migration status. ### Method GET ### Endpoint /oxaas/v1/admin/contexts/{contextid}/users/{userid}/oxdeliverystatus ### Parameters #### Path Parameters - **contextid** (number) - Required - Context ID - **userid** (number) - Required - User ID ### Responses #### Success Response (200) - **oxdeliverystatus** (string) - The delivery status of the user. #### Response Example (200) ```json { "oxdeliverystatus": "OXAAS" } ``` ``` -------------------------------- ### Get User Class of Service Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the class of service for a specific user within a given context. ```APIDOC ## GET /oxaas/v1/admin/contexts/{contextid}/users/{userid}/classofservice ### Description Retrieves the class of service for a specific user. ### Method GET ### Endpoint /oxaas/v1/admin/contexts/{contextid}/users/{userid}/classofservice ### Parameters #### Path Parameters - **contextid** (number) - Required - Context ID - **userid** (number) - Required - User ID ### Responses #### Success Response (200) - **classofservice** (array of strings) - The class of service assigned to the user. #### Response Example (200) ```json { "classofservice": [ "cloud_pim" ] } ``` ``` -------------------------------- ### Create Kubernetes Namespace Source: https://documentation.open-xchange.com/appsuite/operation-guides Create the 'as8' namespace in your Kubernetes cluster. This is where App Suite and its components will be deployed. ```bash kubectl create namespace as8 ``` -------------------------------- ### Get All Mail Forwards Source: https://documentation.open-xchange.com/components/cloud-api/latest Retrieves all mail forwards for a specified context. The context can be identified by its name or ID. ```APIDOC ## GET /cloudapi/v2/mail/forward ### Description Retrieves all mail forwards for a specified context. ### Method GET ### Endpoint /cloudapi/v2/mail/forward ### Parameters #### Query Parameters - **name** (string or null) - Optional - The name of the context. - **id** (integer or null) - Optional - The ID of the context. ### Responses #### Success Response (200) Ok ``` -------------------------------- ### User Object Response Sample Source: https://documentation.open-xchange.com/components/cloud-api/latest This is a sample JSON response for a user object. Note that some fields like quota usages are not returned on creation and can be assumed to be 0. ```json [ { "contextName": "string", "userAdminEnabled": true, "name": "string", "givenName": "string", "surName": "string", "mail": "string", "displayName": "string", "isContextAdmin": true, "classOfService": [ "string" ], "language": "string", "aliases": [ "string" ], "timezone": "string", "spamLevel": "string", "unifiedQuota": 0, "mailQuota": 0, "fileQuota": 0, "usedMailQuota": 0, "usedFileQuota": 0, "usedQuota": 0, "guestId": 0, "uid": 0, "webLoginEnabled": true, "userImage": { "image": "SGVsbG8gV29ybGQ=", "type": "jpeg" }, "accountRecoveryMail": "string" } ] ``` -------------------------------- ### Create User Source: https://documentation.open-xchange.com/components/cloud-api/latest Creates a new user within a specified context. The context name must be provided as a query parameter. ```APIDOC ## POST /cloudapi/v2/users ### Description Creates a new user. The name of the context must be specified using the _name_ query parameter. ### Method POST ### Endpoint https://provisioning.eu.appsuite.cloud/cloudapi/v2/users?name={contextName} ### Parameters #### Query Parameters - **name** (string) - Required - The name of the context. - **id** (integer) - Optional - The ID of the user. - **includeid** (boolean) - Optional - Default: false. Whether to include the user ID in the response. #### Request Body schema: application/json - **name** (string) - Required - The username for the new user. - **password** (string) - Required - The password for the new user. - **givenName** (string) - Required - The first name of the user. - **surName** (string) - Required - The last name of the user. - **mail** (string) - Required - The primary email address for the user. - **displayName** (string) - Optional - The display name for the user. Defaults to givenName and surName if not provided. - **classOfService** (Array of strings) - Optional - The class of service for the user. Defaults to a system default if not specified. - **language** (string) - Optional - The locale for the user (e.g., en_US, de_DE). Defaults to a system default if not specified. - **aliases** (Array of strings) - Optional - Additional email aliases for the user. Defaults to the mandatory mail address. - **timezone** (string) - Optional - The timezone for the user (e.g., Europe/Berlin). Defaults to a system default if not specified. - **spamLevel** (string) - Optional - The spam filtering level (`low`, `medium`, or `high`). Defaults to `high` if not provided. - **unifiedQuota** (integer) - Optional - Combined mail and file quota in MB. Cannot be used with mailQuota or fileQuota. - **mailQuota** (integer) - Optional - Mail quota in MB. Cannot be used with unifiedQuota. - **fileQuota** (integer) - Optional - File quota in MB. Cannot be used with unifiedQuota. - **userImage** (object) - Optional - User image details. - **userPermissions** (object) - Optional - User permission settings. - **userAdminEnabled** (boolean) - Optional - Whether the user has admin privileges. - **emailBackupEnabled** (boolean) - Optional - Whether email backup is enabled for the user. - **accountRecoveryMail** (string) - Optional - Email address for account recovery. ### Request Example ```json { "name": "john@example.com", "password": "string", "givenName": "John", "surName": "Surname", "mail": "john@example.com", "displayName": "John Doe", "classOfService": [ "cloud_pim", "cloud_nine" ], "language": "de_DE", "aliases": [ "alias1@example.com", "alias2@example.com" ], "timezone": "Europe/Berlin", "spamLevel": "string", "unifiedQuota": 1000, "mailQuota": 1000, "fileQuota": 1000, "userImage": { "image": "SGVsbG8gV29ybGQ=", "type": "jpeg" }, "userPermissions": { "send": true, "receive": false, "maillogin": true, "weblogin": false, "editPassword": true }, "userAdminEnabled": true, "emailBackupEnabled": true, "accountRecoveryMail": "string" } ``` ### Responses #### Success Response (200) Ok. The response does not contain all possible values; quota usages are assumed to be 0 and `webLoginEnabled` is assumed to be `true`. #### Response Example (200) ```json [ { "contextName": "string", "userAdminEnabled": true, "name": "string", "givenName": "string", "surName": "string", "mail": "string", "displayName": "string", "isContextAdmin": true, "classOfService": [ "string" ], "language": "string", "aliases": [ "string" ], "timezone": "string", "spamLevel": "string", "unifiedQuota": 0, "mailQuota": 0, "fileQuota": 0, "usedMailQuota": 0, "usedFileQuota": 0, "usedQuota": 0, "guestId": 0, "uid": 0, "webLoginEnabled": true, "userImage": { "image": "SGVsbG8gV29ybGQ=", "type": "jpeg" }, "accountRecoveryMail": "string" } ] ``` #### Error Responses - **401**: Authentication failed - **404**: Context or User not found - **409**: Various other errors ``` -------------------------------- ### AS8 Transition Command-Line Operations Source: https://documentation.open-xchange.com/appsuite/operation-guides/transition.html Execute these commands for each context during the AS8 transition process. These commands disable the schema, change the server, and then re-enable the schema. ```bash /opt/open-exchange/sbin/disableschema -m oxdb_7 -A oxadminmaster -P ... /opt/open-exchange/sbin/changeserver -m oxdb_7 -s 1 -A oxadminmaster -P ... /opt/open-exchange/sbin/enableschema -m oxdb_7 -A oxadminmaster -P ... ``` -------------------------------- ### get the number of unread mails in all folders Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the total count of unread emails across all folders for a user. ```APIDOC ## get the number of unread mails in all folders ### Description Retrieves the number of unread mails in all folders for a user. ### Method GET ### Endpoint /api/oxaas/mail/{uid}/recentmessages ### Parameters #### Path Parameters - **uid** (string) - Required - User identifier ### Responses #### Success Response (200) - Returns the count of unread messages. #### Error Response (401) Authorization error ``` -------------------------------- ### get 5 recent mails from user in INBOX Source: https://documentation.open-xchange.com/components/cloudplugins/stable Retrieves the 5 most recent emails from a user's inbox. ```APIDOC ## get 5 recent mails from user in INBOX ### Description Retrieves the 5 most recent mails from a user's inbox. ### Method GET ### Endpoint /api/oxaas/mail/{uid}/recentmails ### Parameters #### Path Parameters - **uid** (string) - Required - User identifier ### Responses #### Success Response (200) - Returns an array of recent mail objects. - **id** (string) - Unique identifier for the email. - **subject** (string) - Subject of the email. - **from** (string) - Sender of the email. - **seen** (boolean) - Indicates if the email has been seen. - **arrival** (integer) - Timestamp of email arrival. #### Response Example ```json [ { "id": "string", "subject": "string", "from": "string", "seen": true, "arrival": 0 } ] ``` #### Error Response (401) Authorization error ```