> For the complete documentation index, see [llms.txt](https://docs.aisuru.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aisuru.com/api/backend/tenant.md).

# Tenant

## GET /api/v2/HealthCheck

> No operation.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/HealthCheck":{"get":{"tags":["Tenant"],"summary":"No operation.","operationId":"Tenant-HealthCheck","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"}}}}}}}},"components":{"schemas":{"Response":{"type":"object","properties":{"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Base response."}}}}
````

## Gets the list of of all Tenant objects.

> Listing of Tenant objects is granted only to administrative users.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/Tenants/{strToken}":{"get":{"tags":["Tenant"],"summary":"Gets the list of of all Tenant objects.","description":"Listing of Tenant objects is granted only to administrative users.","operationId":"Tenant-ListTenants","parameters":[{"name":"strToken","in":"path","description":"The login token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTenantsResponse"}}}}}}}},"components":{"schemas":{"ListTenantsResponse":{"type":"object","properties":{"tenants":{"type":"array","items":{"$ref":"#/components/schemas/TenantSpecs"},"description":"The Tenant object.","nullable":true},"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Response to a List Tenants request."},"TenantSpecs":{"type":"object","properties":{"tenantID":{"type":"string","description":"Tenant ID.\r\nReturned during Get operations.\r\nIgnored in other cases.","nullable":true},"name":{"type":"string","description":"Tenant name. Usually a host name, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Duplicate operations.\r\nIgnored in other cases.","nullable":true},"aliases":{"type":"array","items":{"type":"string"},"description":"Additional Tenant names. Usually host names, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Update operations.\r\nIgnored in other cases.","nullable":true},"tenantType":{"type":"string","description":"Type of the Tenant. <br> The following values are possible: <ul> <li><code>Owned</code>: the tenant is owned Memori</li> <li><code>Customer</code>: the tenant is owned by a customer</li> </ul>","nullable":true},"description":{"type":"string","description":"Tenant description. Usually a human-readable name, e.g. ```MemoryTwin```.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"logoURL":{"type":"string","description":"URL of the Tenant logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"squareLogoURL":{"type":"string","description":"URL of the Tenant Icons logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"adminEmail":{"type":"string","description":"Administrative e-mail for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"theme":{"type":"string","description":"Color theme to be used for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"feedbackURL":{"type":"string","description":"URL for the feedback form for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"privacyPolicyURL":{"type":"string","description":"URL of the Privacy Policy page for the Tenant.","nullable":true},"speechProvider":{"type":"string","description":"Text to speech provider for the Tenant.","nullable":true},"speechAPIKey":{"type":"string","description":"API key for the text to speech provider.","nullable":true},"perplexityAPIKey":{"type":"string","description":"API key for Perplexity Search LLM Engine.","nullable":true},"adminCount":{"type":"integer","description":"Current number of administrative Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"userCount":{"type":"integer","description":"Current number of normal Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"memoriCount":{"type":"integer","description":"Current number of Memori objects.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"scormMemoriCount":{"type":"integer","description":"Current number of Memori objects with SCORM enabled.\r\nReturned during Get operations.\r\nIgnored in other cases.\r\nOmitted when MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori is not greater than zero.","format":"int32","nullable":true},"disableRegistration":{"type":"boolean","description":"If ```True``` no new User can be registered for this Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"maxMemoriPerAdmin":{"type":"integer","description":"Maximum number of Memori objects per administrative User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxMemoriPerUser":{"type":"integer","description":"Maximum number of Memori objects per normal User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxTotalMemori":{"type":"integer","description":"Maximum total number of Memori objects.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxAdmins":{"type":"integer","description":"Maximum number of administrative Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxUsers":{"type":"integer","description":"Maximum number of normal Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessions":{"type":"integer","description":"Maximum total number of free sessions across all users of this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessionsPerUser":{"type":"integer","description":"Maximum number of free sessions for a User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"nonFreeSessionCost":{"type":"number","description":"Cost of each new session above the max free sessions threshold.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"double","nullable":true},"maxCompletions":{"type":"integer","description":"Maximum total number of completions across all users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxCompletionsPerUser":{"type":"integer","description":"Maximum number of completions for a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxImportSize":{"type":"integer","description":"Maximum total number of characters that can be imported across\r\nall users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxImportSizePerUser":{"type":"integer","description":"Maximum number of characters that can be imported by a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxScormMemori":{"type":"integer","description":"Maximum number of SCORM Memori for this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"paying":{"type":"boolean","description":"If ```True``` means this Tenant has an actual payment\r\ncontract in effect and non-free sessions (i.e. sessions above\r\nthe max free session thresholds) can be performed.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableUserMemoriCreation":{"type":"boolean","description":"If ```True``` normal Users can create new Memori objects.\r\nAdministrative Users always can.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBoardOfExperts":{"type":"boolean","description":"If ```True``` the Board of Experts feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDCMIntegration":{"type":"boolean","description":"If ```True``` the DCM integration feature is enabled\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBadges":{"type":"boolean","description":"If ```True``` this Tenant accepts DCM outcomes and\r\nconsequently can receive badges in the Open Badge format.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDeepThought":{"type":"boolean","description":"If ```True``` the Deep Thought feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableVirtualSpaces":{"type":"boolean","description":"If ```True``` the Virtual Spaces feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableScorm":{"type":"boolean","description":"If ```True```, SCORM Memori may be created or enabled on this Tenant (subject to MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori when billing is not delegated).\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations (SuperAdmin only).","nullable":true},"billingDelegation":{"type":"boolean","description":"If ```True``` the Tenant costs and limits are\r\ncomputed from the configured Billing interface.","nullable":true},"ssoLogin":{"type":"boolean","description":"When ```True```, SSO login is enabled for this tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"ssoRedirect":{"type":"string","description":"Optional redirect URL for SSO. Omitted when null.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"chatLogsRetentionDays":{"type":"integer","description":"Number of days to retain chat logs. Must be at least 1.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"smtpConfig":{"$ref":"#/components/schemas/SMTPConfig"},"translationServiceConfig":{"$ref":"#/components/schemas/TranslationServiceConfig"},"creationTimestamp":{"type":"string","description":"Timestamp of creation. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true},"lastChangeTimestamp":{"type":"string","description":"Timestamp of latest change. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true}},"additionalProperties":false,"description":"Specifications of a Tenant object."},"SMTPConfig":{"type":"object","properties":{"server":{"type":"string","nullable":true},"user":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"port":{"type":"integer","format":"int32"},"socketSecurity":{"type":"string","nullable":true},"senderEmail":{"type":"string","nullable":true},"senderName":{"type":"string","nullable":true}},"additionalProperties":false},"TranslationServiceConfig":{"type":"object","properties":{"apiKey":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}},"additionalProperties":false}}}}
````

## GET /api/v2/Tenant/{tenantName}

> Gets the details of a Tenant object.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/Tenant/{tenantName}":{"get":{"tags":["Tenant"],"summary":"Gets the details of a Tenant object.","operationId":"Tenant-GetPublicTenant","parameters":[{"name":"tenantName","in":"path","description":"The name of the Tenant","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantResponse"}}}}}}}},"components":{"schemas":{"GetTenantResponse":{"type":"object","properties":{"tenant":{"$ref":"#/components/schemas/TenantSpecs"},"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Response of a Get Tenant request."},"TenantSpecs":{"type":"object","properties":{"tenantID":{"type":"string","description":"Tenant ID.\r\nReturned during Get operations.\r\nIgnored in other cases.","nullable":true},"name":{"type":"string","description":"Tenant name. Usually a host name, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Duplicate operations.\r\nIgnored in other cases.","nullable":true},"aliases":{"type":"array","items":{"type":"string"},"description":"Additional Tenant names. Usually host names, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Update operations.\r\nIgnored in other cases.","nullable":true},"tenantType":{"type":"string","description":"Type of the Tenant. <br> The following values are possible: <ul> <li><code>Owned</code>: the tenant is owned Memori</li> <li><code>Customer</code>: the tenant is owned by a customer</li> </ul>","nullable":true},"description":{"type":"string","description":"Tenant description. Usually a human-readable name, e.g. ```MemoryTwin```.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"logoURL":{"type":"string","description":"URL of the Tenant logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"squareLogoURL":{"type":"string","description":"URL of the Tenant Icons logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"adminEmail":{"type":"string","description":"Administrative e-mail for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"theme":{"type":"string","description":"Color theme to be used for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"feedbackURL":{"type":"string","description":"URL for the feedback form for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"privacyPolicyURL":{"type":"string","description":"URL of the Privacy Policy page for the Tenant.","nullable":true},"speechProvider":{"type":"string","description":"Text to speech provider for the Tenant.","nullable":true},"speechAPIKey":{"type":"string","description":"API key for the text to speech provider.","nullable":true},"perplexityAPIKey":{"type":"string","description":"API key for Perplexity Search LLM Engine.","nullable":true},"adminCount":{"type":"integer","description":"Current number of administrative Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"userCount":{"type":"integer","description":"Current number of normal Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"memoriCount":{"type":"integer","description":"Current number of Memori objects.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"scormMemoriCount":{"type":"integer","description":"Current number of Memori objects with SCORM enabled.\r\nReturned during Get operations.\r\nIgnored in other cases.\r\nOmitted when MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori is not greater than zero.","format":"int32","nullable":true},"disableRegistration":{"type":"boolean","description":"If ```True``` no new User can be registered for this Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"maxMemoriPerAdmin":{"type":"integer","description":"Maximum number of Memori objects per administrative User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxMemoriPerUser":{"type":"integer","description":"Maximum number of Memori objects per normal User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxTotalMemori":{"type":"integer","description":"Maximum total number of Memori objects.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxAdmins":{"type":"integer","description":"Maximum number of administrative Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxUsers":{"type":"integer","description":"Maximum number of normal Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessions":{"type":"integer","description":"Maximum total number of free sessions across all users of this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessionsPerUser":{"type":"integer","description":"Maximum number of free sessions for a User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"nonFreeSessionCost":{"type":"number","description":"Cost of each new session above the max free sessions threshold.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"double","nullable":true},"maxCompletions":{"type":"integer","description":"Maximum total number of completions across all users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxCompletionsPerUser":{"type":"integer","description":"Maximum number of completions for a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxImportSize":{"type":"integer","description":"Maximum total number of characters that can be imported across\r\nall users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxImportSizePerUser":{"type":"integer","description":"Maximum number of characters that can be imported by a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxScormMemori":{"type":"integer","description":"Maximum number of SCORM Memori for this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"paying":{"type":"boolean","description":"If ```True``` means this Tenant has an actual payment\r\ncontract in effect and non-free sessions (i.e. sessions above\r\nthe max free session thresholds) can be performed.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableUserMemoriCreation":{"type":"boolean","description":"If ```True``` normal Users can create new Memori objects.\r\nAdministrative Users always can.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBoardOfExperts":{"type":"boolean","description":"If ```True``` the Board of Experts feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDCMIntegration":{"type":"boolean","description":"If ```True``` the DCM integration feature is enabled\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBadges":{"type":"boolean","description":"If ```True``` this Tenant accepts DCM outcomes and\r\nconsequently can receive badges in the Open Badge format.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDeepThought":{"type":"boolean","description":"If ```True``` the Deep Thought feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableVirtualSpaces":{"type":"boolean","description":"If ```True``` the Virtual Spaces feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableScorm":{"type":"boolean","description":"If ```True```, SCORM Memori may be created or enabled on this Tenant (subject to MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori when billing is not delegated).\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations (SuperAdmin only).","nullable":true},"billingDelegation":{"type":"boolean","description":"If ```True``` the Tenant costs and limits are\r\ncomputed from the configured Billing interface.","nullable":true},"ssoLogin":{"type":"boolean","description":"When ```True```, SSO login is enabled for this tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"ssoRedirect":{"type":"string","description":"Optional redirect URL for SSO. Omitted when null.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"chatLogsRetentionDays":{"type":"integer","description":"Number of days to retain chat logs. Must be at least 1.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"smtpConfig":{"$ref":"#/components/schemas/SMTPConfig"},"translationServiceConfig":{"$ref":"#/components/schemas/TranslationServiceConfig"},"creationTimestamp":{"type":"string","description":"Timestamp of creation. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true},"lastChangeTimestamp":{"type":"string","description":"Timestamp of latest change. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true}},"additionalProperties":false,"description":"Specifications of a Tenant object."},"SMTPConfig":{"type":"object","properties":{"server":{"type":"string","nullable":true},"user":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"port":{"type":"integer","format":"int32"},"socketSecurity":{"type":"string","nullable":true},"senderEmail":{"type":"string","nullable":true},"senderName":{"type":"string","nullable":true}},"additionalProperties":false},"TranslationServiceConfig":{"type":"object","properties":{"apiKey":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}},"additionalProperties":false}}}}
````

## Gets the details of a Tenant object.

> Retrieve all Tenant data is granted only  to administrative users.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/Tenant/{strToken}/{tenantName}":{"get":{"tags":["Tenant"],"summary":"Gets the details of a Tenant object.","description":"Retrieve all Tenant data is granted only  to administrative users.","operationId":"Tenant-GetTenant","parameters":[{"name":"strToken","in":"path","description":"The login token","required":true,"schema":{"type":"string"}},{"name":"tenantName","in":"path","description":"The name of the Tenant","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantResponse"}}}}}}}},"components":{"schemas":{"GetTenantResponse":{"type":"object","properties":{"tenant":{"$ref":"#/components/schemas/TenantSpecs"},"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Response of a Get Tenant request."},"TenantSpecs":{"type":"object","properties":{"tenantID":{"type":"string","description":"Tenant ID.\r\nReturned during Get operations.\r\nIgnored in other cases.","nullable":true},"name":{"type":"string","description":"Tenant name. Usually a host name, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Duplicate operations.\r\nIgnored in other cases.","nullable":true},"aliases":{"type":"array","items":{"type":"string"},"description":"Additional Tenant names. Usually host names, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Update operations.\r\nIgnored in other cases.","nullable":true},"tenantType":{"type":"string","description":"Type of the Tenant. <br> The following values are possible: <ul> <li><code>Owned</code>: the tenant is owned Memori</li> <li><code>Customer</code>: the tenant is owned by a customer</li> </ul>","nullable":true},"description":{"type":"string","description":"Tenant description. Usually a human-readable name, e.g. ```MemoryTwin```.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"logoURL":{"type":"string","description":"URL of the Tenant logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"squareLogoURL":{"type":"string","description":"URL of the Tenant Icons logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"adminEmail":{"type":"string","description":"Administrative e-mail for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"theme":{"type":"string","description":"Color theme to be used for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"feedbackURL":{"type":"string","description":"URL for the feedback form for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"privacyPolicyURL":{"type":"string","description":"URL of the Privacy Policy page for the Tenant.","nullable":true},"speechProvider":{"type":"string","description":"Text to speech provider for the Tenant.","nullable":true},"speechAPIKey":{"type":"string","description":"API key for the text to speech provider.","nullable":true},"perplexityAPIKey":{"type":"string","description":"API key for Perplexity Search LLM Engine.","nullable":true},"adminCount":{"type":"integer","description":"Current number of administrative Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"userCount":{"type":"integer","description":"Current number of normal Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"memoriCount":{"type":"integer","description":"Current number of Memori objects.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"scormMemoriCount":{"type":"integer","description":"Current number of Memori objects with SCORM enabled.\r\nReturned during Get operations.\r\nIgnored in other cases.\r\nOmitted when MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori is not greater than zero.","format":"int32","nullable":true},"disableRegistration":{"type":"boolean","description":"If ```True``` no new User can be registered for this Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"maxMemoriPerAdmin":{"type":"integer","description":"Maximum number of Memori objects per administrative User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxMemoriPerUser":{"type":"integer","description":"Maximum number of Memori objects per normal User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxTotalMemori":{"type":"integer","description":"Maximum total number of Memori objects.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxAdmins":{"type":"integer","description":"Maximum number of administrative Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxUsers":{"type":"integer","description":"Maximum number of normal Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessions":{"type":"integer","description":"Maximum total number of free sessions across all users of this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessionsPerUser":{"type":"integer","description":"Maximum number of free sessions for a User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"nonFreeSessionCost":{"type":"number","description":"Cost of each new session above the max free sessions threshold.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"double","nullable":true},"maxCompletions":{"type":"integer","description":"Maximum total number of completions across all users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxCompletionsPerUser":{"type":"integer","description":"Maximum number of completions for a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxImportSize":{"type":"integer","description":"Maximum total number of characters that can be imported across\r\nall users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxImportSizePerUser":{"type":"integer","description":"Maximum number of characters that can be imported by a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxScormMemori":{"type":"integer","description":"Maximum number of SCORM Memori for this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"paying":{"type":"boolean","description":"If ```True``` means this Tenant has an actual payment\r\ncontract in effect and non-free sessions (i.e. sessions above\r\nthe max free session thresholds) can be performed.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableUserMemoriCreation":{"type":"boolean","description":"If ```True``` normal Users can create new Memori objects.\r\nAdministrative Users always can.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBoardOfExperts":{"type":"boolean","description":"If ```True``` the Board of Experts feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDCMIntegration":{"type":"boolean","description":"If ```True``` the DCM integration feature is enabled\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBadges":{"type":"boolean","description":"If ```True``` this Tenant accepts DCM outcomes and\r\nconsequently can receive badges in the Open Badge format.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDeepThought":{"type":"boolean","description":"If ```True``` the Deep Thought feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableVirtualSpaces":{"type":"boolean","description":"If ```True``` the Virtual Spaces feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableScorm":{"type":"boolean","description":"If ```True```, SCORM Memori may be created or enabled on this Tenant (subject to MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori when billing is not delegated).\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations (SuperAdmin only).","nullable":true},"billingDelegation":{"type":"boolean","description":"If ```True``` the Tenant costs and limits are\r\ncomputed from the configured Billing interface.","nullable":true},"ssoLogin":{"type":"boolean","description":"When ```True```, SSO login is enabled for this tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"ssoRedirect":{"type":"string","description":"Optional redirect URL for SSO. Omitted when null.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"chatLogsRetentionDays":{"type":"integer","description":"Number of days to retain chat logs. Must be at least 1.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"smtpConfig":{"$ref":"#/components/schemas/SMTPConfig"},"translationServiceConfig":{"$ref":"#/components/schemas/TranslationServiceConfig"},"creationTimestamp":{"type":"string","description":"Timestamp of creation. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true},"lastChangeTimestamp":{"type":"string","description":"Timestamp of latest change. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true}},"additionalProperties":false,"description":"Specifications of a Tenant object."},"SMTPConfig":{"type":"object","properties":{"server":{"type":"string","nullable":true},"user":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"port":{"type":"integer","format":"int32"},"socketSecurity":{"type":"string","nullable":true},"senderEmail":{"type":"string","nullable":true},"senderName":{"type":"string","nullable":true}},"additionalProperties":false},"TranslationServiceConfig":{"type":"object","properties":{"apiKey":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}},"additionalProperties":false}}}}
````

## Duplicates a Tenant object.

> Duplication of a Tenant object is granted only to administrative users.> \
> If ChatLogsRetentionDays is not specified, it defaults to 90 days.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/Tenant/{strToken}/{tenantName}":{"post":{"tags":["Tenant"],"summary":"Duplicates a Tenant object.","description":"Duplication of a Tenant object is granted only to administrative users.\r\nIf ChatLogsRetentionDays is not specified, it defaults to 90 days.","operationId":"Tenant-DuplicateTenant","parameters":[{"name":"strToken","in":"path","description":"The login token","required":true,"schema":{"type":"string"}},{"name":"tenantName","in":"path","description":"The name of the Tenant to duplicate","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The specifications of the new Tenant object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSpecs"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantResponse"}}}}}}}},"components":{"schemas":{"TenantSpecs":{"type":"object","properties":{"tenantID":{"type":"string","description":"Tenant ID.\r\nReturned during Get operations.\r\nIgnored in other cases.","nullable":true},"name":{"type":"string","description":"Tenant name. Usually a host name, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Duplicate operations.\r\nIgnored in other cases.","nullable":true},"aliases":{"type":"array","items":{"type":"string"},"description":"Additional Tenant names. Usually host names, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Update operations.\r\nIgnored in other cases.","nullable":true},"tenantType":{"type":"string","description":"Type of the Tenant. <br> The following values are possible: <ul> <li><code>Owned</code>: the tenant is owned Memori</li> <li><code>Customer</code>: the tenant is owned by a customer</li> </ul>","nullable":true},"description":{"type":"string","description":"Tenant description. Usually a human-readable name, e.g. ```MemoryTwin```.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"logoURL":{"type":"string","description":"URL of the Tenant logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"squareLogoURL":{"type":"string","description":"URL of the Tenant Icons logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"adminEmail":{"type":"string","description":"Administrative e-mail for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"theme":{"type":"string","description":"Color theme to be used for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"feedbackURL":{"type":"string","description":"URL for the feedback form for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"privacyPolicyURL":{"type":"string","description":"URL of the Privacy Policy page for the Tenant.","nullable":true},"speechProvider":{"type":"string","description":"Text to speech provider for the Tenant.","nullable":true},"speechAPIKey":{"type":"string","description":"API key for the text to speech provider.","nullable":true},"perplexityAPIKey":{"type":"string","description":"API key for Perplexity Search LLM Engine.","nullable":true},"adminCount":{"type":"integer","description":"Current number of administrative Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"userCount":{"type":"integer","description":"Current number of normal Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"memoriCount":{"type":"integer","description":"Current number of Memori objects.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"scormMemoriCount":{"type":"integer","description":"Current number of Memori objects with SCORM enabled.\r\nReturned during Get operations.\r\nIgnored in other cases.\r\nOmitted when MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori is not greater than zero.","format":"int32","nullable":true},"disableRegistration":{"type":"boolean","description":"If ```True``` no new User can be registered for this Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"maxMemoriPerAdmin":{"type":"integer","description":"Maximum number of Memori objects per administrative User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxMemoriPerUser":{"type":"integer","description":"Maximum number of Memori objects per normal User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxTotalMemori":{"type":"integer","description":"Maximum total number of Memori objects.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxAdmins":{"type":"integer","description":"Maximum number of administrative Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxUsers":{"type":"integer","description":"Maximum number of normal Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessions":{"type":"integer","description":"Maximum total number of free sessions across all users of this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessionsPerUser":{"type":"integer","description":"Maximum number of free sessions for a User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"nonFreeSessionCost":{"type":"number","description":"Cost of each new session above the max free sessions threshold.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"double","nullable":true},"maxCompletions":{"type":"integer","description":"Maximum total number of completions across all users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxCompletionsPerUser":{"type":"integer","description":"Maximum number of completions for a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxImportSize":{"type":"integer","description":"Maximum total number of characters that can be imported across\r\nall users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxImportSizePerUser":{"type":"integer","description":"Maximum number of characters that can be imported by a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxScormMemori":{"type":"integer","description":"Maximum number of SCORM Memori for this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"paying":{"type":"boolean","description":"If ```True``` means this Tenant has an actual payment\r\ncontract in effect and non-free sessions (i.e. sessions above\r\nthe max free session thresholds) can be performed.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableUserMemoriCreation":{"type":"boolean","description":"If ```True``` normal Users can create new Memori objects.\r\nAdministrative Users always can.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBoardOfExperts":{"type":"boolean","description":"If ```True``` the Board of Experts feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDCMIntegration":{"type":"boolean","description":"If ```True``` the DCM integration feature is enabled\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBadges":{"type":"boolean","description":"If ```True``` this Tenant accepts DCM outcomes and\r\nconsequently can receive badges in the Open Badge format.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDeepThought":{"type":"boolean","description":"If ```True``` the Deep Thought feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableVirtualSpaces":{"type":"boolean","description":"If ```True``` the Virtual Spaces feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableScorm":{"type":"boolean","description":"If ```True```, SCORM Memori may be created or enabled on this Tenant (subject to MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori when billing is not delegated).\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations (SuperAdmin only).","nullable":true},"billingDelegation":{"type":"boolean","description":"If ```True``` the Tenant costs and limits are\r\ncomputed from the configured Billing interface.","nullable":true},"ssoLogin":{"type":"boolean","description":"When ```True```, SSO login is enabled for this tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"ssoRedirect":{"type":"string","description":"Optional redirect URL for SSO. Omitted when null.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"chatLogsRetentionDays":{"type":"integer","description":"Number of days to retain chat logs. Must be at least 1.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"smtpConfig":{"$ref":"#/components/schemas/SMTPConfig"},"translationServiceConfig":{"$ref":"#/components/schemas/TranslationServiceConfig"},"creationTimestamp":{"type":"string","description":"Timestamp of creation. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true},"lastChangeTimestamp":{"type":"string","description":"Timestamp of latest change. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true}},"additionalProperties":false,"description":"Specifications of a Tenant object."},"SMTPConfig":{"type":"object","properties":{"server":{"type":"string","nullable":true},"user":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"port":{"type":"integer","format":"int32"},"socketSecurity":{"type":"string","nullable":true},"senderEmail":{"type":"string","nullable":true},"senderName":{"type":"string","nullable":true}},"additionalProperties":false},"TranslationServiceConfig":{"type":"object","properties":{"apiKey":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}},"additionalProperties":false},"GetTenantResponse":{"type":"object","properties":{"tenant":{"$ref":"#/components/schemas/TenantSpecs"},"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Response of a Get Tenant request."}}}}
````

## Updates the details of a Tenant object.

> Update of a Tenant object is granted only to administrative users.> \
> Super admins can change all properties.> \
> Tenant admins may only change the following properties:\<ul>\<li>LogoURL\</li>\<li>SquareLogoURL\</li>\<li>AdminEmail\</li>\<li>FeedbackURL\</li>\<li>PrivacyPolicyURL\</li>\<li>SpeechProvider\</li>\<li>SpeechAPIKey\</li>\<li>PerplexityAPIKey\</li>\<li>MaxMemoriPerUser\</li>\<li>MaxFreeSessionsPerUser\</li>\<li>MaxCompletionsPerUser\</li>\<li>MaxImportSizePerUser\</li>\<li>EnableUserMemoriCreation\</li>\<li>ChatLogsRetentionDays\</li>\<li>SMTPConfig\</li>\<li>TranslationServiceConfig\</li>\<li>SSOLogin\</li>\<li>SSORedirect\</li>\</ul>> \
> Other properties (for example \`EnableScorm\`, \`MaxScormMemori\`, and other tenant-wide limits) require SuperAdmin.

````json
{"openapi":"3.0.1","info":{"title":"Memori.ai Web API V2","version":"v2"},"paths":{"/api/v2/Tenant/{strToken}/{tenantName}":{"patch":{"tags":["Tenant"],"summary":"Updates the details of a Tenant object.","description":"Update of a Tenant object is granted only to administrative users.\r\nSuper admins can change all properties.\r\nTenant admins may only change the following properties:<ul><li>LogoURL</li><li>SquareLogoURL</li><li>AdminEmail</li><li>FeedbackURL</li><li>PrivacyPolicyURL</li><li>SpeechProvider</li><li>SpeechAPIKey</li><li>PerplexityAPIKey</li><li>MaxMemoriPerUser</li><li>MaxFreeSessionsPerUser</li><li>MaxCompletionsPerUser</li><li>MaxImportSizePerUser</li><li>EnableUserMemoriCreation</li><li>ChatLogsRetentionDays</li><li>SMTPConfig</li><li>TranslationServiceConfig</li><li>SSOLogin</li><li>SSORedirect</li></ul>\r\nOther properties (for example `EnableScorm`, `MaxScormMemori`, and other tenant-wide limits) require SuperAdmin.","operationId":"Tenant-UpdateTenant","parameters":[{"name":"strToken","in":"path","description":"The login token","required":true,"schema":{"type":"string"}},{"name":"tenantName","in":"path","description":"The name of the Tenant to update","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The new specifications of the Tenant object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSpecs"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantResponse"}}}}}}}},"components":{"schemas":{"TenantSpecs":{"type":"object","properties":{"tenantID":{"type":"string","description":"Tenant ID.\r\nReturned during Get operations.\r\nIgnored in other cases.","nullable":true},"name":{"type":"string","description":"Tenant name. Usually a host name, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Duplicate operations.\r\nIgnored in other cases.","nullable":true},"aliases":{"type":"array","items":{"type":"string"},"description":"Additional Tenant names. Usually host names, e.g. ```app.memorytwin.com```.\r\nReturned during Get operations.\r\nUsed during Update operations.\r\nIgnored in other cases.","nullable":true},"tenantType":{"type":"string","description":"Type of the Tenant. <br> The following values are possible: <ul> <li><code>Owned</code>: the tenant is owned Memori</li> <li><code>Customer</code>: the tenant is owned by a customer</li> </ul>","nullable":true},"description":{"type":"string","description":"Tenant description. Usually a human-readable name, e.g. ```MemoryTwin```.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"logoURL":{"type":"string","description":"URL of the Tenant logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"squareLogoURL":{"type":"string","description":"URL of the Tenant Icons logo.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"adminEmail":{"type":"string","description":"Administrative e-mail for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"theme":{"type":"string","description":"Color theme to be used for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"feedbackURL":{"type":"string","description":"URL for the feedback form for the Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"privacyPolicyURL":{"type":"string","description":"URL of the Privacy Policy page for the Tenant.","nullable":true},"speechProvider":{"type":"string","description":"Text to speech provider for the Tenant.","nullable":true},"speechAPIKey":{"type":"string","description":"API key for the text to speech provider.","nullable":true},"perplexityAPIKey":{"type":"string","description":"API key for Perplexity Search LLM Engine.","nullable":true},"adminCount":{"type":"integer","description":"Current number of administrative Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"userCount":{"type":"integer","description":"Current number of normal Users.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"memoriCount":{"type":"integer","description":"Current number of Memori objects.\r\nReturned during Get operations.\r\nIgnored in other cases.","format":"int32"},"scormMemoriCount":{"type":"integer","description":"Current number of Memori objects with SCORM enabled.\r\nReturned during Get operations.\r\nIgnored in other cases.\r\nOmitted when MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori is not greater than zero.","format":"int32","nullable":true},"disableRegistration":{"type":"boolean","description":"If ```True``` no new User can be registered for this Tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"maxMemoriPerAdmin":{"type":"integer","description":"Maximum number of Memori objects per administrative User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxMemoriPerUser":{"type":"integer","description":"Maximum number of Memori objects per normal User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxTotalMemori":{"type":"integer","description":"Maximum total number of Memori objects.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxAdmins":{"type":"integer","description":"Maximum number of administrative Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxUsers":{"type":"integer","description":"Maximum number of normal Users.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessions":{"type":"integer","description":"Maximum total number of free sessions across all users of this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxFreeSessionsPerUser":{"type":"integer","description":"Maximum number of free sessions for a User.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"nonFreeSessionCost":{"type":"number","description":"Cost of each new session above the max free sessions threshold.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"double","nullable":true},"maxCompletions":{"type":"integer","description":"Maximum total number of completions across all users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxCompletionsPerUser":{"type":"integer","description":"Maximum number of completions for a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"maxImportSize":{"type":"integer","description":"Maximum total number of characters that can be imported across\r\nall users of this Tenant.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxImportSizePerUser":{"type":"integer","description":"Maximum number of characters that can be imported by a User.\r\nif ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int64","nullable":true},"maxScormMemori":{"type":"integer","description":"Maximum number of SCORM Memori for this Tenant.\r\nIf ```0``` it means unlimited.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"paying":{"type":"boolean","description":"If ```True``` means this Tenant has an actual payment\r\ncontract in effect and non-free sessions (i.e. sessions above\r\nthe max free session thresholds) can be performed.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableUserMemoriCreation":{"type":"boolean","description":"If ```True``` normal Users can create new Memori objects.\r\nAdministrative Users always can.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBoardOfExperts":{"type":"boolean","description":"If ```True``` the Board of Experts feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDCMIntegration":{"type":"boolean","description":"If ```True``` the DCM integration feature is enabled\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableBadges":{"type":"boolean","description":"If ```True``` this Tenant accepts DCM outcomes and\r\nconsequently can receive badges in the Open Badge format.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableDeepThought":{"type":"boolean","description":"If ```True``` the Deep Thought feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableVirtualSpaces":{"type":"boolean","description":"If ```True``` the Virtual Spaces feature is enabled.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"enableScorm":{"type":"boolean","description":"If ```True```, SCORM Memori may be created or enabled on this Tenant (subject to MemoriAi.WebApi.ModelV2.TenantSpecs.MaxScormMemori when billing is not delegated).\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations (SuperAdmin only).","nullable":true},"billingDelegation":{"type":"boolean","description":"If ```True``` the Tenant costs and limits are\r\ncomputed from the configured Billing interface.","nullable":true},"ssoLogin":{"type":"boolean","description":"When ```True```, SSO login is enabled for this tenant.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"ssoRedirect":{"type":"string","description":"Optional redirect URL for SSO. Omitted when null.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","nullable":true},"chatLogsRetentionDays":{"type":"integer","description":"Number of days to retain chat logs. Must be at least 1.\r\nReturned during Get operations.\r\nUsed during Duplicate and Update operations.","format":"int32","nullable":true},"smtpConfig":{"$ref":"#/components/schemas/SMTPConfig"},"translationServiceConfig":{"$ref":"#/components/schemas/TranslationServiceConfig"},"creationTimestamp":{"type":"string","description":"Timestamp of creation. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true},"lastChangeTimestamp":{"type":"string","description":"Timestamp of latest change. Returned during Get operations.\r\nIgnored in other cases.","format":"date-time","nullable":true}},"additionalProperties":false,"description":"Specifications of a Tenant object."},"SMTPConfig":{"type":"object","properties":{"server":{"type":"string","nullable":true},"user":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"port":{"type":"integer","format":"int32"},"socketSecurity":{"type":"string","nullable":true},"senderEmail":{"type":"string","nullable":true},"senderName":{"type":"string","nullable":true}},"additionalProperties":false},"TranslationServiceConfig":{"type":"object","properties":{"apiKey":{"type":"string","nullable":true},"url":{"type":"string","nullable":true}},"additionalProperties":false},"UpdateTenantResponse":{"type":"object","properties":{"tenant":{"$ref":"#/components/schemas/TenantSpecs"},"requestID":{"type":"integer","description":"Progressive number of the request (since the Server started).\r\nUse this number, together with the RequestDateTime property,\r\nto report an anomalous reponse.","format":"int64"},"requestDateTime":{"type":"string","description":"Timestamp of the request.\r\nUse this timestamp, together with the RequestID property,\r\nto report an anomalous reponse.","format":"date-time"},"resultCode":{"type":"integer","description":"Result code. A code of ```0``` means no errors.\r\nWhen the request fails, its value is indicative of the actual\r\nerror.","format":"int32"},"resultMessage":{"type":"string","description":"Result message. A message of ```Ok``` means no errors.","nullable":true}},"additionalProperties":false,"description":"Response of an Update Tenant request."}}}}
````
