# 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."}}}}
````


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aisuru.com/api-en/backend/tenant.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
