跳到主要内容

ONLYOFFICE DocSpace Portal API

The browsable version of this reference, with a request builder and code samples, is published at https://api.onlyoffice.com/docspace/api-backend/usage-api/.

All URIs are relative to https://yourportal.onlyoffice.com, where the host is the address of your DocSpace instance.

Endpoints​

ClassMethodHTTP requestDescription
AppsApigetGET /api/2.0/apps/{id}Get an app
AppsApigetAllGET /api/2.0/appsGet all apps
AppsApigetSettingsGET /api/2.0/apps/{id}/settingsGet app settings
AppsApisetEnabledPUT /api/2.0/apps/{id}/enabledEnable or disable an app
AppsApisetSettingsPUT /api/2.0/apps/{id}/settingsSave app settings
AuthenticationApiauthenticateMePOST /api/2.0/authenticationAuthenticate a user
AuthenticationApiauthenticateMeFromBodyWithCodePOST /api/2.0/authentication/{code}Authenticate a user by code
AuthenticationApicheckConfirmPOST /api/2.0/authentication/confirmCheck a confirmation link
AuthenticationApigetIsAuthentificatedGET /api/2.0/authenticationCheck authentication
AuthenticationApilogoutPOST /api/2.0/authentication/logoutLog out
AuthenticationApisaveMobilePhonePOST /api/2.0/authentication/setphoneSet a mobile phone
AuthenticationApisendSmsCodePOST /api/2.0/authentication/sendsmsSend SMS code
CapabilitiesApigetPortalCapabilitiesGET /api/2.0/capabilitiesGet portal capabilities
MigrationApicancelMigrationPOST /api/2.0/migration/cancelCancel migration
MigrationApiclearMigrationPOST /api/2.0/migration/clearClear migration
MigrationApifinishMigrationPOST /api/2.0/migration/finishFinish migration
MigrationApigetMigrationLogsGET /api/2.0/migration/logsGet migration logs
MigrationApigetMigrationStatusGET /api/2.0/migration/statusGet migration status
MigrationApilistMigrationsGET /api/2.0/migration/listGet available migrators
MigrationApistartMigrationPOST /api/2.0/migration/migrateStart migration
MigrationApiuploadAndInitializeMigrationPOST /api/2.0/migration/init/{migratorName}Parse migration archive
PortalPaymentApicalculateWalletPaymentPUT /api/2.0/portal/payment/calculatewalletCalculate the wallet payment amount
PortalPaymentApichangeTenantWalletServiceStatePOST /api/2.0/portal/payment/servicestateSwitch a wallet service
PortalPaymentApicreateCustomerMonthlyUsageReportPOST /api/2.0/portal/payment/customer/usage/monthly/reportStart the monthly usage report
PortalPaymentApicreateCustomerOperationsReportPOST /api/2.0/portal/payment/customer/operationsreportStart the operations report
PortalPaymentApicreateCustomerServiceUsageReportPOST /api/2.0/portal/payment/customer/usage/reportStart the service usage report
PortalPaymentApigetAccountingServicePricesGET /api/2.0/portal/payment/accounting/prices/{serviceName}Get the service prices from the accounting service
PortalPaymentApigetActiveServicesGET /api/2.0/portal/payment/activeservicesGet the active wallet services
PortalPaymentApigetAiPricesGET /api/2.0/portal/payment/ai-pricesGet AI model prices
PortalPaymentApigetCheckoutSetupUrlGET /api/2.0/portal/payment/checkoutsetupurlGet the checkout setup page URL
PortalPaymentApigetCustomerBalanceGET /api/2.0/portal/payment/customer/balanceGet the customer balance
PortalPaymentApigetCustomerInfoGET /api/2.0/portal/payment/customerinfoGet the customer information
PortalPaymentApigetCustomerMonthlyUsageGET /api/2.0/portal/payment/customer/usage/monthlyGet the customer monthly usage
PortalPaymentApigetCustomerMonthlyUsageReportGET /api/2.0/portal/payment/customer/usage/monthly/reportGet the monthly usage report status
PortalPaymentApigetCustomerOperationsGET /api/2.0/portal/payment/customer/operationsGet the wallet operations
PortalPaymentApigetCustomerOperationsReportGET /api/2.0/portal/payment/customer/operationsreportGet the operations report status
PortalPaymentApigetCustomerServiceUsageGET /api/2.0/portal/payment/customer/usageGet the customer service usage
PortalPaymentApigetCustomerServiceUsageReportGET /api/2.0/portal/payment/customer/usage/reportGet the service usage report status
PortalPaymentApigetPaymentAccountGET /api/2.0/portal/payment/accountGet the billing account page
PortalPaymentApigetPaymentCurrenciesGET /api/2.0/portal/payment/currenciesGet the billing currencies
PortalPaymentApigetPaymentQuotasGET /api/2.0/portal/payment/quotasGet the purchasable quotas
PortalPaymentApigetPaymentUrlPUT /api/2.0/portal/payment/urlGet the payment page URL
PortalPaymentApigetPortalPricesGET /api/2.0/portal/payment/pricesGet the product prices
PortalPaymentApigetQuotaPaymentInformationGET /api/2.0/portal/payment/quotaGet the current plan and limits
PortalPaymentApigetRestrictedAiModelsGET /api/2.0/portal/payment/ai-model/restrictionsGet restricted AI models
PortalPaymentApigetSubscriptionBalanceInfoGET /api/2.0/portal/payment/subscription/balanceGet the subscription balance information
PortalPaymentApigetTenantWalletServiceSettingsGET /api/2.0/portal/payment/servicessettingsGet the wallet service settings
PortalPaymentApigetTenantWalletSettingsGET /api/2.0/portal/payment/topupsettingsGet the auto top-up settings
PortalPaymentApigetWalletServiceGET /api/2.0/portal/payment/walletserviceGet a wallet service
PortalPaymentApigetWalletServicesGET /api/2.0/portal/payment/walletservicesGet wallet services
PortalPaymentApimoveSubscriptionToWalletPOST /api/2.0/portal/payment/subscription/movetowalletMove the subscription to the wallet
PortalPaymentApisendPaymentRequestPOST /api/2.0/portal/payment/requestContact the sales team
PortalPaymentApisetRestrictedAiModelsPUT /api/2.0/portal/payment/ai-model/restrictionsSet restricted AI models
PortalPaymentApisetTenantWalletSettingsPOST /api/2.0/portal/payment/topupsettingsSet the auto top-up settings
PortalPaymentApiterminateCustomerMonthlyUsageReportDELETE /api/2.0/portal/payment/customer/usage/monthly/reportTerminate the monthly usage report
PortalPaymentApiterminateCustomerOperationsReportDELETE /api/2.0/portal/payment/customer/operationsreportTerminate the operations report
PortalPaymentApiterminateCustomerServiceUsageReportDELETE /api/2.0/portal/payment/customer/usage/reportTerminate the service usage report
PortalPaymentApitopUpDepositPOST /api/2.0/portal/payment/depositTop up the wallet
PortalPaymentApiupdatePaymentPUT /api/2.0/portal/payment/updateChange the subscription quantity
PortalPaymentApiupdateWalletPaymentPUT /api/2.0/portal/payment/updatewalletChange a wallet service quantity
PortalQuotaApigetPortalQuotaGET /api/2.0/portal/quotaGet the portal quota
PortalQuotaApigetPortalTariffGET /api/2.0/portal/tariffGet the portal tariff
PortalQuotaApigetPortalUsedSpaceGET /api/2.0/portal/usedspaceGet the portal used space
PortalQuotaApigetRightQuotaGET /api/2.0/portal/quota/rightGet the recommended quota
PortalQuotaApigetUpcomingPaymentsGET /api/2.0/portal/tariff/upcomingGet upcoming payments
PortalSettingsApicontinuePortalPUT /api/2.0/portal/continueRestore a portal
PortalSettingsApideletePortalDELETE /api/2.0/portal/deleteDelete a portal
PortalSettingsApigetPortalInformationGET /api/2.0/portalGet portal information
PortalSettingsApigetPortalPathGET /api/2.0/portal/pathGet a path to the portal
PortalSettingsApisendDeleteInstructionsPOST /api/2.0/portal/deleteSend removal instructions
PortalSettingsApisendSuspendInstructionsPOST /api/2.0/portal/suspendSend suspension instructions
PortalSettingsApisuspendPortalPUT /api/2.0/portal/suspendDeactivate a portal
PortalUsersApicreateInvitationLinkPOST /api/2.0/portal/users/invitationlinkCreate an invitation link
PortalUsersApideleteInvitationLinkDELETE /api/2.0/portal/users/invitationlinkDelete an invitation link
PortalUsersApigetInvitationLinkGET /api/2.0/portal/users/invite/{employeeType}Get a legacy invitation link
PortalUsersApigetInvitationLinkByEmployeeTypeGET /api/2.0/portal/users/invitationlink/{employeeType}Get an invitation link by role
PortalUsersApigetPortalUsersCountGET /api/2.0/portal/userscountGet a number of portal users
PortalUsersApigetUserByIdGET /api/2.0/portal/users/{userID}Get a portal user
PortalUsersApimarkGiftMessageAsReadPOST /api/2.0/portal/present/markMark a gift message as read
PortalUsersApisendCongratulationsPOST /api/2.0/portal/sendcongratulationsSend congratulations
PortalUsersApiupdateInvitationLinkPUT /api/2.0/portal/users/invitationlinkUpdate an invitation link
SecurityAccessToDevToolsApisetTenantDevToolsAccessSettingsPOST /api/2.0/settings/devtoolsaccessSet the Developer Tools access settings
SecurityActiveConnectionsApigetAllActiveConnectionsGET /api/2.0/security/activeconnectionsGet active connections
SecurityActiveConnectionsApilogOutActiveConnectionPUT /api/2.0/security/activeconnections/logout/{loginEventId}Log out one connection
SecurityActiveConnectionsApilogOutAllActiveConnectionsChangePasswordPUT /api/2.0/security/activeconnections/logoutallchangepasswordLog out and reset password
SecurityActiveConnectionsApilogOutAllActiveConnectionsForUserPUT /api/2.0/security/activeconnections/logoutall/{userId}Log out a user everywhere
SecurityActiveConnectionsApilogOutAllExceptThisConnectionPUT /api/2.0/security/activeconnections/logoutallexceptthisLog out other connections
SecurityAuditTrailDataApicreateAuditTrailReportPOST /api/2.0/security/audit/events/reportStart audit trail report
SecurityAuditTrailDataApigetAuditEventsByFilterGET /api/2.0/security/audit/events/filterGet filtered audit events
SecurityAuditTrailDataApigetAuditSettingsGET /api/2.0/security/audit/settings/lifetimeGet audit lifetime settings
SecurityAuditTrailDataApigetAuditTrailMappersGET /api/2.0/security/audit/mappersGet audit trail mappers
SecurityAuditTrailDataApigetAuditTrailReportGET /api/2.0/security/audit/events/reportGet audit trail report status
SecurityAuditTrailDataApigetAuditTrailTypesGET /api/2.0/security/audit/typesGet audit trail types
SecurityAuditTrailDataApigetLastAuditEventsGET /api/2.0/security/audit/events/lastGet recent audit events
SecurityAuditTrailDataApisetAuditSettingsPOST /api/2.0/security/audit/settings/lifetimeSet audit lifetime settings
SecurityAuditTrailDataApiterminateAuditTrailReportDELETE /api/2.0/security/audit/events/reportTerminate audit trail report
SecurityBannersVisibilityApisetTenantBannerSettingsPOST /api/2.0/settings/bannerSet the banners visibility
SecurityCSPApiconfigureCspPOST /api/2.0/security/cspConfigure CSP settings
SecurityCSPApigetCspSettingsGET /api/2.0/security/cspGet CSP settings
SecurityFirebaseApidocRegisterPusnNotificationDevicePOST /api/2.0/settings/push/docregisterdeviceRegister a push device
SecurityFirebaseApisubscribeDocumentsPushNotificationPUT /api/2.0/settings/push/docsubscribeSet push subscription
SecurityLoginHistoryApicreateLoginHistoryReportPOST /api/2.0/security/audit/login/reportStart login history report
SecurityLoginHistoryApigetLastLoginEventsGET /api/2.0/security/audit/login/lastGet recent login events
SecurityLoginHistoryApigetLoginEventsByFilterGET /api/2.0/security/audit/login/filterGet filtered login events
SecurityLoginHistoryApigetLoginHistoryReportGET /api/2.0/security/audit/login/reportGet login history report status
SecurityLoginHistoryApiterminateLoginHistoryReportDELETE /api/2.0/security/audit/login/reportTerminate login history report
SecurityOAuth2ApigenerateJwtTokenGET /api/2.0/security/oauth2/tokenGenerate JWT token
SecuritySMTPSettingsApigetSmtpOperationStatusGET /api/2.0/smtpsettings/smtp/test/statusGet SMTP test status
SecuritySMTPSettingsApigetSmtpSettingsGET /api/2.0/smtpsettings/smtpGet SMTP settings
SecuritySMTPSettingsApiresetSmtpSettingsDELETE /api/2.0/smtpsettings/smtpReset SMTP settings
SecuritySMTPSettingsApisaveSmtpSettingsPOST /api/2.0/smtpsettings/smtpSave SMTP settings
SecuritySMTPSettingsApitestSmtpSettingsGET /api/2.0/smtpsettings/smtp/testTest SMTP settings
SettingsAccessToDevToolsApigetTenantAccessDevToolsSettingsGET /api/2.0/settings/devtoolsaccessGet the Developer Tools access settings
SettingsAuthorizationApigetAuthServicesGET /api/2.0/settings/authserviceGet the authorization services
SettingsAuthorizationApisaveAuthKeysPOST /api/2.0/settings/authserviceSave the authorization keys
SettingsAuthorizationApitestExternalDatabaseConnectionPOST /api/2.0/settings/authservice/externaldb/testTest external database connection
SettingsBannersVisibilityApigetTenantBannerSettingsGET /api/2.0/settings/bannerGet the banners visibility
SettingsCommonSettingsApicloseAdminHelperPUT /api/2.0/settings/closeadminhelperClose the admin helper
SettingsCommonSettingsApicompleteWizardPUT /api/2.0/settings/wizard/completeComplete the Wizard settings
SettingsCommonSettingsApiconfigureDeepLinkPOST /api/2.0/settings/deeplinkConfigure the deep link settings
SettingsCommonSettingsApideletePortalColorThemeDELETE /api/2.0/settings/colorthemeDelete a color theme
SettingsCommonSettingsApigetDeepLinkSettingsGET /api/2.0/settings/deeplinkGet the deep link settings
SettingsCommonSettingsApigetPaymentSettingsGET /api/2.0/settings/paymentGet the payment settings
SettingsCommonSettingsApigetPortalColorThemeGET /api/2.0/settings/colorthemeGet a color theme
SettingsCommonSettingsApigetPortalHostnameGET /api/2.0/settings/machineGet the portal hostname
SettingsCommonSettingsApigetPortalLogoGET /api/2.0/settings/logoGet a portal logo
SettingsCommonSettingsApigetPortalSettingsGET /api/2.0/settingsGet the portal settings
SettingsCommonSettingsApigetSocketSettingsGET /api/2.0/settings/socketGet the socket settings
SettingsCommonSettingsApigetSupportedCulturesGET /api/2.0/settings/culturesGet supported languages
SettingsCommonSettingsApigetTenantAiAccessSettingsGET /api/2.0/settings/ai-accessGet the AI access settings
SettingsCommonSettingsApigetTenantUserInvitationSettingsGET /api/2.0/settings/invitationsettingsGet the user invitation settings
SettingsCommonSettingsApigetTimeZonesGET /api/2.0/settings/timezonesGet time zones
SettingsCommonSettingsApisaveDefaultFolderPUT /api/2.0/settings/defaultfolderSet the default folder
SettingsCommonSettingsApisaveDnsSettingsPUT /api/2.0/settings/dnsSave the DNS settings
SettingsCommonSettingsApisaveMailDomainSettingsPOST /api/2.0/settings/maildomainsettingsSave the mail domain settings
SettingsCommonSettingsApisavePortalColorThemePUT /api/2.0/settings/colorthemeSave a color theme
SettingsCommonSettingsApisetTenantAiAccessSettingsPOST /api/2.0/settings/ai-accessSet the AI access settings
SettingsCommonSettingsApiupdateEmailActivationSettingsPUT /api/2.0/settings/emailactivationUpdate the email activation settings
SettingsCommonSettingsApiupdateInvitationSettingsPUT /api/2.0/settings/invitationsettingsUpdate the user invitation settings
SettingsCookiesApigetCookieSettingsGET /api/2.0/settings/cookiesettingsGet the cookie lifetime settings
SettingsCookiesApiupdateCookieSettingsPUT /api/2.0/settings/cookiesettingsUpdate the cookie lifetime settings
SettingsDocsCloudApicalculateDevPackPOST /api/2.0/settings/docscloud/calculatedevpackCalculate the Docs Connect Dev Pack switch cost
SettingsDocsCloudApicreateTenantQuotaReportPOST /api/2.0/settings/docscloud/tenant/quota/reportStart the Docs Connect quota report
SettingsDocsCloudApigetTenantGET /api/2.0/settings/docscloud/tenantGet the Docs Connect tenant
SettingsDocsCloudApigetTenantConfigGET /api/2.0/settings/docscloud/tenant/configGet the Docs Connect tenant configuration
SettingsDocsCloudApigetTenantInfoGET /api/2.0/settings/docscloud/tenant/infoGet the Docs Connect tenant information
SettingsDocsCloudApigetTenantQuotaGET /api/2.0/settings/docscloud/tenant/quotaGet the Docs Connect tenant quota
SettingsDocsCloudApigetTenantQuotaReportGET /api/2.0/settings/docscloud/tenant/quota/reportGet the Docs Connect quota report status
SettingsDocsCloudApigetTenantUsageGET /api/2.0/settings/docscloud/tenant/usageGet the Docs Connect tenant usage
SettingsDocsCloudApistartDocsCloudTrialPOST /api/2.0/settings/docscloud/trialStart the Docs Connect trial
SettingsDocsCloudApiswitchToDevPackPOST /api/2.0/settings/docscloud/switchtodevpackSwitch Docs Connect to Docs Connect Dev Pack
SettingsDocsCloudApiterminateTenantQuotaReportDELETE /api/2.0/settings/docscloud/tenant/quota/reportTerminate the Docs Connect quota report
SettingsDocsCloudApiupdateTenantConfigPUT /api/2.0/settings/docscloud/tenant/configUpdate the Docs Connect tenant configuration
SettingsEncryptionApigetStorageEncryptionProgressGET /api/2.0/settings/encryption/progressGet the storage encryption progress
SettingsEncryptionApigetStorageEncryptionSettingsGET /api/2.0/settings/encryption/settingsGet the storage encryption settings
SettingsEncryptionApistartStorageEncryptionPOST /api/2.0/settings/encryption/startStart the storage encryption
SettingsGreetingSettingsApigetGreetingSettingsGET /api/2.0/settings/greetingsettingsGet greeting settings
SettingsGreetingSettingsApigetIsDefaultGreetingSettingsGET /api/2.0/settings/greetingsettings/isdefaultCheck the default greeting settings
SettingsGreetingSettingsApirestoreGreetingSettingsPOST /api/2.0/settings/greetingsettings/restoreRestore the greeting settings
SettingsGreetingSettingsApisaveGreetingSettingsPOST /api/2.0/settings/greetingsettingsSave the greeting settings
SettingsIPRestrictionsApigetIpRestrictionsGET /api/2.0/settings/iprestrictionsGet IP restrictions
SettingsIPRestrictionsApireadIpRestrictionsSettingsGET /api/2.0/settings/iprestrictions/settingsGet IP restriction settings
SettingsIPRestrictionsApisaveIpRestrictionsPUT /api/2.0/settings/iprestrictionsSave IP restrictions
SettingsIPRestrictionsApiupdateIpRestrictionsSettingsPUT /api/2.0/settings/iprestrictions/settingsUpdate IP restriction settings
SettingsLicenseApiacceptLicensePOST /api/2.0/settings/license/acceptActivate a license
SettingsLicenseApigetIsLicenseRequiredGET /api/2.0/settings/license/requiredCheck if a license is required
SettingsLicenseApirefreshLicenseGET /api/2.0/settings/license/refreshRefresh the license
SettingsLicenseApiuploadLicensePOST /api/2.0/settings/licenseUpload a license
SettingsLoginSettingsApigetLoginSettingsGET /api/2.0/settings/security/loginsettingsGet login settings
SettingsLoginSettingsApisetDefaultLoginSettingsDELETE /api/2.0/settings/security/loginsettingsReset login settings
SettingsLoginSettingsApiupdateLoginSettingsPUT /api/2.0/settings/security/loginsettingsUpdate login settings
SettingsMessagesApienableAdminMessageSettingsPOST /api/2.0/settings/messagesettingsEnable or disable administrator messages
SettingsMessagesApisendAdminMailPOST /api/2.0/settings/sendadmmailSend a message to the administrator
SettingsMessagesApisendJoinInviteMailPOST /api/2.0/settings/sendjoininviteSend an invitation email
SettingsNotificationsApigetNotificationChannelsGET /api/2.0/settings/notification/channelsGet notification channels
SettingsNotificationsApigetNotificationSettingsGET /api/2.0/settings/notification/{type}Check notification availability
SettingsNotificationsApigetRoomsNotificationSettingsGET /api/2.0/settings/notification/roomsGet muted rooms
SettingsNotificationsApisetNotificationSettingsPOST /api/2.0/settings/notificationSet notification status
SettingsNotificationsApisetRoomsNotificationStatusPOST /api/2.0/settings/notification/roomsMute or unmute a room
SettingsOwnerApisendOwnerChangeInstructionsPOST /api/2.0/settings/ownerStart the portal owner change
SettingsOwnerApiupdatePortalOwnerPUT /api/2.0/settings/ownerConfirm the portal owner change
SettingsQuotaApigetUserQuotaSettingsGET /api/2.0/settings/userquotasettingsGet the user quota settings
SettingsQuotaApisaveAiAgentQuotaSettingsPOST /api/2.0/settings/aiagentquotasettingsSave the AI Agent quota settings
SettingsQuotaApisaveRoomQuotaSettingsPOST /api/2.0/settings/roomquotasettingsSave the room quota settings
SettingsQuotaApisetTenantQuotaSettingsPUT /api/2.0/settings/tenantquotasettingsSave the tenant quota settings
SettingsRebrandingApideleteAdditionalWhiteLabelSettingsDELETE /api/2.0/settings/rebranding/additionalDelete the additional white label settings
SettingsRebrandingApideleteCompanyWhiteLabelSettingsDELETE /api/2.0/settings/rebranding/companyDelete the company white label settings
SettingsRebrandingApigetAdditionalWhiteLabelSettingsGET /api/2.0/settings/rebranding/additionalGet the additional white label settings
SettingsRebrandingApigetCompanyWhiteLabelSettingsGET /api/2.0/settings/rebranding/companyGet the company white label settings
SettingsRebrandingApigetEnableWhitelabelGET /api/2.0/settings/enablewhitelabelCheck the white label availability
SettingsRebrandingApigetIsDefaultWhiteLabelLogoTextGET /api/2.0/settings/whitelabel/logotext/isdefaultCheck the default logo text
SettingsRebrandingApigetIsDefaultWhiteLabelLogosGET /api/2.0/settings/whitelabel/logos/isdefaultCheck the default white label logos
SettingsRebrandingApigetLicensorDataGET /api/2.0/settings/companywhitelabelGet the licensor data
SettingsRebrandingApigetWhiteLabelLogoTextGET /api/2.0/settings/whitelabel/logotextGet the white label logo text
SettingsRebrandingApigetWhiteLabelLogosGET /api/2.0/settings/whitelabel/logosGet the white label logos
SettingsRebrandingApirestoreWhiteLabelLogoTextPUT /api/2.0/settings/whitelabel/logotext/restoreRestore the white label logo text
SettingsRebrandingApirestoreWhiteLabelLogosPUT /api/2.0/settings/whitelabel/logos/restoreRestore the white label logos
SettingsRebrandingApisaveAdditionalWhiteLabelSettingsPOST /api/2.0/settings/rebranding/additionalSave the additional white label settings
SettingsRebrandingApisaveCompanyWhiteLabelSettingsPOST /api/2.0/settings/rebranding/companySave the company white label settings
SettingsRebrandingApisaveWhiteLabelLogoTextPOST /api/2.0/settings/whitelabel/logotext/saveSave the white label logo text
SettingsRebrandingApisaveWhiteLabelSettingsPOST /api/2.0/settings/whitelabel/logos/saveSave the white label logos
SettingsRebrandingApisaveWhiteLabelSettingsFromFilesPOST /api/2.0/settings/whitelabel/logos/savefromfilesSave the logos from files
SettingsSSOApigetDefaultSsoSettingsV2GET /api/2.0/settings/ssov2/defaultGet the default SSO settings
SettingsSSOApigetSsoSettingsV2GET /api/2.0/settings/ssov2Get the SSO settings
SettingsSSOApigetSsoSettingsV2ConstantsGET /api/2.0/settings/ssov2/constantsGet the SSO settings constants
SettingsSSOApiresetSsoSettingsV2DELETE /api/2.0/settings/ssov2Reset the SSO settings
SettingsSSOApisaveSsoSettingsV2POST /api/2.0/settings/ssov2Save the SSO settings
SettingsSecurityApigetEnabledModulesGET /api/2.0/settings/security/modulesGet enabled modules
SettingsSecurityApigetIsProductAdministratorGET /api/2.0/settings/security/administratorCheck product administrator
SettingsSecurityApigetPasswordSettingsGET /api/2.0/settings/security/passwordGet password settings
SettingsSecurityApigetProductAdministratorsGET /api/2.0/settings/security/administrator/{productid}Get product administrators
SettingsSecurityApigetWebItemSecurityInfoGET /api/2.0/settings/security/{id}Check module availability
SettingsSecurityApigetWebItemSettingsSecurityInfoGET /api/2.0/settings/securityGet module access settings
SettingsSecurityApisetAccessToWebItemsPUT /api/2.0/settings/security/accessSet access to modules in bulk
SettingsSecurityApisetProductAdministratorPUT /api/2.0/settings/security/administratorSet product administrator
SettingsSecurityApisetWebItemSecurityPUT /api/2.0/settings/securitySet module access
SettingsSecurityApiupdatePasswordSettingsPUT /api/2.0/settings/security/passwordUpdate password settings
SettingsStatisticsApigetSpaceUsageStatisticsGET /api/2.0/settings/statistics/spaceusage/{id}Get the space usage statistics
SettingsStorageApigetAllBackupStoragesGET /api/2.0/settings/storage/backupGet the backup storages
SettingsStorageApigetAllCdnStoragesGET /api/2.0/settings/storage/cdnGet the CDN storages
SettingsStorageApigetAllStoragesGET /api/2.0/settings/storageGet the portal storages
SettingsStorageApigetAmazonS3RegionsGET /api/2.0/settings/storage/s3/regionsGet the Amazon S3 regions
SettingsStorageApigetStorageProgressGET /api/2.0/settings/storage/progressGet the storage migration progress
SettingsStorageApiresetCdnToDefaultDELETE /api/2.0/settings/storage/cdnReset the CDN storage settings
SettingsStorageApiresetStorageToDefaultDELETE /api/2.0/settings/storageReset the storage settings
SettingsStorageApiupdateCdnStoragePUT /api/2.0/settings/storage/cdnUpdate the CDN storage
SettingsStorageApiupdateStoragePUT /api/2.0/settings/storageSwitch the portal storage
SettingsTFASettingsApigetTfaAppCodesGET /api/2.0/settings/tfaappcodesGet the TFA backup codes
SettingsTFASettingsApigetTfaConfirmDataGET /api/2.0/settings/tfaapp/confirmGet TFA confirmation data
SettingsTFASettingsApigetTfaSettingsGET /api/2.0/settings/tfaappGet the TFA settings
SettingsTFASettingsApitfaAppGenerateSetupCodeGET /api/2.0/settings/tfaapp/setupGenerate the TFA setup code
SettingsTFASettingsApitfaValidateAuthCodePOST /api/2.0/settings/tfaapp/validateValidate the TFA code
SettingsTFASettingsApiunlinkTfaAppPUT /api/2.0/settings/tfaappnewappUnlink the TFA application
SettingsTFASettingsApiupdateTfaAppCodesPUT /api/2.0/settings/tfaappnewcodesRegenerate the TFA backup codes
SettingsTFASettingsApiupdateTfaSettingsPUT /api/2.0/settings/tfaappUpdate the TFA settings
SettingsTFASettingsApiupdateTfaSettingsLinkPUT /api/2.0/settings/tfaappwithlinkUpdate TFA settings with a link
SettingsTelegramApicheckTelegramGET /api/2.0/settings/telegram/checkCheck the Telegram connection
SettingsTelegramApilinkTelegramGET /api/2.0/settings/telegram/linkGet the Telegram link
SettingsTelegramApiunlinkTelegramDELETE /api/2.0/settings/telegram/linkUnlink Telegram
SettingsWebhooksApicreateWebhookPOST /api/2.0/settings/webhookCreate a webhook
SettingsWebhooksApienableWebhookPUT /api/2.0/settings/webhook/enableSwitch a webhook on or off
SettingsWebhooksApigetTenantWebhooksGET /api/2.0/settings/webhookGet the portal webhooks
SettingsWebhooksApigetWebhookTriggersGET /api/2.0/settings/webhook/triggersGet the webhook triggers
SettingsWebhooksApigetWebhooksLogsGET /api/2.0/settings/webhooks/logGet the webhook delivery log
SettingsWebhooksApiremoveWebhookDELETE /api/2.0/settings/webhook/{id}Remove a webhook
SettingsWebhooksApiretryWebhookPUT /api/2.0/settings/webhook/{id}/retryRetry a webhook delivery
SettingsWebhooksApiretryWebhooksPUT /api/2.0/settings/webhook/retryRetry webhook deliveries
SettingsWebhooksApiupdateWebhookPUT /api/2.0/settings/webhookUpdate a webhook
SettingsWebpluginsApiaddWebPluginFromFilePOST /api/2.0/settings/webpluginsAdd a web plugin
SettingsWebpluginsApideleteWebPluginDELETE /api/2.0/settings/webplugins/{name}Delete a web plugin
SettingsWebpluginsApigetWebPluginGET /api/2.0/settings/webplugins/{name}Get a web plugin by name
SettingsWebpluginsApigetWebPluginsGET /api/2.0/settings/webpluginsGet web plugins
SettingsWebpluginsApiupdateWebPluginPUT /api/2.0/settings/webplugins/{name}Update a web plugin
ThirdPartyApigetThirdPartyCodeGET /api/2.0/thirdparty/{provider}Get provider consent URL

AppsApi​

get​

AppWrapper get(id)

GET /api/2.0/apps/{id}

Get an app

Returns one portal application by its identifier - one of the feature modules the portal can turn on, such as ai-rooms or docs-cloud - with the enabled state and the settings document stored for the current portal. The identifier must be an application declared in the installation configuration: take it from GET api/2.0/apps, because an unknown identifier is rejected instead of creating anything. Any authenticated portal member may read it. The call is read-only and idempotent. The result carries the identifier, the enabled flag of the current portal and the settings JSON document, which is empty while the portal has never saved settings for this application. An application that is not configured on this installation fails with 404, so this is also the way to find out whether an application exists here at all. Use GET api/2.0/apps to read all applications in one call, or GET api/2.0/apps/{id}/settings when only the settings document is needed.

Parameters​

NameInTypeDescriptionNotes
idpathStringThe application to read, by the identifier GET api/2.0/apps reports - one of the feature modules the portal can turn on, such as ai-room or docs-cloud. An identifier not declared in the installation configuration answers 404, which is also how a caller learns that an application does not exist here.[required] [example: ai-room]

Responses​

Status codeDescriptionTypeResponse headers
200The application with the enabled state and the settings of the current portalAppWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
404No application with this identifier is configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AppWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAll​

AppArrayWrapper getAll()

GET /api/2.0/apps

Get all apps

Returns every portal application available on this installation, each with the state it has for the current portal: the feature modules the portal can turn on and configure, such as ai-rooms or docs-cloud. The set of applications and their initial enabled state come from the installation configuration and cannot be changed through the API; only the enabled flag and the settings document are stored per portal, by PUT api/2.0/apps/{id}/enabled and PUT api/2.0/apps/{id}/settings. Any authenticated portal member may read the list. The call is read-only and idempotent. The list follows the order of the configuration, and every item carries the application identifier, whether the application is enabled for the current portal, and the settings JSON document saved for it, which is empty while the portal has never saved one. An empty list means that no applications are configured on this installation, not that they are all disabled. There is neither paging nor filtering here: to read a single application use GET api/2.0/apps/{id}.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The portal applications configured on this installation, each with the enabled state and the settings of the current portalAppArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AppArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSettings​

UnknownNullableWrapper getSettings(id)

GET /api/2.0/apps/{id}/settings

Get app settings

Returns only the settings document of one portal application, such as ai-rooms or docs-cloud: the JSON that the current portal has saved for it through PUT api/2.0/apps/{id}/settings, with no wrapper around it. The identifier must be an application declared in the installation configuration, as listed by GET api/2.0/apps. Any authenticated portal member may read it. The call is read-only and idempotent. The document comes back exactly as it was saved: its shape is defined by the application itself and is not validated by the portal, and an empty result means that the portal has never saved settings for this application, so the application uses its own defaults. The enabled state is not part of the answer: read it from GET api/2.0/apps/{id}.

Parameters​

NameInTypeDescriptionNotes
idpathStringThe application to read, by the identifier GET api/2.0/apps reports - one of the feature modules the portal can turn on, such as ai-room or docs-cloud. An identifier not declared in the installation configuration answers 404, which is also how a caller learns that an application does not exist here.[required] [example: ai-room]

Responses​

Status codeDescriptionTypeResponse headers
200The settings document saved for the application, or an empty result if the portal has never saved oneUnknownNullableWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
404No application with this identifier is configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

UnknownNullableWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

setEnabled​

AppWrapper setEnabled(id, SetAppEnabledBody)

PUT /api/2.0/apps/{id}/enabled

Enable or disable an app

Turns one portal application on or off for the current portal, and notifies the clients connected to the portal so that they can show or hide it without being reloaded. The identifier must be an application declared in the installation configuration, as listed by GET api/2.0/apps. The caller must be a portal administrator allowed to edit the portal settings. The call is mutating and idempotent: it stores the flag for this portal, overriding the default that the configuration gives the application, and repeating it with the same value changes nothing. Disabling an application does not delete its settings document, which stays saved and applies again as soon as the application is enabled. The response is the application in its new state, including that settings document. Only the enabled flag is affected here: to change the settings document use PUT api/2.0/apps/{id}/settings.

Parameters​

NameInTypeDescriptionNotes
idpathStringThe application to switch, by the identifier GET api/2.0/apps reports. It has to be an application declared in the installation configuration; an unknown identifier answers 404 rather than creating anything.[required] [example: ai-room]
SetAppEnabledBodybodySetAppEnabledBodyThe new state of the application. Only the enabled flag travels here; the settings document is changed through PUT api/2.0/apps/{id}/settings.[required]

Responses​

Status codeDescriptionTypeResponse headers
200The application in its new state, with the saved settings document left untouchedAppWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not allowed to edit the portal settings--
404No application with this identifier is configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AppWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setSettings​

AppWrapper setSettings(id, SetAppSettingsBody)

PUT /api/2.0/apps/{id}/settings

Save app settings

Stores the application-specific settings document of one portal application for the current portal. The identifier must be an application declared in the installation configuration, as listed by GET api/2.0/apps. The caller must be a portal administrator allowed to edit the portal settings. The call is mutating and idempotent, and it replaces the whole document instead of merging into it: read the current one with GET api/2.0/apps/{id}/settings, change it and send it back complete, or send null to drop the saved document and let the application fall back to its own defaults. Any valid JSON value is accepted, since the content is stored as it is and is interpreted by the application rather than by the portal, while a body that is not valid JSON fails with 400 and stores nothing. The response is the application in its new state, with the stored document echoed back. Unlike PUT api/2.0/apps/{id}/enabled, this operation sends no notification to the connected clients, which pick the new settings up on their next read.

Parameters​

NameInTypeDescriptionNotes
idpathStringThe application whose configuration is stored, by the identifier GET api/2.0/apps reports. An identifier not declared in the installation configuration answers 404.[required] [example: ai-room]
SetAppSettingsBodybodySetAppSettingsBodyThe configuration to store for this portal, replacing whatever was stored before.[required]

Responses​

Status codeDescriptionTypeResponse headers
200The application in its new state, with the stored settings documentAppWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request body is not a valid JSON document, so no settings are stored--
403The caller is not allowed to edit the portal settings--
404No application with this identifier is configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AppWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

AuthenticationApi​

authenticateMe​

AuthenticationTokenWrapper authenticateMe(AuthRequestsDto)

POST /api/2.0/authentication

Authenticate a user

Signs a user in to the current portal and either issues the authentication token or reports which second factor is still missing. Credentials go in the body as userName with password or passwordHash, as the key of a confirmation link in confirmData, or as a third-party account (provider with accessToken, or serializedProfile), which only a standalone installation or a tariff with third-party sign-in allows. Open to unauthenticated callers, mutating and not idempotent: it writes a login event, sets the portal cookies and counts every failure against the brute-force limit. When a second factor is required for this user the answer carries no token but sms with the masked phone number - or a confirmUrl pointing at POST api/2.0/authentication/setphone while no number is activated yet - or tfa with the setup key while the authenticator app is not connected; submit the code to POST api/2.0/authentication/{code} to finish such a sign-in. Otherwise the answer carries token for the Authorization header and expires, which is omitted when session=true ties the token to the browser session. An unknown user fails with 404, rejected credentials with 401, a disabled or blocked user with 403.

Parameters​

NameInTypeDescriptionNotes
AuthRequestsDtobodyAuthRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The authentication token, or the second factor that has to be passed before a token is issuedAuthenticationTokenWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request body could not be validated, for example confirmData.email is not an email address--
401The password, the confirmation key or the third-party profile was rejected, or third-party sign-in is not allowed for this portal--
403The user is disabled, or too many failed attempts and CAPTCHA failures have blocked further sign-ins for these credentials--
404No user of this portal matches the credentials in the request body--
429The portal rate limiter rejected the call - retry after the interval in the Retry-After headerErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuthenticationTokenWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

authenticateMeFromBodyWithCode​

AuthenticationTokenWrapper authenticateMeFromBodyWithCode(code, AuthWithCodeRequestsDto)

POST /api/2.0/authentication/{code}

Authenticate a user by code

Finishes a two-factor sign-in: checks the one-time code and, when it matches, issues the authentication token. Call it only after POST api/2.0/authentication answered with sms or tfa set, and repeat the same credentials in the body next to code - the code alone does not identify the user. The code comes from the SMS the portal sent, which POST api/2.0/authentication/sendsms resends, or from the authenticator app; whichever second factor the portal has enabled for this user is the one checked here. Open to unauthenticated callers, mutating and not idempotent: a code is single-use, the sign-in is written to the login history, and the first code accepted from an authenticator app also connects that app to the user. The answer carries token for the Authorization header, expires unless session=true tied the token to the browser session, and either sms with the masked phone number or tfa. A wrong, empty or expired code fails with 401 and counts against the brute-force limit, which then refuses further attempts with 403.

Parameters​

NameInTypeDescriptionNotes
codepathStringThe two-factor authentication code. Send the same value as the code of the request body, which is the one the handler reads.[required]
AuthWithCodeRequestsDtobodyAuthWithCodeRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The authentication token to send in the Authorization header, together with the second factor that was acceptedAuthenticationTokenWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request body could not be validated, for example confirmData.email is not an email address--
401The credentials were rejected, or the two-factor code is wrong, empty or expired--
403The user is disabled, or too many failed attempts have blocked further sign-ins for these credentials--
404No user of this portal matches the credentials in the request body--
429The portal rate limiter rejected the call - retry after the interval in the Retry-After headerErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuthenticationTokenWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

checkConfirm​

ConfirmWrapper checkConfirm(EmailValidationKeyModel)

POST /api/2.0/authentication/confirm

Check a confirmation link

Checks the key of a confirmation link that the portal sent by email and reports whether the action behind that link can still be carried out - an employee invitation, phone activation, a password change, portal removal and so on. Take key and type from the query string of the link; when key is left empty, the key saved in the confirmation cookie of the same type is used instead. Open to unauthenticated callers and read-only: it neither accepts the invitation nor signs anyone in. result is Ok when the link may be used, Invalid when the key does not match the type or the email, Expired when it is too old, and TariffLimit, UserExisted, UserExcluded or QuotaFailed when the key is sound but the invitation behind it cannot be accepted. Only Ok should be followed by the operation that performs the action - POST api/2.0/people with fromInviteLink for an invitation, POST api/2.0/authentication with confirmData for a sign-in link - and for an invitation to a room the answer also carries the identifier and the title of that room.

Parameters​

NameInTypeDescriptionNotes
EmailValidationKeyModelbodyEmailValidationKeyModel[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Whether the confirmation link may be used, with the room and the email it was issued for when it is an invitationConfirmWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The portal's IP restrictions do not allow this address to check an invitation link--
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ConfirmWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getIsAuthentificated​

BooleanWrapper getIsAuthentificated()

GET /api/2.0/authentication

Check authentication

Reports whether the credentials that came with this very request identify a signed-in user of the current portal - the authentication cookie, or the token in the Authorization header. Nothing has to be called first: the operation is open to unauthenticated callers, who simply get false, it is read-only and idempotent, and it answers even while the portal's payment has lapsed. The result is a bare boolean that carries no reason, so false covers a missing, malformed, expired and revoked token alike; the way to recover from it is to sign in again with POST api/2.0/authentication. It says nothing about who the caller is or how long the session still lasts - read GET api/2.0/people/@self for the profile behind the token.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200true when the request carries a valid token or cookie of an active portal user, false in every other caseBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

logout​

StringWrapper logout()

POST /api/2.0/authentication/logout

Log out

Ends the session the request itself was made with: the login event behind the authentication cookie is closed, the sockets opened for it are disconnected, the portal cookies are cleared and a logout event is written to the login history. Send it with the cookie or token of the session that is to be closed; an anonymous call is accepted and closes nothing. The operation is mutating and idempotent - the same session cannot be closed twice - and it touches only that one session: the other sessions of the same user stay alive and are ended by PUT api/2.0/security/activeconnections/logoutallexceptthis or PUT api/2.0/security/activeconnections/logout/{loginEventId}. The answer is a single logout URL when the user signed in through SSO and the portal has an SLO endpoint configured, and the client has to open that URL to end the session on the identity provider as well; for everyone else it is empty and nothing more is needed.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The single logout URL to open when the user signed in through SSO, or an empty result when no further action is neededStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveMobilePhone​

AuthenticationTokenWrapper saveMobilePhone(MobileRequestsDto)

POST /api/2.0/authentication/setphone

Set a mobile phone

Stores the mobile phone number of a user who is going through phone activation and sends the first SMS authentication code to it. It is reachable only with the phone-activation confirmation link that POST api/2.0/authentication returns in confirmUrl when SMS two-factor is required and the user has no activated number yet: that link authorizes the call in place of an authentication token, and no token is issued here. The operation is mutating and not idempotent - it saves the number as not activated, writes an audit event and sends a message - and an already activated number is not replaced this way, the stored number has to be erased first. The answer carries sms, the masked number and expires, the moment the code stops being accepted. Submit that code to POST api/2.0/authentication/{code}, which signs the user in and marks the number activated, or ask for another one with POST api/2.0/authentication/sendsms.

Parameters​

NameInTypeDescriptionNotes
MobileRequestsDtobodyMobileRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The masked phone number the code was sent to and the moment that code expires - no authentication token yetAuthenticationTokenWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuthenticationTokenWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

sendSmsCode​

AuthenticationTokenWrapper sendSmsCode(AuthRequestsDto)

POST /api/2.0/authentication/sendsms

Send SMS code

Sends a new SMS authentication code to the phone number stored for the user and reports when that code expires. The credentials in the body are checked exactly as by POST api/2.0/authentication, so use this operation to resend the code after that call answered with sms; the user needs SMS two-factor enabled and a phone number already stored, which POST api/2.0/authentication/setphone registers. Open to unauthenticated callers, mutating and not idempotent: every call sends a message, is counted in the portal's SMS usage and spends one of the few codes a number is allowed within the code lifetime (ten minutes by default), after which the call fails until those codes expire. Codes sent earlier stay valid, so a resent code does not invalidate them, and the first one to be accepted invalidates all of them. The answer carries sms, the masked number and expires, and no token - submit the code to POST api/2.0/authentication/{code}.

Parameters​

NameInTypeDescriptionNotes
AuthRequestsDtobodyAuthRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The masked phone number the code was sent to and the moment that code expires - no authentication token yetAuthenticationTokenWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request body could not be validated, for example confirmData.email is not an email address--
401The password, the confirmation key or the third-party profile was rejected--
403The user is disabled, or too many failed attempts have blocked further sign-ins for these credentials--
404No user of this portal matches the credentials in the request body--
429The portal rate limiter rejected the call - retry after the interval in the Retry-After headerErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuthenticationTokenWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

CapabilitiesApi​

getPortalCapabilities​

CapabilitiesWrapper getPortalCapabilities()

GET /api/2.0/capabilities

Get portal capabilities

Returns the sign-in methods this portal offers, which a login client needs before anyone has signed in: LDAP authentication and its domain, the external identity providers to show, the SAML single sign-on URL and its label, and whether the built-in identity server is available. No token is needed and nothing has to be called first - the operation is open to unauthenticated callers, answers even while the portal's payment has lapsed, and is read-only and idempotent. providers holds provider keys such as google or facebook, ordered for the country detected from the caller's IP address and reduced to the ones this installation has configured; pass one of them as provider to POST api/2.0/authentication. An empty providers means external sign-in is off and an empty ssoUrl means single sign-on is off; a capability whose settings cannot be read is reported as disabled rather than failing the call, so a false flag means the method is not offered, not that it is unknown. The answer describes the portal and never a user, and carries none of the configuration behind these methods: an administrator reads that from GET api/2.0/settings/ssov2 and GET api/2.0/settings/authservice.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The sign-in methods the portal offers: LDAP, the external identity providers, single sign-on and the identity server, each with the state it has for this portalCapabilitiesWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CapabilitiesWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

MigrationApi​

cancelMigration​

cancelMigration()

POST /api/2.0/migration/cancel

Cancel migration

Stops the parse pass queued for this portal and deletes the backup uploaded for it - the way back from a wrong archive or a wrong migrator name. Nothing has to be called first and a DocSpace administrator is required; the request is only queued, so the parse ends shortly after the call returns and GET api/2.0/migration/status stops reporting it. The call is destructive for the uploaded data: the whole upload folder is removed and the backup has to be sent to migrationFileUpload.ashx again before a new parse. It is idempotent - cancelling when nothing is running still answers 200 - and it undoes nothing that was already written to the portal. Only the parse stage is stopped, the job whose parseResult.operation is parse: an import started by POST api/2.0/migration/migrate keeps running, and a finished import is discarded with POST api/2.0/migration/clear instead.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The cancellation has been queued; the parse stops and the uploaded backup is deleted. The response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

clearMigration​

clearMigration()

POST /api/2.0/migration/clear

Clear migration

Discards a finished import and deletes the data uploaded for it, freeing the portal for the next one. Call it once GET api/2.0/migration/status reports isCompleted for a job whose parseResult.operation is migration; a DocSpace administrator is required. Only the queued job and the temporary upload folder go - the users, groups and files already imported stay in the portal - so the call destroys migration data alone, and it is idempotent: clearing twice, or with nothing to clear, still answers 200. Like the other write operations here it is only queued, and once it has run GET api/2.0/migration/status returns an empty result and GET api/2.0/migration/logs answers 404, so download the log before calling it. A parse that is still running is not affected - stop that with POST api/2.0/migration/cancel - and POST api/2.0/migration/finish performs the same clean-up itself, which makes this call unnecessary after it.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The clean-up has been queued; the finished import is dropped and the uploaded data deleted. The response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

finishMigration​

finishMigration(FinishDto)

POST /api/2.0/migration/finish

Finish migration

Closes a completed import: it can send every user the import created the activation email they need before they can sign in, and it then discards the job and the data uploaded for it. Call it once GET api/2.0/migration/status reports isCompleted for the import; a DocSpace administrator is required, and with isSendWelcomeEmail set to true the job must still be in the queue, so do not clear it first. That flag decides what happens to the imported people: true mails the activation link to each of them who has not activated their account yet and skips the ones that are already active, false ends the import quietly and leaves inviting them for later. The call writes to the portal and is not idempotent - the emails go out again on every call - while its second half repeats what POST api/2.0/migration/clear does, removing the finished job and the uploaded backup and leaving everything already imported in place. It answers with an empty body, after which GET api/2.0/migration/status returns an empty result and GET api/2.0/migration/logs answers 404, so download the log first.

Parameters​

NameInTypeDescriptionNotes
FinishDtobodyFinishDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The activation emails have been sent if they were asked for and the clean-up has been queued. The response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getMigrationLogs​

getMigrationLogs()

GET /api/2.0/migration/logs

Get migration logs

Downloads the log of the parse or import the portal currently holds - the step-by-step record behind the numbers and the single error message of GET api/2.0/migration/status, and the place where the reason for a skipped user or file is written. The portal has to hold such a job, started by POST api/2.0/migration/init/{migratorName} or POST api/2.0/migration/migrate and not yet removed by POST api/2.0/migration/clear or POST api/2.0/migration/finish, otherwise the call answers 404; a DocSpace administrator is required and the call is read-only and idempotent. The body is not JSON: it is text/plain; charset=UTF-8 sent as an attachment named migration.log, one line per step with the progress it reported. Each job writes its own log, so this always returns the log of the job that GET api/2.0/migration/status describes, and while that job runs the file keeps growing - a call made early returns only the part written so far and may be repeated later for the rest.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The log of the current job as a text/plain attachment named migration.log-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
404The portal holds no parse or import whose log could be returned--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getMigrationStatus​

MigrationStatusWrapper getMigrationStatus()

GET /api/2.0/migration/status

Get migration status

Returns how far the parse or the import queued for this portal has got and, once it stopped, what it produced - the one place where every other operation in this group reports what it did. Any of them may be polled from here as soon as it returns; a DocSpace administrator is required and the call is read-only and idempotent. progress is the share of the job that is done, from 0 to 100, and isCompleted turns true when the job stopped whether it succeeded or not, so read error as well: it stays empty while nothing went wrong and otherwise holds the message that ended the job. parseResult carries what the migrator has read so far - after a parse pass the users, groups and unreadable archives to edit and post to POST api/2.0/migration/migrate, and during an import also successedUsers and failedUsers - and its operation field, parse or migration, tells the two stages apart. The result is empty with status 200 when the portal has no job at all, because none was ever started or because POST api/2.0/migration/clear or POST api/2.0/migration/finish has removed the last one; an empty answer is therefore not an error. Line-by-line detail behind the numbers is in GET api/2.0/migration/logs.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the parse or import queued for the portal, or an empty result when the portal has no jobMigrationStatusWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

MigrationStatusWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

listMigrations​

STRINGArrayWrapper listMigrations()

GET /api/2.0/migration/list

Get available migrators

Lists the source products this installation can import a portal from, as the migrator names every other operation in this group expects. Nothing has to be called first, a DocSpace administrator is required as everywhere here, and the call is read-only and idempotent. The answer is a plain list of names such as GoogleWorkspace, Nextcloud or Workspace, never localized and ordered as the migrators are registered; pass one of them as migratorName to POST api/2.0/migration/init/{migratorName}, where the match ignores case. The list depends on the installation rather than on the portal, so it does not change while the portal runs, and a name that is not in it is not rejected by the operation that takes it - the queued job ends with the failure reported in error of GET api/2.0/migration/status.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The names of the migrators this installation can import from, in registration orderSTRINGArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

STRINGArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

startMigration​

startMigration(MigrationApiInfo)

POST /api/2.0/migration/migrate

Start migration

Starts the import itself: the users, the groups and the files selected in the request body are created on this portal from the backup that the parse pass has read. Run POST api/2.0/migration/init/{migratorName} first and wait for isCompleted in GET api/2.0/migration/status, then send parseResult from that answer back here with shouldImport set on the users and groups to take and the import...Files flags set for the content to copy. A DocSpace administrator is required, and importing a user as DocSpaceAdmin additionally requires the caller to be the portal owner unless a user with that email is an administrator of this portal already, otherwise the whole call is rejected with 403 before anything is imported. The job is queued and the call answers with an empty body at once: watch progress, successedUsers, failedUsers and error in GET api/2.0/migration/status and read what each step did from GET api/2.0/migration/logs. The import writes to the portal and cannot be undone, and a repeat is no help: a call made while the job runs is ignored, and once the job has ended the uploaded backup is deleted, so a new call has nothing to read until the archive is uploaded and parsed again. When the import is done, close it with POST api/2.0/migration/finish, which can also mail the imported users their activation link.

Parameters​

NameInTypeDescriptionNotes
MigrationApiInfobodyMigrationApiInfo[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The import has been queued; the response carries no content and the progress is read from GET api/2.0/migration/status-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request body is missing or could not be read as a parse result--
403The caller is not a DocSpace administrator, or is not the portal owner and asked to import a user as DocSpaceAdmin who is not an administrator of this portal yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

uploadAndInitializeMigration​

uploadAndInitializeMigration(migratorName)

POST /api/2.0/migration/init/{migratorName}

Parse migration archive

Queues a pass that reads the backup already uploaded for this portal with the migrator named in the path and reports what it holds - the users, the users that carry no email address, the users that exist on this portal already, the groups and the archives it could not open - so that the caller can choose what to import. Upload the backup first: migrationFileUpload.ashx?Init=true opens a new upload folder and drops the previous one, then every part of the archive is posted to the same handler with Name set to its file name; take migratorName from GET api/2.0/migration/list. A DocSpace administrator is required. The call only queues the job and answers at once with an empty body: poll GET api/2.0/migration/status until isCompleted is true, then read what was found from parseResult and any failure from error. Nothing is imported here and the portal is not changed - the parse result is the body to edit and send to POST api/2.0/migration/migrate. A portal runs one job at a time, so a call made while another parse or import is still running is ignored instead of reported, and a backup bigger than the portal's total storage quota ends the job with an error rather than failing this call.

Parameters​

NameInTypeDescriptionNotes
migratorNamepathStringThe migrator that knows the format of the uploaded backup. It has to be one of the names GET api/2.0/migration/list reports for this installation, spelled exactly as listed.[required] [example: GoogleWorkspace]

Responses​

Status codeDescriptionTypeResponse headers
200The parse job has been queued; the response carries no content and the result is read from GET api/2.0/migration/status-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

PortalPaymentApi​

calculateWalletPayment​

PaymentCalculationWrapper calculateWalletPayment(WalletQuantityRequestDto)

PUT /api/2.0/portal/payment/calculatewallet

Calculate the wallet payment amount

Prices a wallet-service purchase without making it: it returns what buying the requested number of units would cost right now, so a client can show the amount before asking for a confirmation. Only productQuantityType Add (1) is accepted, the quantity must be greater than zero, and the portal needs a billing customer whose wallet has a sub-account in the accounting currency. The caller has to be a DocSpace administrator. Nothing is bought, charged or written down - the call is read-only and may be repeated - and the purchase itself is PUT api/2.0/portal/payment/updatewallet. The answer carries the amount with its currency, the quantity it was computed for and the identifier of the calculation. It is the price of this moment and is not held: it can differ by the time the purchase is made.

Parameters​

NameInTypeDescriptionNotes
WalletQuantityRequestDtobodyWalletQuantityRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The amount the purchase would cost, its currency and the quantity it was calculated forPaymentCalculationWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The quantity type is not Add, the quantity is not greater than zero, or the product is not a wallet service--
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer, or its wallet has no sub-account in the accounting currency--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

PaymentCalculationWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

changeTenantWalletServiceState​

TenantWalletServiceSettingsWrapper changeTenantWalletServiceState(ChangeWalletServiceStateRequestDto)

POST /api/2.0/portal/payment/servicestate

Switch a wallet service

Switches one wallet service on or off for the portal: service names it and enabled says which way. The portal needs a billing customer, and the caller needs both the permission to edit the portal settings and DocSpace administrator rights. Order matters between the two AI services - AI tools has to be on before AI search may be switched on, and switching AI tools off switches AI search off with it - so a request that breaks that order is refused with 403. The call is mutating and idempotent: switching on a service that is already on changes nothing. It is written to the portal audit trail, and switching AI tools notifies the portal clients so the AI features appear or disappear for them without a reload. The whole updated set of switched-on services comes back. Switching a service on does not buy it - its units are still bought with PUT api/2.0/portal/payment/updatewallet.

Parameters​

NameInTypeDescriptionNotes
ChangeWalletServiceStateRequestDtobodyChangeWalletServiceStateRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The whole set of wallet services switched on for the portal after the changeTenantWalletServiceSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings or is not a DocSpace administrator, the portal has no billing service configured, or AI search was switched on while AI tools is off--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantWalletServiceSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

createCustomerMonthlyUsageReport​

DocumentBuilderTaskWrapper createCustomerMonthlyUsageReport(CustomerMonthlyUsageReportRequestDto)

POST /api/2.0/portal/payment/customer/usage/monthly/report

Start the monthly usage report

Queues the wallet spending added up per calendar month as an xlsx file and returns the task that will build it; the file is not ready when the response arrives. The portal needs a billing customer and the caller has to be a DocSpace administrator. The body takes only the period - startDate and endDate, both inclusive - and an empty body covers everything from the portal creation date to now; the months are cut in the portal time zone, exactly as in GET api/2.0/portal/payment/customer/usage/monthly. Poll GET api/2.0/portal/payment/customer/usage/monthly/report until isCompleted is true, then take the file from resultFileUrl or open resultFileId: the finished file is saved into the caller's own My documents section, where it counts against the portal storage like any other file. One monthly usage report per user is tracked at a time - a call made while the previous one is still running answers with that task - and DELETE api/2.0/portal/payment/customer/usage/monthly/report stops it. There is no service filter here: for a report per service use POST api/2.0/portal/payment/customer/usage/report.

Parameters​

NameInTypeDescriptionNotes
CustomerMonthlyUsageReportRequestDtobodyCustomerMonthlyUsageReportRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The queued task, to be polled until isCompleted is trueDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

createCustomerOperationsReport​

DocumentBuilderTaskWrapper createCustomerOperationsReport(CustomerOperationsReportRequestDto)

POST /api/2.0/portal/payment/customer/operationsreport

Start the operations report

Queues the history of the wallet movements as an xlsx file and returns the task that will build it; the file is not ready when the response arrives. The portal needs a billing customer and the caller has to be a DocSpace administrator. The body takes the same filters as GET api/2.0/portal/payment/customer/operations - the service names, the date range, the participant, the operation type and status, the credit and debit directions and the ordering - and an empty body reports everything from the portal creation date to now; a service name this installation does not sell fails with 404. Poll GET api/2.0/portal/payment/customer/operationsreport until isCompleted is true, then take the file from resultFileUrl or open resultFileId: the finished file is saved into the caller's own My documents section, where it counts against the portal storage like any other file. One operations report per user is tracked at a time - a call made while the previous one is still running answers with that task - and DELETE api/2.0/portal/payment/customer/operationsreport stops it. A build that fails ends the task with error filled in rather than failing this call.

Parameters​

NameInTypeDescriptionNotes
CustomerOperationsReportRequestDtobodyCustomerOperationsReportRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The queued task, to be polled until isCompleted is trueDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer, or one of the names in serviceName is not a wallet service of this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

createCustomerServiceUsageReport​

DocumentBuilderTaskWrapper createCustomerServiceUsageReport(CustomerServiceUsageReportRequestDto)

POST /api/2.0/portal/payment/customer/usage/report

Start the service usage report

Queues the usage of the wallet services as an xlsx file and returns the task that will build it; the file is not ready when the response arrives. The portal needs a billing customer and the caller has to be a DocSpace administrator. The body takes the same filters as GET api/2.0/portal/payment/customer/usage - the service names, the date range, the participant, the operation status, the usage metadata and the ordering - and an empty body reports every service from the portal creation date to now; a service name this installation does not sell fails with 404. Poll GET api/2.0/portal/payment/customer/usage/report until isCompleted is true, then take the file from resultFileUrl or open resultFileId: the finished file is saved into the caller's own My documents section, where it counts against the portal storage like any other file. One service usage report per user is tracked at a time - a call made while the previous one is still running answers with that task - and DELETE api/2.0/portal/payment/customer/usage/report stops it. It is a different report from the operations one and does not interfere with it: per-movement history is POST api/2.0/portal/payment/customer/operationsreport.

Parameters​

NameInTypeDescriptionNotes
CustomerServiceUsageReportRequestDtobodyCustomerServiceUsageReportRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The queued task, to be polled until isCompleted is trueDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer, or one of the names in serviceName is not a wallet service of this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getAccountingServicePrices​

ServicePriceInfoArrayWrapper getAccountingServicePrices(serviceName, active)

GET /api/2.0/portal/payment/accounting/prices/{serviceName}

Get the service prices from the accounting service

Returns the portal's automatic wallet top-up settings: whether it is switched on, the balance that triggers it, the balance it tops the wallet up to and the currency it charges in. Only a DocSpace administrator may read it, no billing customer is needed, and the call is read-only. A portal that has never configured it gets the defaults rather than an empty result, so enabled is the field that says whether anything happens at all. Two of the values are kept by the portal itself and cannot be set through this API: lowBalanceThreshold is the balance below which the portal warns its administrators by mail, and lowBalanceNotified says whether that warning has already gone out for the current dip. Change the rest with POST api/2.0/portal/payment/topupsettings.

Parameters​

NameInTypeDescriptionNotes
serviceNamepathStringThe service whose price list is read, named the way the billing catalogue names it, such as ai-tools or backup. Take the value from the serviceName field of GET api/2.0/portal/payment/walletservices; a name the accounting service does not price yields an empty list rather than an error.[required] [example: ai-tools] [minLength: 0] [maxLength: 255]
activequeryBooleanWhether the answer is narrowed to the prices in force at the moment of the call. Leaving it false also returns the retired and the not yet started ones, which is what pricing a movement recorded in the past needs.[optional] [example: false]

Responses​

Status codeDescriptionTypeResponse headers
200The list of the service pricesServicePriceInfoArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403No permissions to perform this action--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ServicePriceInfoArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getActiveServices​

ActiveServiceArrayWrapper getActiveServices()

GET /api/2.0/portal/payment/activeservices

Get the active wallet services

Lists the wallet services the portal is running right now: the add-ons its plan pays for that are in the active state, plus the ones an administrator switched on by hand in the wallet service settings; the Docs Connect trial is listed as well, although it is not paid from the wallet. Only a DocSpace administrator may call it, no billing customer is needed for it, and the call is read-only. Every item names the service, its title and the unit it is measured in, and says whether it is a subscription; a subscribed service also carries the limit it grants and how much of it is used where that number is known - the editor seats and the editors currently active for Docs Connect, the purchased units and the units already consumed for disk storage. A service listed with no limit is one whose usage is not counted this way, not one without a limit. The catalogue of what could be switched on is GET api/2.0/portal/payment/walletservices, and switching one is POST api/2.0/portal/payment/servicestate.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The wallet services active on the portal, with their limits and usage where those are knownActiveServiceArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ActiveServiceArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAiPrices​

AiPricesWrapper getAiPrices()

GET /api/2.0/portal/payment/ai-prices

Get AI model prices

Returns the price list of the AI features the portal pays for out of its wallet: the chat models with the price of their prompt and completion tokens, the embedding models, the image models with their per-image price, and the web search providers with the price of one search. The installation needs both a billing service and the AI gateway configured, otherwise the answer is 403, and only a DocSpace administrator may read it; the call is read-only. Token prices are normalised per million tokens, and every price is in the single currency the answer names. Each entry carries the model identifier to use when talking to the AI operations, its display alias, its provider with the provider icon, and a link to the model's own page. It is a list of what the models cost and not of what the portal spent - that is GET api/2.0/portal/payment/customer/usage - and it says nothing about which of them are allowed here, which is GET api/2.0/portal/payment/ai-model/restrictions.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The prices of the chat, embedding and image models and of the web search providers, with the currency they are inAiPricesWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation has no billing service or no AI gateway configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AiPricesWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCheckoutSetupUrl​

StringWrapper getCheckoutSetupUrl(BackUrl, SuccessUrl)

GET /api/2.0/portal/payment/checkoutsetupurl

Get the checkout setup page URL

Hands back the hosted page on which a payment method is attached to the portal's billing account, for the case where money has to be taken later - a wallet top-up or an automatic one - rather than a plan bought now. A portal that already has a payment method on file answers with an empty result; a DocSpace administrator may ask for the page, but once the portal has a billing customer with an e-mail, only its payer may. The call itself changes nothing and may be repeated: the payment method is stored by the payment provider when the returned page is completed, after which GET api/2.0/portal/payment/customerinfo reports it as set. The URL is absolute, carries the caller's e-mail, the language of the request and the currency of the region, and redirects to successUrl or backUrl when the user finishes or cancels. It buys nothing - a plan is bought with PUT api/2.0/portal/payment/url.

Parameters​

NameInTypeDescriptionNotes
BackUrlqueryURI (uri)The absolute address the setup page sends the user back to when attaching a payment method is abandoned. It has to be a well-formed URL and must be reachable by that user rather than by the portal.[required] [example: https://example.com/payment/back] [minLength: 0] [maxLength: 255]
SuccessUrlqueryURI (uri)The absolute address the setup page sends the user to once the payment provider has stored the payment method. Reaching it means a method is now on file, which GET api/2.0/portal/payment/customerinfo confirms; nothing has been charged.[required] [example: https://example.com/payment/success] [minLength: 0] [maxLength: 255]

Responses​

Status codeDescriptionTypeResponse headers
200The absolute URL of the payment method setup page, or an empty result when the portal already has a payment methodStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator or, once a billing customer exists, not its payer; or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerBalance​

BalanceWrapper getCustomerBalance(refresh)

GET /api/2.0/portal/payment/customer/balance

Get the customer balance

Returns the money the portal has in its wallet as the accounting service holds it: the account with its own currency, one sub-account per currency with the amount on it, and the most recent credit movement. Only a DocSpace administrator may read it, an installation without a billing service answers 403, and a portal that has never been a customer gets an empty result. The call is read-only. This balance is what the wallet services are charged against, so it falls as they are used and rises with POST api/2.0/portal/payment/deposit; the movements behind a change are listed by GET api/2.0/portal/payment/customer/operations. Pass refresh=true to re-read it from the accounting service rather than the cache - right after a top-up the cached figure is still the old one.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanWhether the answer is fetched from the billing service instead of the portal cache. The cached copy is what a start-up needs and costs nothing; asking for a fresh one makes a remote call, so use it right after a purchase or a top-up and not on every read.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The wallet account with its sub-account per currency, or an empty result when the portal has no billing customerBalanceWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BalanceWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerInfo​

CustomerInfoWrapper getCustomerInfo(refresh)

GET /api/2.0/portal/payment/customerinfo

Get the customer information

Returns the billing customer behind the portal: the e-mail its billing account is registered to, whether a payment method is stored for it, and the portal user who is the payer of that account. Only a DocSpace administrator may read it, and the call is read-only. The answer is empty in two ordinary cases - the installation has no billing service configured at all, and the portal has never been a customer - so an empty body is not an error. payer is filled in only when the billing e-mail belongs to a portal user; when it does not, the e-mail is still shown but the field stays empty, and that is what makes every payer-only operation of this group unreachable for everybody. refresh=true re-reads the customer from the billing provider instead of the cache, which is worth doing right after a payment method has been attached.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanWhether the answer is fetched from the billing service instead of the portal cache. The cached copy is what a start-up needs and costs nothing; asking for a fresh one makes a remote call, so use it right after a purchase or a top-up and not on every read.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The billing customer with its payer, or an empty result when the portal has no customer or billing is not configuredCustomerInfoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomerInfoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerMonthlyUsage​

CustomerMonthlyUsageArrayWrapper getCustomerMonthlyUsage(startDate, endDate)

GET /api/2.0/portal/payment/customer/usage/monthly

Get the customer monthly usage

Returns what the portal spent from its wallet added up per calendar month, so a client can draw a spending chart without paging through every movement. Only a DocSpace administrator may read it, a portal with no billing customer answers with an empty result, and the call is read-only. startDate and endDate bound the period, both inclusive, and default to the portal creation date and the present moment; the months are cut in the portal time zone, so a movement at the edge of a month falls where the portal sees it and not where UTC does. Each item names its year and month, the total charged in it with the currency, and how many operations that total came from. The movements behind a month are in GET api/2.0/portal/payment/customer/operations, and the same figures as a file come from POST api/2.0/portal/payment/customer/usage/monthly/report.

Parameters​

NameInTypeDescriptionNotes
startDatequeryDate (date-time)The beginning of the reported period, inclusive. The months are cut in the portal time zone rather than in UTC, so spending at the turn of a month falls where the portal sees it; defaults to the portal creation date.[optional] [example: 2025-01-01T00:00:00Z]
endDatequeryDate (date-time)The end of the reported period, inclusive. Cut in the portal time zone in the same way as startDate, and defaults to the moment the call is made.[optional] [example: 2025-12-31T23:59:59Z]

Responses​

Status codeDescriptionTypeResponse headers
200One item per calendar month that had spending, or an empty result when the portal has no billing customerCustomerMonthlyUsageArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomerMonthlyUsageArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerMonthlyUsageReport​

DocumentBuilderTaskWrapper getCustomerMonthlyUsageReport()

GET /api/2.0/portal/payment/customer/usage/monthly/report

Get the monthly usage report status

Returns the state of the xlsx monthly usage report this user started with POST api/2.0/portal/payment/customer/usage/monthly/report: percentage while it is being built, isCompleted when it is done, resultFileId, resultFileName and resultFileUrl pointing at the file in the caller's My documents, and error when the build failed. The portal needs a billing customer and the caller has to be a DocSpace administrator; the call is read-only and is the one to poll. The task is kept per user and per report kind, so it reports neither another administrator's report nor the operations and service usage ones, which have their own status operations. An empty result means this user has no monthly usage report at all - none was started, or the finished one was already picked up or terminated. A completed task is dropped as soon as the next report is started, so read the file link out of the same answer that first reports isCompleted.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of this user's monthly usage report, or an empty result when there is noneDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerOperations​

ReportWrapper getCustomerOperations(offset, limit, ServiceName, StartDate, EndDate, ParticipantName, Credit, Debit, Type, Status, OrderBy, OrderType)

GET /api/2.0/portal/payment/customer/operations

Get the wallet operations

Lists the money movements on the portal's wallet - top-ups, the charges of the wallet services, refunds and corrections - one page at a time, which is what a billing history is built from. Only a DocSpace administrator may read it, a portal with no billing customer answers with an empty result, and the call is read-only. Every filter is optional: startDate and endDate are read in the portal time zone and default to the portal creation date and the present moment, serviceName narrows to particular wallet services and fails with 404 on a name this installation does not sell, participantName, type and status narrow to who caused a movement and how it ended, and credit and debit include or exclude the two directions. offset and limit page through the result and default to 0 and 25, orderBy and orderType sort it, and the answer repeats them next to totalQuantity, totalPage and currentPage so a client can page without counting. The same data as a downloadable file is POST api/2.0/portal/payment/customer/operationsreport, and the figures added up per service are GET api/2.0/portal/payment/customer/usage.

Parameters​

NameInTypeDescriptionNotes
offsetqueryInteger (int32)The number of movements to skip before the first one returned, for walking through a long history page by page. Counted after the filters and the ordering are applied, and starts at 0 when omitted.[optional] [example: 0]
limitqueryInteger (int32)The maximum number of movements returned in one page. Defaults to 25 when omitted; the answer echoes the window back next to totalQuantity, totalPage and currentPage, so the next offset can be computed without counting the items.[optional] [example: 25]
ServiceNamequeryListThe wallet services whose movements are kept, named the way the billing catalogue names them - backup, ai-tools, ai-search, disk-storage, docscloud. Take the values from the serviceName field of GET api/2.0/portal/payment/walletservices; the match ignores case, a name this installation does not sell fails the call with 404, and an omitted list keeps every service. A bare string is accepted in place of an array for backward compatibility.[optional] [example: [backup]]
StartDatequeryDate (date-time)The beginning of the reported period, inclusive. Read in the portal time zone rather than in UTC, so a movement at the edge of the period falls where the portal sees it; defaults to the portal creation date.[optional] [example: 2024-01-01T00:00:00Z]
EndDatequeryDate (date-time)The end of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the moment the call is made.[optional] [example: 2024-01-31T23:59:59Z]
ParticipantNamequeryStringThe participant whose movements are kept - the account the accounting service records as the cause of a movement. A movement caused by a portal user carries that user ID here, and one caused by the portal itself carries the customer name; surrounding whitespace is trimmed, and an omitted value keeps every participant.[optional] [example: My Own Corporation]
CreditqueryBooleanWhether movements that add money to the wallet - top-ups, refunds and corrections in the portal's favour - are kept. Both directions are reported when neither this nor debit is given.[optional] [example: true]
DebitqueryBooleanWhether movements that take money out of the wallet - the charges of the wallet services - are kept. Both directions are reported when neither this nor credit is given.[optional] [example: false]
TypequeryOperationTypeThe kind of movement to keep, which says what caused the money to move rather than how it ended. Every kind is reported when it is omitted.[optional] [example: ServicePayment] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
StatusqueryOperationStatusThe outcome to keep. A movement that is still being settled is reported as pending and may change later, while the other outcomes are final; every outcome is reported when this is omitted.[optional] [example: Completed] [enum: 0, 1, 2, 3]
OrderByqueryStringThe name of the field the movements are sorted by, spelled as the accounting service names it, such as StartDate or ServiceName. Surrounding whitespace is trimmed, and the accounting service applies its own ordering when this is omitted.[optional] [example: StartDate]
OrderTypequeryOperationOrderTypeThe direction the field named in orderBy is sorted in. Newest or largest first is what the accounting service does by default, so leaving this out sorts the same way as asking for descending explicitly.[optional] [example: Descending] [enum: 0, 1]

Responses​

Status codeDescriptionTypeResponse headers
200A page of wallet movements with its paging information, or an empty result when the portal has no billing customerReportWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404One of the names in serviceName is not a wallet service of this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ReportWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerOperationsReport​

DocumentBuilderTaskWrapper getCustomerOperationsReport()

GET /api/2.0/portal/payment/customer/operationsreport

Get the operations report status

Returns the state of the xlsx wallet operations report this user started with POST api/2.0/portal/payment/customer/operationsreport: percentage while it is being built, isCompleted when it is done, resultFileId, resultFileName and resultFileUrl pointing at the file in the caller's My documents, and error when the build failed. The portal needs a billing customer and the caller has to be a DocSpace administrator; the call is read-only and is the one to poll. The task is kept per user and per report kind, so it never reports another administrator's report, nor the service usage and monthly usage ones, which have their own status operations. An empty result means this user has no operations report at all - none was started, or the finished one was already picked up or terminated. A completed task is dropped as soon as the next report is started, so read the file link out of the same answer that first reports isCompleted.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of this user's operations report, or an empty result when there is noneDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerServiceUsage​

CustomerServiceUsageReportWrapper getCustomerServiceUsage(ServiceName, ParticipantName, Status, StartDate, EndDate, Metadata, offset, limit, OrderBy, OrderType)

GET /api/2.0/portal/payment/customer/usage

Get the customer service usage

Returns how much of each wallet service the portal consumed and what that cost, added up per service instead of listed per movement. Only a DocSpace administrator may read it, a portal with no billing customer answers with an empty result, and the call is read-only. The filters are optional: serviceName narrows to particular services and fails with 404 on a name this installation does not sell, participantName and status narrow to who consumed and how the operation ended, startDate and endDate bound the period in the portal time zone, metadata matches the key and value pairs a service records with its usage, and offset, limit, orderBy and orderType page and sort the result. Amounts come with the unit the service is sold in, except AI tools, whose consumption is reported in tokens rather than in AI credits. The individual charges behind these totals are GET api/2.0/portal/payment/customer/operations, and the same figures as a downloadable file are POST api/2.0/portal/payment/customer/usage/report.

Parameters​

NameInTypeDescriptionNotes
ServiceNamequeryListThe wallet services whose consumption is added up, named the way the billing catalogue names them - backup, ai-tools, ai-search, disk-storage, docscloud. Take the values from the serviceName field of GET api/2.0/portal/payment/walletservices; the match ignores case, a name this installation does not sell fails the call with 404, and an omitted list covers every service.[optional] [example: [backup]]
ParticipantNamequeryStringThe participant whose consumption is added up - the account the accounting service records as the consumer. Consumption caused by a portal user carries that user ID here; surrounding whitespace is trimmed, and an omitted value covers every participant.[optional] [example: My Own Corporation]
StatusqueryOperationStatusThe outcome to keep. Consumption that is still being settled is reported as pending and may change later, while the other outcomes are final; every outcome is counted when this is omitted.[optional] [example: Completed] [enum: 0, 1, 2, 3]
StartDatequeryDate (date-time)The beginning of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the portal creation date.[optional] [example: 2025-01-01T00:00:00Z]
EndDatequeryDate (date-time)The end of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the moment the call is made.[optional] [example: 2025-12-31T23:59:59Z]
MetadataqueryMapThe usage annotations a wallet service records alongside its consumption, as the key and value pairs that must all match for a record to be counted. The keys are chosen by the service that writes them, so read them off the metadata of the records already returned rather than guessing; an omitted map counts every record.[optional] [example: {"key1":"value1","key2":"value2"}]
offsetqueryInteger (int32)The number of per-service totals to skip before the first one returned. Counted after the filters and the ordering are applied, and starts at 0 when omitted.[optional] [example: 0]
limitqueryInteger (int32)The maximum number of per-service totals returned in one page. Defaults to 25 when omitted; the answer echoes the window back with its paging information, so the next offset can be computed without counting the items.[optional] [example: 25]
OrderByqueryStringThe name of the field the per-service totals are sorted by, spelled as the accounting service names it, such as ServiceName or StartDate. Surrounding whitespace is trimmed, and the accounting service applies its own ordering when this is omitted.[optional] [example: ServiceName]
OrderTypequeryOperationOrderTypeThe direction the field named in orderBy is sorted in. Newest or largest first is what the accounting service does by default, so leaving this out sorts the same way as asking for descending explicitly.[optional] [example: Descending] [enum: 0, 1]

Responses​

Status codeDescriptionTypeResponse headers
200The usage and cost per wallet service with its paging information, or an empty result when the portal has no billing customerCustomerServiceUsageReportWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404One of the names in serviceName is not a wallet service of this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomerServiceUsageReportWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCustomerServiceUsageReport​

DocumentBuilderTaskWrapper getCustomerServiceUsageReport()

GET /api/2.0/portal/payment/customer/usage/report

Get the service usage report status

Returns the state of the xlsx service usage report this user started with POST api/2.0/portal/payment/customer/usage/report: percentage while it is being built, isCompleted when it is done, resultFileId, resultFileName and resultFileUrl pointing at the file in the caller's My documents, and error when the build failed. The portal needs a billing customer and the caller has to be a DocSpace administrator; the call is read-only and is the one to poll. The task is kept per user and per report kind, so it reports neither another administrator's report nor the operations and monthly usage ones, which have their own status operations. An empty result means this user has no service usage report at all - none was started, or the finished one was already picked up or terminated. A completed task is dropped as soon as the next report is started, so read the file link out of the same answer that first reports isCompleted.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of this user's service usage report, or an empty result when there is noneDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPaymentAccount​

StringWrapper getPaymentAccount(backUrl)

GET /api/2.0/portal/payment/account

Get the billing account page

Hands back the address of the portal page on which the billing account is managed - the payment method on file, the invoices and the receipts - so a client can link to it instead of assembling the address itself. The portal must already have a billing customer: one that has never had it gets an empty result, and an installation without a billing service answers 403. Only the payer or the portal owner may read it, and the call changes nothing. The value is relative to the portal root (payment.ashx), and the optional backUrl is appended to it as a query parameter so the page can send the user back where they came from. It is not a checkout page: a plan is bought with PUT api/2.0/portal/payment/url and a payment method is attached with GET api/2.0/portal/payment/checkoutsetupurl.

Parameters​

NameInTypeDescriptionNotes
backUrlqueryURI (uri)The absolute address the billing account page should offer as its way back. It is appended to the returned portal-relative address as a query parameter rather than followed here, and omitting it yields the bare address of the page.[optional] [example: https://example.com] [minLength: 0] [maxLength: 255]

Responses​

Status codeDescriptionTypeResponse headers
200The portal-relative address of the billing account page, or an empty result when the portal has no billing customerStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is neither the payer nor the portal owner, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPaymentCurrencies​

CurrenciesArrayWrapper getPaymentCurrencies()

GET /api/2.0/portal/payment/currencies

Get the billing currencies

Tells a client which currency the portal is billed in: the default currency of the portal region always comes first, followed by the currency resolved for the current request when that one differs, so the answer holds one or two items. Nothing has to be called first, the caller needs the permission to edit the portal settings, and the call is read-only. Each item carries the country code of the region, the currency symbol and the native name of the currency; the first item is the currency the amounts from GET api/2.0/portal/payment/prices are expressed in. These are the currencies of the subscription prices, and they are not the accounting currencies the wallet is topped up in - those come with the balance in GET api/2.0/portal/payment/customer/balance.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The default currency of the portal region first, followed by the currency of the current request when it differsCurrenciesArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CurrenciesArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPaymentQuotas​

QuotaArrayWrapper getPaymentQuotas(wallet, additional)

GET /api/2.0/portal/payment/quotas

Get the purchasable quotas

Lists the quotas the portal can be put on - the paid plans and the wallet services - each with its price, its features and the limits it grants, which is what a pricing page is built from. Nothing has to be called first, the caller needs the permission to edit the portal settings, and the call is read-only. Only quotas marked visible are listed, newest first, and the two optional filters narrow that: wallet selects the wallet services (true) or the subscription plans (false), additional selects the add-ons to a plan (true) or the plans themselves (false), and an omitted filter keeps both kinds. A portal on a non-profit quota is a special case - asking for additional=false returns that single quota and nothing else, because no other plan may be bought for it. The quota the portal is actually on is not marked here; read it from GET api/2.0/portal/payment/quota.

Parameters​

NameInTypeDescriptionNotes
walletqueryBooleanWhich side of the catalogue is listed: true keeps the services paid out of the portal wallet, false keeps the subscription plans, and omitting it keeps both.[optional] [example: true]
additionalqueryBooleanWhich layer of the catalogue is listed: true keeps the add-ons that extend a plan, false keeps the plans themselves, and omitting it keeps both.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The visible quotas matching the filters, newest first, each with its price, features and limitsQuotaArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

QuotaArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPaymentUrl​

StringWrapper getPaymentUrl(PaymentUrlRequestDto)

PUT /api/2.0/portal/payment/url

Get the payment page URL

Starts the purchase of a monthly paid plan for this portal by handing back the hosted checkout page the buyer has to open; nothing is bought until that page is completed. The portal must have no paid plan yet - a portal whose plan is already paid gets an empty result and changes its subscription through PUT api/2.0/portal/payment/update instead - and the product name in quantity must be one of the monthly, non-wallet plans listed by GET api/2.0/portal/payment/quotas. Only a DocSpace administrator may call it. The call itself changes nothing on the portal and may be repeated: the money is taken by the payment provider on the checkout page, and the plan becomes active once the provider confirms it. The returned URL is absolute and single-purpose - it carries the caller's e-mail, the language of the request and the currency of the request region, and it redirects to successUrl or backUrl when the buyer finishes or cancels. Exactly one product per call is accepted and its quantity has to be greater than zero; yearly and wallet products are refused, and wallet services are bought with PUT api/2.0/portal/payment/updatewallet instead.

Parameters​

NameInTypeDescriptionNotes
PaymentUrlRequestDtobodyPaymentUrlRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The absolute URL of the checkout page to open, or an empty result when the portal already has a paid planStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400quantity holds more than one product, a quantity that is not greater than zero, or a product that is not a monthly plan--
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getPortalPrices​

getPortalPrices_200_response getPortalPrices()

GET /api/2.0/portal/payment/prices

Get the product prices

Lists what one unit of every purchasable product costs, keyed by the product name that quantity takes in the purchase operations, so a client can price a plan or a wallet service without reading the whole quota list. Nothing has to be called first, and the caller needs the permission to edit the portal settings, which portal administrators and the owner have. The call is read-only. Prices are given in the one currency resolved for this request from the portal region, which GET api/2.0/portal/payment/currencies reports; a product with no price in that currency comes back as 0 rather than being left out, so a zero means unpriced and not free. The list covers the products on offer, not the portal's own plan - the plan in force, with its limits and its usage, is GET api/2.0/portal/payment/quota.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Product name to the price of one unit in the currency of the request, 0 where the product has no price in itgetPortalPrices_200_responseX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

getPortalPrices_200_response

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getQuotaPaymentInformation​

QuotaWrapper getQuotaPaymentInformation(refresh)

GET /api/2.0/portal/payment/quota

Get the current plan and limits

Returns the quota the portal is on right now - its paid plan or the free one - with everything a client needs to render itself: the price, the features that are switched on, the limits they grant (rooms, storage in bytes, users, administrators, AI) and how much of each is already used. Every signed-in member of the portal reads it, so it is not restricted to administrators; only guests are refused with 403. The call is read-only. The plan is served from the cache by default, which is what a start-up needs; refresh=true fetches it from the billing service instead, so use that right after a purchase and not routinely, because it is a remote call. The catalogue of the quotas that could be bought instead is GET api/2.0/portal/payment/quotas, and the money side of the same portal - customer, wallet and balance - starts at GET api/2.0/portal/payment/customerinfo.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanWhether the answer is fetched from the billing service instead of the portal cache. The cached copy is what a start-up needs and costs nothing; asking for a fresh one makes a remote call, so use it right after a purchase or a top-up and not on every read.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The quota the portal is on, with its price, features, limits and current usageQuotaWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is a guest of this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

QuotaWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getRestrictedAiModels​

RestrictedModelsResponseWrapper getRestrictedAiModels()

GET /api/2.0/portal/payment/ai-model/restrictions

Get restricted AI models

Returns the AI chat models that are barred on this portal - the ones no user of it may pick for a conversation, whatever the price list offers. Only a DocSpace administrator may read it, and the call is read-only. When the installation has no billing service or AI is not enabled for the portal, the answer is an empty set instead of an error, which is indistinguishable from a portal that restricts nothing. An empty models therefore means every model in GET api/2.0/portal/payment/ai-prices may be used. The set names the barred models and not the allowed ones; replace it with PUT api/2.0/portal/payment/ai-model/restrictions.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The identifiers of the AI chat models barred on this portal, empty when none isRestrictedModelsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

RestrictedModelsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSubscriptionBalanceInfo​

SubscriptionBalanceInfoWrapper getSubscriptionBalanceInfo()

GET /api/2.0/portal/payment/subscription/balance

Get the subscription balance information

Reports in money how much of the portal's paid subscription period is still unused - the credit that POST api/2.0/portal/payment/subscription/movetowallet would carry over to the wallet if the subscription were ended now. The portal must have a billing customer and a plan in the paid state; a plan that is not paid answers 402, and a paid plan without a subscription row gives 404. Only the payer - the portal user whose e-mail is the billing customer's e-mail - may read it, and the call is read-only. The answer states the total cost of the current period with its currency, the start and the end of that period in UTC, the moment the unused part is measured up to, the days already elapsed, and the remaining balance both in the subscription currency and converted to the wallet currency. Every figure is computed for the instant of the request, so it changes between calls.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The unused balance of the current subscription period with its period boundaries and currenciesSubscriptionBalanceInfoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The plan currently paid is a wallet product or has no product identifier--
402The plan of the portal is not in the paid state--
403The caller is not the payer of this portal, or the portal has no billing service configured--
404This portal has no billing customer, or its paid plan has no subscription--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SubscriptionBalanceInfoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantWalletServiceSettings​

TenantWalletServiceSettingsWrapper getTenantWalletServiceSettings()

GET /api/2.0/portal/payment/servicessettings

Get the wallet service settings

Returns which wallet services an administrator has switched on for this portal by hand, as opposed to the ones its plan pays for. Only a DocSpace administrator may read it, an installation without a billing service answers 403, no billing customer is needed, and the call is read-only. enabledServices holds the names of those services and is empty when none was switched on. This is the stored setting and not the state of the portal: a service the plan brings with it is active without appearing here, so the honest answer to what is running is GET api/2.0/portal/payment/activeservices. One entry is changed with POST api/2.0/portal/payment/servicestate.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The wallet services switched on by hand for this portalTenantWalletServiceSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantWalletServiceSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantWalletSettings​

TenantWalletSettingsResponseWrapper getTenantWalletSettings()

GET /api/2.0/portal/payment/topupsettings

Get the auto top-up settings

Returns the portal's automatic wallet top-up settings - whether it is on, the balance that triggers a charge, the balance it is topped up to, and the currency both are expressed in. Any DocSpace administrator may read them, and unlike the operation that changes them this one needs neither a billing customer nor a configured billing service, so it answers on a portal that has never paid for anything. It is read-only and changes nothing. A portal that has never configured top-up gets the defaults rather than an empty result: enabled is false, currency is null, and minBalance and upToBalance are 0. Those two zeros are outside the ranges POST api/2.0/portal/payment/topupsettings accepts - 5 to 1000 and 6 to 5000 - so the answer cannot be sent straight back to it; supply real values instead. lastModified is 0001-01-01T00:00:00 until the settings are stored for the first time. lowBalanceThreshold and lowBalanceNotified are maintained by the portal itself: they are reported here, but ignored when the settings are written.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The automatic top-up settings of the portal, or their defaults when it has never configured themTenantWalletSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantWalletSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWalletService​

WalletServiceWrapper getWalletService(service)

GET /api/2.0/portal/payment/walletservice

Get a wallet service

Returns one wallet service by name, for a client that already knows which service it needs and does not want the whole catalogue. service is the name of the service - Storage, Backup, AITools, Admin, DocsCloud, DocsCloudDevPack or AISearch - and a name this installation does not sell answers 404. Nothing has to be called first, the caller needs the permission to edit the portal settings, and the call is read-only. The answer has the same shape as one item of GET api/2.0/portal/payment/walletservices - the price of a unit, the unit, the limits the service grants and its service name - except that the variants of a service are not grouped into innerServices here, because a single service is looked up directly. The price is in the currency resolved for the request.

Parameters​

NameInTypeDescriptionNotes
servicequeryTenantWalletServiceThe service to look up, given by its catalogue name. A service this installation does not sell answers 404, and the whole catalogue is GET api/2.0/portal/payment/walletservices.[required] [example: Storage] [enum: -18, -16, -15, -14, -13, -12, -11]

Responses​

Status codeDescriptionTypeResponse headers
200The wallet service with its price, unit and the limits it grantsWalletServiceWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings--
404This installation does not sell a wallet service under that name--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WalletServiceWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWalletServices​

WalletServiceArrayWrapper getWalletServices()

GET /api/2.0/portal/payment/walletservices

Get wallet services

Lists every service the portal may pay for out of its wallet - extra administrators, disk storage, backup, AI tools, AI search and Docs Connect - with the price of a unit, the unit it is sold in and whether the portal has it switched on. Nothing has to be called first, the caller needs the permission to edit the portal settings, and the call is read-only. Services that are variants of one another are folded together: the visible one carries the rest in its innerServices, so a client renders one card per group. The AI services are left out entirely when AI is not enabled for the portal. This is the catalogue and not the state of the portal - what is actually running is GET api/2.0/portal/payment/activeservices, one service on its own is GET api/2.0/portal/payment/walletservice, and switching one on or off is POST api/2.0/portal/payment/servicestate.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The wallet services on offer, with their prices, units and grouped variantsWalletServiceArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WalletServiceArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

moveSubscriptionToWallet​

BooleanWrapper moveSubscriptionToWallet(QuantityRequestDto)

POST /api/2.0/portal/payment/subscription/movetowallet

Move the subscription to the wallet

Ends the portal's paid subscription and moves it onto the wallet: the unused balance of the running period is credited to the wallet, the wallet is topped up from the payment method on file if that credit does not cover the purchase, and the requested number of administrators is then bought as a wallet service. The portal needs a billing customer with a payment method set and a plan in the paid state, quantity has to name the administrators wallet product, and the number asked for may not be below the administrators the portal already has - read the credit that will be carried over from GET api/2.0/portal/payment/subscription/balance first. Only the payer may call it. The call is mutating, spends money and cannot be undone: the subscription is ended before the purchase is attempted, so a failure in the second half leaves the portal on the wallet with the money credited but the administrators unbought, and a repeat would then buy them a second time. It is limited to ten requests a minute per user by default. The result is true when the administrators were bought.

Parameters​

NameInTypeDescriptionNotes
QuantityRequestDtobodyQuantityRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the balance was moved to the wallet and the administrators were boughtBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400quantity does not name the administrators wallet product, or the number asked for is below the administrators the portal already has--
402The plan of the portal is not paid, the balance could not be moved, or the wallet is still short of the price after the top-up--
403The caller is not the payer of this portal, the portal has no billing service configured, or the customer has no payment method set--
404This portal has no billing customer, its paid plan has no subscription, or the price of the administrators product is unknown--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

sendPaymentRequest​

sendPaymentRequest(SalesRequestsDto)

POST /api/2.0/portal/payment/request

Contact the sales team

Sends the portal's message to the ONLYOFFICE sales team - the contact-sales form behind a request for a quote, an invoice or a plan that cannot be bought online. email has to be a well-formed address and is where the answer will go, while userName and message say who is asking and what for; all three are required and none may be empty. Only a DocSpace administrator may call it. Nothing on the portal changes: no plan, no quota and no payment is touched, a message is mailed out and the request is written to the portal audit trail. There is no response body - status 200 means the message was handed to the mail service - and the call is not idempotent, so a repeat sends a second message. It is limited to ten requests a minute per user by default and answers 429 above that.

Parameters​

NameInTypeDescriptionNotes
SalesRequestsDtobodySalesRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The message has been handed to the mail service; the response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400email is not a well-formed address, or one of the required fields is empty--
403The caller is not a DocSpace administrator--
429This user has made more than ten requests in a minuteErrorApiResponseRetry-After
401UnauthorizedErrorApiResponse-
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setRestrictedAiModels​

RestrictedModelsResponseWrapper setRestrictedAiModels(SetRestrictedAiModelsRequestDto)

PUT /api/2.0/portal/payment/ai-model/restrictions

Set restricted AI models

Replaces the whole set of AI chat models barred on this portal: the body is the complete set that is to hold, so adding one restriction means sending the new model together with the ones already restricted, lifting one means leaving it out, and an empty set lifts them all. Read the current set from GET api/2.0/portal/payment/ai-model/restrictions and the model identifiers from GET api/2.0/portal/payment/ai-prices before calling. The installation needs a billing service and the AI gateway configured, the portal needs a billing customer, and the caller needs the permission to edit the portal settings as well as DocSpace administrator rights. The call is mutating and idempotent - sending the same set twice leaves the same state - and it is written to the portal audit trail. It takes effect on the next AI request, so a conversation already open on a model that has just been barred cannot go on with it. The stored set comes back in the answer.

Parameters​

NameInTypeDescriptionNotes
SetRestrictedAiModelsRequestDtobodySetRestrictedAiModelsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The set of barred AI chat models as it was storedRestrictedModelsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit the portal settings or is not a DocSpace administrator, or the installation has no billing service or no AI gateway configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

RestrictedModelsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setTenantWalletSettings​

TenantWalletSettingsResponseWrapper setTenantWalletSettings(TenantWalletSettingsWrapper)

POST /api/2.0/portal/payment/topupsettings

Set the auto top-up settings

Switches the portal's automatic wallet top-up on or off and sets its thresholds: while it is on, the payment method on file is charged whenever the wallet balance falls below minBalance, enough to bring it up to upToBalance, in currency. The portal needs a billing customer whose wallet balance exists - a portal that has never had one answers 404, so top the wallet up once with POST api/2.0/portal/payment/deposit first - and only the payer may change the settings. The body replaces the stored settings as a whole and an omitted body resets them to the defaults; minBalance is accepted between 5 and 1000 and upToBalance between 6 and 5000, while lowBalanceThreshold and lowBalanceNotified are ignored on the way in and kept as the portal had them. The call is mutating and idempotent, it charges nothing by itself, it is written to the portal audit trail, and switching the top-up on also re-arms the low-balance warning. The settings as they were stored come back in the answer.

Parameters​

NameInTypeDescriptionNotes
TenantWalletSettingsWrapperbodyTenantWalletSettingsWrapper[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The automatic top-up settings as they were storedTenantWalletSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not the payer of this portal, or the portal has no billing service configured--
404This portal has no billing customer, or its wallet has no balance yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantWalletSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

terminateCustomerMonthlyUsageReport​

terminateCustomerMonthlyUsageReport()

DELETE /api/2.0/portal/payment/customer/usage/monthly/report

Terminate the monthly usage report

Stops the xlsx monthly usage report this user has running and drops its task, for a report that was started for the wrong period or is no longer wanted. The portal needs a billing customer and the caller has to be a DocSpace administrator. The stop is asked of the worker that builds the file rather than done here, so GET api/2.0/portal/payment/customer/usage/monthly/report can still answer for a moment afterwards. The call is safe to repeat and does nothing at all when this user has no such report running: there is no response body, and status 200 says the stop was requested, not that a report was really stopped. It leaves the operations and service usage reports alone, and a report that had already finished keeps its file in My documents.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The stop has been requested; the response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

terminateCustomerOperationsReport​

terminateCustomerOperationsReport()

DELETE /api/2.0/portal/payment/customer/operationsreport

Terminate the operations report

Stops the xlsx wallet operations report this user has running and drops its task, for a report that was started with the wrong filters or is no longer wanted. The portal needs a billing customer and the caller has to be a DocSpace administrator. The stop is asked of the worker that builds the file rather than done here, so GET api/2.0/portal/payment/customer/operationsreport can still answer for a moment afterwards. The call is safe to repeat and does nothing at all when this user has no report running: there is no response body, and status 200 says the stop was requested, not that a report was really stopped. A report that had already finished keeps its file in My documents - nothing is deleted from there.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The stop has been requested; the response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

terminateCustomerServiceUsageReport​

terminateCustomerServiceUsageReport()

DELETE /api/2.0/portal/payment/customer/usage/report

Terminate the service usage report

Stops the xlsx service usage report this user has running and drops its task, for a report that was started with the wrong filters or is no longer wanted. The portal needs a billing customer and the caller has to be a DocSpace administrator. The stop is asked of the worker that builds the file rather than done here, so GET api/2.0/portal/payment/customer/usage/report can still answer for a moment afterwards. The call is safe to repeat and does nothing at all when this user has no such report running: there is no response body, and status 200 says the stop was requested, not that a report was really stopped. It leaves the operations and monthly usage reports alone, and a report that had already finished keeps its file in My documents.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The stop has been requested; the response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

topUpDeposit​

BooleanWrapper topUpDeposit(TopUpDepositRequestDto)

POST /api/2.0/portal/payment/deposit

Top up the wallet

Charges the payment method on file and adds the amount to the portal's wallet, the balance every wallet service is paid from. The portal needs a billing customer with a payment method set - attach one with GET api/2.0/portal/payment/checkoutsetupurl - currency has to be one of the accounting currencies this installation supports, and amount is a whole number of currency units between 1 and 999999. Only the payer may call it. The call takes money and is not idempotent in any way: two identical requests charge twice, so a client must not retry it blindly after a timeout, and it is limited to ten requests a minute per user by default. A successful top-up pushes the new balance to the portal clients over their socket connection and re-arms the low-balance notification. The result is true when the payment provider accepted the charge; read the resulting balance back from GET api/2.0/portal/payment/customer/balance.

Parameters​

NameInTypeDescriptionNotes
TopUpDepositRequestDtobodyTopUpDepositRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the payment provider accepted the charge and the wallet was creditedBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400currency is not one of the supported accounting currencies, or amount is outside 1 to 999999--
403The caller is not the payer of this portal, the portal has no billing service configured, or the customer has no payment method set--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updatePayment​

BooleanWrapper updatePayment(QuantityRequestDto)

PUT /api/2.0/portal/payment/update

Change the subscription quantity

Changes how many units of the plan the portal is paying for - the number of administrators it covers - and lets the payment provider bill the difference against the payment method already on file. The portal must have a billing customer and a plan bought through PUT api/2.0/portal/payment/url, and while the portal is on a priced plan the product name in quantity has to be that same plan, which GET api/2.0/portal/payment/quota reports, because a subscription is changed here and not swapped. Only the payer - the portal user whose e-mail is the billing customer's e-mail - may call it. The call is mutating and charges money, and it is guarded against a double submission: once the new quantity is in effect, repeating the same request fails with 400 because that quantity is already set. The result is true when the provider accepted the change and false when it declined it without an error. Exactly one product per call is accepted, the operation is limited to ten requests a minute per user by default and answers 429 above that, and wallet services are not bought here - use PUT api/2.0/portal/payment/updatewallet for those.

Parameters​

NameInTypeDescriptionNotes
QuantityRequestDtobodyQuantityRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the provider accepted the new quantity, false when it declined itBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The product is not the plan currently paid, or the quantity is already the one in effect--
403The caller is not the payer of this portal, or the portal has no billing service configured--
404This portal has no billing customer yet--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateWalletPayment​

BooleanWrapper updateWalletPayment(WalletQuantityRequestDto)

PUT /api/2.0/portal/payment/updatewallet

Change a wallet service quantity

Buys more units of a wallet service - extra administrators, disk storage, backup, AI tools, AI search or Docs Connect - or writes down the quantity that service will have after the next renewal, depending on productQuantityType. With Add (1) the units are bought at once and paid out of the portal wallet, so the wallet needs a sub-account in the accounting currency and enough money on it; with Set (0) nothing is charged now and the quantity only takes effect in the next period, where an empty or zero quantity cancels a change scheduled earlier. Renew and Sub are not accepted here. The portal needs a billing customer and the caller has to be a DocSpace administrator; a service that is an add-on to the plan also needs the plan itself to be paid, otherwise the answer is 402. Minimum quantities apply - disk storage starts at 100 units, the Docs Connect Dev Pack at 10, and the administrators may not be fewer than the portal already has - and in the Add form they are checked only while the portal does not hold that service yet. Asking for the Docs Connect plan in the Set form while Docs Connect Dev Pack is active schedules the reversion to it at the next period, while the upgrade in the other direction is not done here at all: use POST api/2.0/settings/docscloud/switchtodevpack. The result is true when the change was accepted; the call is mutating, spends money in its Add form and is limited to ten requests a minute per user by default. Price the same purchase without paying for it with PUT api/2.0/portal/payment/calculatewallet.

Parameters​

NameInTypeDescriptionNotes
WalletQuantityRequestDtobodyWalletQuantityRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the purchase or the scheduled change was accepted, false when the provider declined itBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The quantity type is not Set or Add, the product is not a wallet service, the quantity is below the minimum for it, or that service is already set--
402The plan of the portal is not paid and the requested service is an add-on to it--
403The caller is not a DocSpace administrator, or the portal has no billing service configured--
404This portal has no billing customer, or its wallet has no sub-account in the accounting currency--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

PortalQuotaApi​

getPortalQuota​

TenantQuotaWrapper getPortalQuota()

GET /api/2.0/portal/quota

Get the portal quota

Returns the quota this portal runs on - the allowance its tariff grants: how many users and paid users it may have, how many rooms, the largest total and single-file size, the price of the quota and the feature flags that go with it. The caller needs the portal-settings right and gets 403 without it; the call is read-only and idempotent. Sizes are in bytes, and maxTotalSize comes back as 0 when the calling account's own role is user, rather than as the real allowance. This is what the portal is allowed, not what it consumes: the consumption is reported by GET api/2.0/portal/usedspace in gigabytes and by GET api/2.0/portal/userscount. The quotas the portal could move to are listed by GET api/2.0/portal/payment/quotas, and GET api/2.0/portal/quota/right picks the smallest of them that would still fit. A free or trial quota carries no price, and the billing state that goes with the quota - paid, in grace period or not paid - is read from GET api/2.0/portal/tariff.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The allowance the current tariff grants this portal, with sizes in bytesTenantQuotaWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller has no portal-settings right--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantQuotaWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalTariff​

TariffWrapper getPortalTariff(refresh)

GET /api/2.0/portal/tariff

Get the portal tariff

Returns the tariff this portal runs on: its state, the end of the current period and the quotas - the plan and its add-ons - it is made of. Nothing has to be called first, the call is read-only and idempotent, and it keeps answering while the portal's payment has lapsed, which is what a client needs in order to show a payment warning. How much of it is filled depends on the caller: every user gets state, which is Trial, Paid, Delay for the grace period after the due date, or NotPaid; a room or DocSpace administrator also gets dueDate and delayDueDate; and a caller with the portal-settings right additionally gets id, customerId, licenseDate, the openSource, enterprise and developer flags and quotas, each entry naming the quota, its quantity, its own due date and the quota it switches to next period. Dates are in the portal time zone. Pass refresh=true to re-read the tariff from the billing system instead of the portal cache - it is slower, so use it after a payment, not on every page. What the next period will cost is listed by GET api/2.0/portal/tariff/upcoming.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanWhether the tariff is re-read from the billing system instead of the portal cache. The remote read is slower, so ask for it right after a payment and leave it off for ordinary page loads.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The tariff of this portal, filled as far as the rights of the caller allowTariffWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TariffWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalUsedSpace​

DoubleWrapper getPortalUsedSpace()

GET /api/2.0/portal/usedspace

Get the portal used space

Returns how much space the content of this portal occupies, in gigabytes rounded to two decimals, so a client can show the storage bar next to the allowance. The caller needs the portal-settings right and is refused without it; the call is read-only and idempotent. The number is added up from the storage counters the portal keeps per owner, which means content that belongs to no account - system data - is not part of it, and it is a plain number, not an object. The counters are maintained as files are written and removed, so the value is current but may lag a large operation that is still running. The allowance to compare it with is maxTotalSize from GET api/2.0/portal/quota, in bytes rather than gigabytes, and the smallest quota that would still fit the portal is suggested by GET api/2.0/portal/quota/right. This operation says nothing about which room or user the space belongs to - the per-user figures come from the People API.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The space the portal content occupies, in gigabytes rounded to two decimalsDoubleWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DoubleWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getRightQuota​

TenantQuotaWrapper getRightQuota()

GET /api/2.0/portal/quota/right

Get the recommended quota

Recommends the cheapest quota this portal could run on and still fit: the lowest-priced quota that is not billed yearly, whose user allowance is above the number of active accounts and whose storage allowance is above the space already used. The caller needs the portal-settings right and gets 403 without it. The call is read-only, idempotent and buys nothing - it only picks one quota out of those the portal may switch to, comparing them with the figures that GET api/2.0/portal/userscount and GET api/2.0/portal/usedspace report. The answer is a single quota in the same shape as GET api/2.0/portal/quota, with sizes in bytes; when no quota is large enough the answer is an empty body with 200 and not an error, so handle the empty result as nothing to recommend. Yearly quotas are left out by design, so the recommendation is always a monthly one - the full list to choose from comes from GET api/2.0/portal/payment/quotas, and the purchase itself is started with PUT api/2.0/portal/payment/url.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The cheapest monthly quota that would still fit this portal, or an empty body when none doesTenantQuotaWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller has no portal-settings right--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantQuotaWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getUpcomingPayments​

UpcomingPaymentArrayWrapper getUpcomingPayments(refresh)

GET /api/2.0/portal/tariff/upcoming

Get upcoming payments

Lists what this portal will be charged next for the quotas of its current tariff - one entry per quota that is going to be billed, with the amount, the currency and the due date. The caller needs the portal-settings right and gets 403 without it; the call is read-only and idempotent and keeps answering while the portal's payment has lapsed. Only quotas that are really charged appear: an overdue quota is skipped, and so is a quota that has no price of its own, such as a trial or a free plan - which is why the list can come back empty on a portal that does have a tariff. When a switch to another quota is scheduled for the next period, the entry describes that next quota and its quantity, so id and name may differ from what GET api/2.0/portal/tariff reports for today. amount is the unit price multiplied by quantity, in the currency named by currency as an ISO 4217 code, dueDate is in the portal time zone, and wallet marks a service paid from the portal wallet instead of the subscription.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanWhether the tariff is re-read from the billing system instead of the portal cache. The remote read is slower, so ask for it right after a payment and leave it off for ordinary page loads.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The charges the portal is going to be billed next, one entry per quota, empty when nothing is dueUpcomingPaymentArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller has no portal-settings right--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

UpcomingPaymentArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

PortalSettingsApi​

continuePortal​

continuePortal()

PUT /api/2.0/portal/continue

Restore a portal

Brings a deactivated portal back to the active state, so its users can sign in again and its domain serves the portal as before. It is reached only with the reactivation link that POST api/2.0/portal/suspend mails to the portal owner: that link authorizes the call in place of an authentication token, and no ordinary token is accepted here. The call is mutating and idempotent - it sets the status to active, re-applies the portal's Content Security Policy and refreshes its base domain, and a portal that is already active is simply left active. Nothing is returned in the body; read the result from status in GET api/2.0/portal. Deactivating the portal again means asking for a fresh letter with POST api/2.0/portal/suspend, because each link is issued for one operation. This operation cannot bring back a removed portal: the deletion behind DELETE api/2.0/portal/delete is final, and a removed portal has to be restored from a backup instead.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200OK-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

deletePortal​

StringWrapper deletePortal()

DELETE /api/2.0/portal/delete

Delete a portal

Removes this portal for good: its rooms, files, accounts, settings and OAuth clients go with it and its domain stops serving the portal. It is reached only with the removal link that POST api/2.0/portal/delete mails to the portal owner - that link authorizes the call instead of an authentication token - and the owner is checked again here; on a server installation the last remaining space cannot be removed. The call is destructive and cannot be undone, and there is no restore operation, so take a backup with POST api/2.0/backup/startbackup first when the content still matters. It keeps working while the portal's payment has lapsed. Along the way the portal is dropped from the hosting cache, the owner is mailed a confirmation, the removal is written to the audit trail and, for a portal that was paying, the support team is notified as well. The answer is the absolute URL of the feedback form to send the departing owner to. To pause the portal instead of erasing it, use PUT api/2.0/portal/suspend.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The absolute URL of the feedback form to send the owner of the removed portal toStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalInformation​

TenantWrapper getPortalInformation()

GET /api/2.0/portal

Get portal information

Returns the portal the request was addressed to - the tenant behind the current domain - with its name, alias, owner, language, time zone, industry, trusted-domain rules, version and creation date. Nothing has to be called first, the call is read-only and idempotent, and it keeps answering while the portal's payment has lapsed. What comes back depends on the caller's rights: a caller with the portal-settings right gets the whole record, while every other user gets an object in which only tenantId is filled and no error is raised - so check tenantAlias for null before reading the rest. status says whether the portal is active, suspended or pending removal, and creationDateTime, statusChangeDate, lastModified and versionChanged are UTC. region names the data-center region a hosted portal is served from and stays empty on a server installation and when the portal cache is off, while hostedRegion is the region written on the record itself. The settings of the same portal are read with GET api/2.0/settings, its tariff with GET api/2.0/portal/tariff and its quota with GET api/2.0/portal/quota.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The portal record, or an object in which only tenantId is filled when the caller has no portal-settings rightTenantWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalPath​

StringWrapper getPortalPath(virtualPath)

GET /api/2.0/portal/path

Get a path to the portal

Turns a portal-relative path into the absolute URL a client can open, filling in the scheme, the current portal domain and the virtual root the portal is hosted on. Any signed-in user may call it, nothing has to be called first, and the call is read-only and idempotent - it neither checks that the path exists nor that the caller is allowed to open it. virtualPath is taken as it is: an omitted or empty value yields the portal root, a value starting with / is appended to that root, a value starting with ~/ is resolved against the virtual root, and a value that already starts with http://, https:// or mailto: is handed back unchanged. The answer is a bare JSON string. The domain in the result is the one the portal answers on right now, so a renamed portal starts returning the new domain without any change on the client. Use it to build links that have to survive a rename; the portal's own addresses and settings are read from GET api/2.0/settings instead.

Parameters​

NameInTypeDescriptionNotes
virtualPathqueryStringThe path to resolve. It is taken as it is: an omitted or empty value yields the portal root, a value starting with / is appended to that root, a value starting with ~/ is resolved against the virtual root, and one that already begins with http://, https:// or mailto: is handed back unchanged. Nothing checks that the path exists or that the caller may open it.[optional] [example: /portal/documents]

Responses​

Status codeDescriptionTypeResponse headers
200The absolute URL that the given portal-relative path resolves toStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

sendDeleteInstructions​

sendDeleteInstructions()

POST /api/2.0/portal/delete

Send removal instructions

Mails the portal owner the confirmation link that removes this portal; nothing about the portal changes until that link is used. The caller has to be the portal owner and hold the portal-settings right, and on a server installation the last remaining space cannot be removed - the call is refused when every other space has limited access. The letter goes to the owner's own address whoever asked for it, and it warns about the subscription that will stop renewing when the portal is on a paid plan. The operation keeps working while the portal's payment has lapsed, is mutating only in that it sends a message, and is rate-limited to five requests per fifteen minutes per user and path by default, answering 429 above that. Nothing is returned in the body. The link in the letter authorizes DELETE api/2.0/portal/delete, which deletes the portal with all of its rooms, files and accounts and cannot be undone. To pause the portal instead of deleting it, send the deactivation letter with POST api/2.0/portal/suspend.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200OK-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

sendSuspendInstructions​

sendSuspendInstructions()

POST /api/2.0/portal/suspend

Send suspension instructions

Mails the portal owner the two confirmation links that deactivate this portal and bring it back again, and records the request in the audit trail; the portal itself is not changed here. The caller has to be the portal owner and hold the portal-settings right, and on a server installation the last remaining space cannot be deactivated - the call is refused when every other space has limited access. The letter always goes to the owner's own address, and the operation keeps working while the portal's payment has lapsed. It is mutating only in that it sends a message, and it is rate-limited to five requests per fifteen minutes per user and path by default, answering 429 above that. Nothing is returned in the body, so a client cannot tell from the answer whether the mail was delivered. The first link in the letter authorizes PUT api/2.0/portal/suspend, which suspends the portal, and the second one authorizes PUT api/2.0/portal/continue, which makes it active again. To remove the portal instead of pausing it, use POST api/2.0/portal/delete.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200OK-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

suspendPortal​

suspendPortal()

PUT /api/2.0/portal/suspend

Deactivate a portal

Deactivates this portal: its status becomes suspended and its users can no longer work in it, while all of its rooms, files and accounts stay untouched. It is reached only with the deactivation link that POST api/2.0/portal/suspend mails to the portal owner - that link authorizes the call instead of an authentication token - and the owner is checked again here, so a link issued for another account is refused. On a server installation the last remaining space cannot be deactivated. The call is mutating and idempotent: it sets the status, records the deactivation in the audit trail and refreshes the portal's base domain, and repeating it leaves the portal suspended. Nothing is returned in the body; the new state is read from status in GET api/2.0/portal. Bring the portal back with PUT api/2.0/portal/continue, using the second link from the same letter. To remove the portal and its content for good, use DELETE api/2.0/portal/delete instead - that cannot be undone.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200OK-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

PortalUsersApi​

InvitationLinkWrapper createInvitationLink(InvitationLinkCreateRequestDto)

POST /api/2.0/portal/users/invitationlink

Create an invitation link

Creates the portal's invitation link for one role and returns it together with the URL to share. A portal keeps at most one link per role, so a call for a role that already has one is refused - read the existing link with GET api/2.0/portal/users/invitationlink/{employeeType} and change it with PUT api/2.0/portal/users/invitationlink instead. Inviting members has to be enabled for the portal (GET api/2.0/settings/invitationsettings), employeeType has to be DocSpaceAdmin, RoomAdmin or User, and expiration, when given, has to lie in the future and is read in the portal time zone. The caller needs the right to add users of that role, only the portal owner may create the DocSpace administrator link, and a link for a paying role additionally needs a free paid seat in the portal quota. The call is mutating and not idempotent. The answer carries the id needed to update or delete the link, the shortened url, maxUseCount and currentUseCount, expiration in the portal time zone - empty for a link that never expires - and isExpired.

Parameters​

NameInTypeDescriptionNotes
InvitationLinkCreateRequestDtobodyInvitationLinkCreateRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The invitation link as it was created, with the id to address it later and the url to shareInvitationLinkWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

InvitationLinkWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

StringWrapper deleteInvitationLink(InvitationLinkDeleteRequestDto)

DELETE /api/2.0/portal/users/invitationlink

Delete an invitation link

Deletes the portal's invitation link with the given id, so the URL shared from it stops letting anyone in; accounts that already joined through it are not touched. Inviting members has to be enabled for the portal (GET api/2.0/settings/invitationsettings) and the link has to exist - a second call with the same id is answered as not found. The caller needs the right to add users of the link's role, and only the portal owner may delete the DocSpace administrator link. The call is destructive and cannot be undone: a link for the same role has to be created again with POST api/2.0/portal/users/invitationlink, and it gets a new id, a new URL and a currentUseCount that starts from zero. Nothing is returned in the body. To stop invitations without losing the links, switch inviting members off for the whole portal with PUT api/2.0/settings/invitationsettings - the links then stay stored but are refused until it is switched on again.

Parameters​

NameInTypeDescriptionNotes
InvitationLinkDeleteRequestDtobodyInvitationLinkDeleteRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The invitation link is deleted and its URL no longer lets anyone join the portalStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

StringWrapper getInvitationLink(employeeType)

GET /api/2.0/portal/users/invite/{employeeType}

Get a legacy invitation link

Deprecated - use POST api/2.0/portal/users/invitationlink and the neighbouring operations under that path, which store the link and let it be read, changed and revoked. Builds a shortened URL that lets whoever opens it join this portal with the role given in the path, and returns it as a bare string; nothing is stored, so the link can afterwards be neither listed nor withdrawn. Inviting members has to be enabled for the portal - GET api/2.0/settings/invitationsettings reports that - otherwise the call is refused. The caller needs the right to add users of the requested role and only the portal owner may ask for a DocSpace administrator link; a caller without that right gets an empty string instead of an error, so treat an empty answer as a refusal. The call changes nothing on the portal and may be repeated, each time returning an equivalent link. The URL carries a confirmation key bound to the calling account and the portal alias; it has no use limit and stops being accepted once the portal's e-mail key lifetime has passed, seven days by default - neither of the two can be set per link, which is what the replacement operations add.

Parameters​

NameInTypeDescriptionNotes
employeeTypepathEmployeeTypeThe role whoever follows the link joins with. Only DocSpaceAdmin, RoomAdmin and User have a link; any other role is refused. The portal keeps at most one link per role, so this value alone identifies it.[required] [example: 1] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]

Responses​

Status codeDescriptionTypeResponse headers
200The invitation URL to hand to the invited person, or an empty string when the caller may not invite that roleStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getInvitationLinkByEmployeeType​

InvitationLinkWrapper getInvitationLinkByEmployeeType(employeeType)

GET /api/2.0/portal/users/invitationlink/{employeeType}

Get an invitation link by role

Returns the portal's invitation link for one role - the URL to share, how long it lasts and how often it has already been used. Inviting members has to be enabled for the portal (GET api/2.0/settings/invitationsettings) and employeeType has to be DocSpaceAdmin, RoomAdmin or User; the caller needs the right to add users of that role, only the portal owner may read the DocSpace administrator link, and a link for a paying role is shown only while the portal quota still has a free paid seat. The call is read-only and idempotent, but the url it returns is signed for the calling account, so two administrators are handed two different URLs for one and the same link. A role that has no link yet is answered with an empty body and 200 rather than a 404 - create the link with POST api/2.0/portal/users/invitationlink. expiration is in the portal time zone and empty for a link without a deadline, isExpired says whether that deadline has passed, and currentUseCount counts how many accounts have already joined through the link.

Parameters​

NameInTypeDescriptionNotes
employeeTypepathEmployeeTypeThe role whoever follows the link joins with. Only DocSpaceAdmin, RoomAdmin and User have a link; any other role is refused. The portal keeps at most one link per role, so this value alone identifies it.[required] [example: 1] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]

Responses​

Status codeDescriptionTypeResponse headers
200The invitation link of that role, or an empty body when the portal has no link for itInvitationLinkWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

InvitationLinkWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalUsersCount​

Int64Wrapper getPortalUsersCount()

GET /api/2.0/portal/userscount

Get a number of portal users

Returns how many accounts this portal currently has in the active state, whatever their role, so a client can show the seat usage next to the allowance. Accounts that were invited but have not joined yet and accounts that were disabled or removed are not counted. The caller needs the portal-settings right and is refused without it; the call is read-only and idempotent, and the number moves as soon as an account joins, is disabled or is deleted. The answer is a plain number, not an object. Compare it with countUser and countPaidUser from GET api/2.0/portal/quota to see how much of the allowance is left, and with GET api/2.0/portal/quota/right for the smallest quota that would still hold everyone. When the accounts themselves are needed, and not only how many there are, list them with the People API instead - this operation cannot filter by role, group or status.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The number of accounts of this portal that are in the active stateInt64WrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

Int64Wrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getUserById​

UserInfoWrapper getUserById(userID)

GET /api/2.0/portal/users/{userID}

Get a portal user

Returns one user of this portal, addressed by ID, in the shape the portal stores the account: display name, e-mail, contacts, role and status flags, and the dates of the profile. Nothing has to be called first, and the call is read-only and idempotent. Who may be read is decided per pair of accounts: a caller always reads their own profile, a DocSpace administrator reads anyone, a room administrator reads anyone except a guest they have no relation with, and a user or a guest reads nobody but themselves - a pair that is not allowed is refused. An ID that belongs to no account of this portal and an ID of a system account are both answered as not found, so a 404 does not tell the two apart. userID in the path has to be a GUID; the calling user's own profile is easier to fetch with GET api/2.0/people/@self. This operation hands back the internal user record - use GET api/2.0/people/{userid} for the same user in the People format, with the group, quota and access information a client usually needs.

Parameters​

NameInTypeDescriptionNotes
userIDpathUUID (uuid)The portal account the operation acts on, by user ID as GET api/2.0/people reports it. An ID belonging to no account of this portal and an ID of an internal system account are both answered as not found.[required] [example: 00000000-0000-0000-0000-000000000000]

Responses​

Status codeDescriptionTypeResponse headers
200The account of this portal, in the internal user formatUserInfoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
404No account with this ID exists on the portal, or the ID belongs to a system account--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

UserInfoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

markGiftMessageAsRead​

markGiftMessageAsRead()

POST /api/2.0/portal/present/mark

Mark a gift message as read

Marks the open-source gift message - the notice a server installation shows about its free edition - as read for the calling user, so the client stops displaying it. Any signed-in user may call it and nothing has to be called first. The flag is stored per user, so marking it read for one account leaves it unread for everybody else on the portal. The call is mutating but idempotent: repeating it changes nothing. It never fails on the caller's behalf - a storage error is written to the portal log and the operation still answers with a success, so the answer is no proof that the flag was saved. Nothing is returned in the body, and no operation reads the flag back or clears it again, which makes the change effectively permanent for that user. It touches only this one notice: portal-wide announcements and the letters the portal sends are unaffected, and other per-user settings are stored through the operations under api/2.0/settings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200OK-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

sendCongratulations​

sendCongratulations(Userid, Key)

POST /api/2.0/portal/sendcongratulations

Send congratulations

Sends the welcome letter that follows the registration of a new portal to the account named by userid and switches on the second authentication factor the installation is configured to require after registration; on a hosted portal in custom mode the registration data is mailed to the sales address as well. Open to unauthenticated callers: in place of a token it needs key, the confirmation key of the sign-in link the portal issued for that account, and that key is accepted for one hour after it was created - a wrong, foreign or expired key answers 403 and sends nothing. Both parameters go in the query string. The call is meant to be made once, right after registration; it is not idempotent, and every call within that hour sends the letters again. When the installation asks for SMS or an authenticator app after registration, this call is what enables that method for the whole portal, unless the new account is an internal test address. Nothing is returned in the body and there is no operation that reports afterwards whether the letters were delivered.

Parameters​

NameInTypeDescriptionNotes
UseridqueryUUID (uuid)The account the welcome letter is addressed to, by portal user ID. The key in key has to have been issued for this same account, so the pair is what authorises the call.[required] [example: 00000000-0000-0000-0000-000000000000]
KeyqueryStringThe confirmation key from the sign-in link the portal issued for that account, which stands in for a token here. It is accepted for one hour after it was created; a wrong, foreign or expired key answers 403 and sends nothing.[required] [example: birthday]

Responses​

Status codeDescriptionTypeResponse headers
200The welcome letters were sent and the configured second factor was switched on for the portal-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The confirmation key does not match the user or is older than one hour--
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

InvitationLinkWrapper updateInvitationLink(InvitationLinkUpdateRequestDto)

PUT /api/2.0/portal/users/invitationlink

Update an invitation link

Changes the deadline and the use limit of an existing invitation link, addressed by its id. The role of a link cannot be changed - delete it and create a link for the other role instead. Inviting members has to be enabled for the portal (GET api/2.0/settings/invitationsettings), the link has to exist, and maxUseCount may not be lower than the number of uses the link already has, which GET api/2.0/portal/users/invitationlink/{employeeType} reports as currentUseCount. An expiration in the past is refused; the body is applied as a whole, so omitting expiration clears the deadline and omitting maxUseCount removes the use limit. The caller needs the right to add users of the link's role and only the portal owner may change the DocSpace administrator link. The call is mutating, and repeating it with the same body leaves the link as it is. The whole link comes back as it now stands, with url signed for the calling account - the URL therefore differs between administrators while the link behind it is the same.

Parameters​

NameInTypeDescriptionNotes
InvitationLinkUpdateRequestDtobodyInvitationLinkUpdateRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The invitation link as it now stands, with the deadline and the use limit that were appliedInvitationLinkWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

InvitationLinkWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SecurityAccessToDevToolsApi​

setTenantDevToolsAccessSettings​

TenantDevToolsAccessSettingsWrapper setTenantDevToolsAccessSettings(TenantDevToolsAccessSettingsDto)

POST /api/2.0/settings/devtoolsaccess

Set the Developer Tools access settings

Sets whether the portal restricts the User role from using the developer tools (API keys, OAuth apps, webhooks); RoomAdmin and DocSpaceAdmin are never affected by this setting. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). This is a mutating, idempotent, portal-wide call: it applies to every User on the tenant immediately. It returns the saved setting; read the current value at any time from GET api/2.0/settings/devtoolsaccess.

Parameters​

NameInTypeDescriptionNotes
TenantDevToolsAccessSettingsDtobodyTenantDevToolsAccessSettingsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved developer tools access restriction for the User roleTenantDevToolsAccessSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantDevToolsAccessSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SecurityActiveConnectionsApi​

getAllActiveConnections​

ActiveConnectionsWrapper getAllActiveConnections()

GET /api/2.0/security/activeconnections

Get active connections

Lists the connections the calling user currently has open on this portal - one item per successful sign-in that is still active - so a client can show where the account is signed in and close what does not belong there. Any signed-in user may call it, nothing has to be called first, and the answer always covers the caller alone: the operation is read-only, idempotent and cannot show another user's connections. Items cover the last year and are ordered newest sign-in first, with the caller's own connection moved to the top and its browser, platform, IP address and location refreshed from the current request. loginEvent is the ID of that own connection and is 0 when the request was authenticated with a token in the Authorization header instead of the portal cookie; nothing is then marked as current, and a user with no stored connections gets a single item describing the current request. country and city are resolved from the IP address and stay empty when it cannot be located. Pass an item's id to PUT api/2.0/security/activeconnections/logout/{loginEventId} to end that one connection.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The caller's active connections, newest sign-in first, with loginEvent pointing at the connection the request itself was made withActiveConnectionsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ActiveConnectionsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

logOutActiveConnection​

BooleanWrapper logOutActiveConnection(loginEventId)

PUT /api/2.0/security/activeconnections/logout/{loginEventId}

Log out one connection

Closes one active connection: the sign-in behind loginEventId is marked inactive, the token and cookie tied to it stop working, the client holding it is disconnected and a logout entry is written to the portal audit trail. Take loginEventId from the id of an item of GET api/2.0/security/activeconnections, which also reports in loginEvent which connection the caller is using, so a client can avoid closing its own. A user may close their own connections, while closing somebody else's requires a DocSpace administrator and any other caller is refused with 403. The call is mutating, destructive for that one session and idempotent, and it leaves every other connection of the user alone - PUT api/2.0/security/activeconnections/logoutallexceptthis is the way to close the rest in one go. Only true means the connection was open and has just been closed; false comes back when this portal has no such active connection, including one that was already closed, and after any other failure.

Parameters​

NameInTypeDescriptionNotes
loginEventIdpathInteger (int32)The sign-in to act on, by login event ID. Take it from the id of an item of GET api/2.0/security/activeconnections, which also marks the connection the caller is using, so a client can avoid picking its own.[required] [example: 12345]

Responses​

Status codeDescriptionTypeResponse headers
200true when the connection was open and has been closed, false when this portal has no such active connection or the attempt failedBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator and the connection belongs to another user--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

logOutAllActiveConnectionsChangePassword​

StringWrapper logOutAllActiveConnectionsChangePassword()

PUT /api/2.0/security/activeconnections/logoutallchangepassword

Log out and reset password

Closes every active connection of the calling user and returns the link that user has to open to set a new password - the answer to a suspicious sign-in seen in GET api/2.0/security/activeconnections. Any signed-in user may call it for their own account and nothing has to be called first; the same clean-up for somebody else is PUT api/2.0/security/activeconnections/logoutall/{userId}. The call is mutating and destructive for sessions - every token and cookie issued to the user before it stops working and the clients holding them are disconnected - and it is not idempotent: the request is written to the portal audit trail, which invalidates the link any earlier call returned, and the caller's own client is handed a fresh cookie in the response and stays signed in through a new connection. The password itself is not changed here, and the link is handed back to the caller rather than mailed to the user: the URL carries a time-limited PasswordChange key, which the confirmation page it opens - or PUT api/2.0/people/{userid}/password - needs to accept the new password. A failure is swallowed instead of reported, so an empty body with status 200 means nothing was done and the call has to be repeated.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The URL the user has to open to set a new password, or an empty result when the operation failedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

logOutAllActiveConnectionsForUser​

logOutAllActiveConnectionsForUser(userId)

PUT /api/2.0/security/activeconnections/logoutall/{userId}

Log out a user everywhere

Closes every active connection of one portal user: the connections are marked inactive, every token and cookie issued to that user before the call stops working, the clients holding them are disconnected and a logout entry is written to the portal audit trail. Nothing has to be called first; userId is the portal user ID that GET api/2.0/people returns. A user may pass their own ID, while ending somebody else's connections requires a DocSpace administrator and any other caller is refused with 403. The call is mutating, destructive for those sessions and idempotent - a user with nothing open is not an error - and it returns no content, so the state afterwards is read from GET api/2.0/security/activeconnections. A caller who ends their own connections is handed a fresh cookie in the response and stays signed in through a new connection. Nothing else about the user changes: the account stays enabled and the password stays valid, and to keep the current connection alive instead use PUT api/2.0/security/activeconnections/logoutallexceptthis.

Parameters​

NameInTypeDescriptionNotes
userIdpathUUID (uuid)The portal account the operation acts on, by user ID as GET api/2.0/people reports it. Acting on an account other than the caller's own generally needs administrator rights.[required] [example: 00000000-0000-0000-0000-000000000000]

Responses​

Status codeDescriptionTypeResponse headers
200The connections of that user have been closed; the response carries no content-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator and the ID in the path is not their own--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

logOutAllExceptThisConnection​

StringWrapper logOutAllExceptThisConnection()

PUT /api/2.0/security/activeconnections/logoutallexceptthis

Log out other connections

Closes every active connection of the calling user except the one this request was made with, so the current client keeps working while every other browser and device is signed out. Any signed-in user may call it for their own account and nothing has to be called first. The connection to keep is the one behind the portal authentication cookie: a request authenticated with a token in the Authorization header has none, and then every connection of the user is closed, including the one that token belongs to - read loginEvent from GET api/2.0/security/activeconnections first to see which connection, if any, will survive. The call is mutating and destructive for the other sessions, and idempotent: the tokens behind them stop working, their clients are disconnected at once and a logout entry is written to the portal audit trail. It answers with the display name of the calling user, while an empty answer with status 200 means the attempt failed and nothing can be assumed about what was closed.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The display name of the calling user, or an empty result when the operation failedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SecurityAuditTrailDataApi​

createAuditTrailReport​

DocumentBuilderTaskWrapper createAuditTrailReport(format)

POST /api/2.0/security/audit/events/report

Start audit trail report

Queues a report of the portal's audit trail and returns the state of the background job that builds it. The report covers the period reaching from now back by the audit trail lifetime that GET api/2.0/security/audit/settings/lifetime reports and is never filtered: the query parameters of GET api/2.0/security/audit/events/filter do not apply here. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. The file is not ready when the response arrives - poll GET api/2.0/security/audit/events/report until isCompleted is true, then take resultFileUrl, and treat a non-empty error as a failed build. The finished file is saved to the caller's My documents section, as an XLSX workbook by default or as CSV when format=Csv, in which case resultFileId stays empty and only the name and the URL identify it. One job runs per caller and kind: calling again while the previous one is still building returns that job instead of starting a second, and DELETE api/2.0/security/audit/events/report cancels it.

Parameters​

NameInTypeDescriptionNotes
formatqueryAuditReportFormatThe format the report file is written in. The workbook format is the default and is the only one that leaves the finished file addressable by ID: a report asked for as CSV comes back with an empty resultFileId, so it can only be reached through resultFileName and resultFileUrl.[optional] [example: Xlsx] [enum: 0, 1]

Responses​

Status codeDescriptionTypeResponse headers
200The state of the queued job that builds the audit trail reportDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAuditEventsByFilter​

AuditEventArrayWrapper getAuditEventsByFilter(userId, moduleType, actionType, action, entryType, target, from, to, count, startIndex)

GET /api/2.0/security/audit/events/filter

Get filtered audit events

Returns the portal's audit events that match the filters in the query - by the user who acted, the module the action belongs to, the action and its type, the entity type and target, and the period - and is the operation behind the audit trail page. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan; when that option is missing the filters are silently ignored and the answer is the same twenty most recent events that GET api/2.0/security/audit/events/last returns, and when the login history and audit trail section is disabled altogether the call is answered with 402. Take the values accepted by action, actionType, moduleType and entryType from GET api/2.0/security/audit/types, and the tree they belong to from GET api/2.0/security/audit/mappers. A non-default action matches only that action and, combined with target, only its exact value; it also stops moduleType and actionType from narrowing the result, so combine target with entryType instead of action when filtering by target without pinning a single action. from and to are read as UTC instants while date comes back in the portal time zone, count defaults to 100 and cannot exceed it, and the filters are applied before the page window, so a full page means there may be more matching events beyond it. The operation is read-only.

Parameters​

NameInTypeDescriptionNotes
userIdqueryUUID (uuid)The user who performed the action, given by portal user ID. Leave it at the empty GUID to keep the events of every user.[optional] [example: 00000000-0000-0000-0000-000000000001]
moduleTypequeryLocationTypeThe module the recorded action belongs to, spelled as GET api/2.0/security/audit/types lists it under moduleTypes. GET api/2.0/security/audit/mappers shows which module records which action. The default value keeps every module.[optional] [example: Files] [enum: 0, 1, 2, 3, 27, 29, 30, 31]
actionTypequeryActionTypeThe kind of change the action made, spelled as GET api/2.0/security/audit/types lists it under actionTypes. The default value keeps every kind.[optional] [example: Create] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
actionqueryMessageActionThe exact action recorded, spelled as the messageAction of GET api/2.0/security/audit/mappers. Naming one narrows the answer to that single action and overrides moduleType and actionType, which stop narrowing anything once it is set.[optional] [example: FileCreated] [enum: 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5501, 5502, 5503, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 7000, 7001, 7002, 7003, 7004, 7005, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, -1]
entryTypequeryEntryTypeThe kind of object the action was performed on, spelled as GET api/2.0/security/audit/types lists it under entryTypes. Pair it with target to filter by object without pinning a single action.[optional] [example: File] [enum: 0, 1, 2, 23, 24, 25, 26, 27]
targetqueryStringThe object the action was performed on, as the audit trail recorded it - a file name, a user account, a room title. It is matched in full and exactly as stored, so it narrows the answer only when action or entryType is set as well.[optional] [example: document.docx]
fromqueryDate (date-time)The earliest moment an event may have been recorded at, read as a UTC instant. The date of the events that come back is in the portal time zone instead, so the two do not line up on a portal that is not on UTC.[optional] [example: 2024-01-01T00:00:00Z]
toqueryDate (date-time)The latest moment an event may have been recorded at, read as a UTC instant in the same way as from.[optional] [example: 2024-01-31T23:59:59Z]
countqueryInteger (int32)How many events one page may hold. The maximum is also the default, so a client that wants shorter pages has to ask for them; a full page means there may be further matches beyond it.[optional] [example: 100] [min: 1] [max: 100]
startIndexqueryInteger (int32)How many matching events to skip before the page begins, counting from the newest. Advance it by count to walk backwards through the trail.[optional] [example: 0]

Responses​

Status codeDescriptionTypeResponse headers
200Audit events matching the filters, newest first, or the twenty most recent events when the portal has no audit optionAuditEventArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The login history and audit trail section is not enabled for this portal--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuditEventArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAuditSettings​

TenantAuditSettingsResponseWrapper getAuditSettings()

GET /api/2.0/security/audit/settings/lifetime

Get audit lifetime settings

Returns how long this portal keeps its two security logs: loginHistoryLifeTime for login events and auditTrailLifeTime for audit events, both counted in days, together with lastModified, the moment the pair was last saved. The caller needs the portal-settings right of a DocSpace administrator, and in a cloud installation the login history and audit trail section must be enabled for the portal, otherwise the call is answered with 402; the audit option of the pricing plan is not required to read the values. Both numbers lie between 1 and 180 days, and a portal that never changed them reports the default of 180. They define the window the rest of the audit operations work in: GET api/2.0/security/audit/events/last looks exactly this far back, and the reports started by POST api/2.0/security/audit/login/report and POST api/2.0/security/audit/events/report cover exactly this period. The operation is read-only; change the values with POST api/2.0/security/audit/settings/lifetime.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The login history and audit trail lifetimes of the portal, in daysTenantAuditSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The login history and audit trail section is not enabled for this portal--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantAuditSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAuditTrailMappers​

AuditTrailProductMapperArrayWrapper getAuditTrailMappers(productType, moduleType)

GET /api/2.0/security/audit/mappers

Get audit trail mappers

Returns the audit vocabulary as the tree it really is: every product, the modules inside it, and for each module the actions it can record together with the type of change and the entity each of them applies to. Pass productType to keep a single product and moduleType to keep a single module inside the products that remain; omit both to get the whole tree. The caller needs the portal-settings right of a DocSpace administrator; the audit option of the pricing plan is not required, and the call is read-only and safe to repeat. Each action carries messageAction, the name to send as the action filter of GET api/2.0/security/audit/events/filter, next to actionType and entity, the values its actionType and entryType filters accept - this is where a caller learns which action belongs to which module instead of guessing. A filter that matches nothing yields an empty list rather than an error. Use GET api/2.0/security/audit/types for the flat lists of the same names.

Parameters​

NameInTypeDescriptionNotes
productTypequeryProductTypeThe product to keep, spelled as GET api/2.0/security/audit/types lists it under productTypes. Omitting it keeps every product; a value no product matches yields an empty list rather than an error.[optional] [example: Documents] [enum: 2, 3, 7, 8]
moduleTypequeryLocationTypeThe module to keep inside the products that survive productType, spelled as GET api/2.0/security/audit/types lists it under moduleTypes. Omitting it keeps every module of those products.[optional] [example: Files] [enum: 0, 1, 2, 3, 27, 29, 30, 31]

Responses​

Status codeDescriptionTypeResponse headers
200The products with their modules and the actions each module can recordAuditTrailProductMapperArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuditTrailProductMapperArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAuditTrailReport​

DocumentBuilderTaskWrapper getAuditTrailReport()

GET /api/2.0/security/audit/events/report

Get audit trail report status

Returns the state of the audit trail report the calling user has started, and is the operation to poll after POST api/2.0/security/audit/events/report. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. Jobs are kept per user and per report kind: this operation never shows another administrator's report, nor the login history report, which has its own status at GET api/2.0/security/audit/login/report. The answer is empty when no report of this kind is known for the caller; otherwise percentage grows towards 100, isCompleted turns true when the build has ended, error carries the failure message when it ended badly, and resultFileName and resultFileUrl point at the file saved to the caller's My documents section, while resultFileId is filled for an XLSX report only. The operation is read-only and safe to poll every few seconds; a finished job is dropped as soon as the next report of this kind is started.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the caller's audit trail report, or an empty answer when none is knownDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAuditTrailTypes​

AuditTrailTypesWrapper getAuditTrailTypes()

GET /api/2.0/security/audit/types

Get audit trail types

Returns the vocabularies the audit filters are built from: actions lists every action the portal can record, actionTypes the kinds of change they stand for, productTypes the products they belong to, moduleTypes the locations inside those products, and entryTypes the kinds of entity an action can be applied to. The caller needs the portal-settings right of a DocSpace administrator; the audit option of the pricing plan is not required, so the lists can be read on any portal. The operation is read-only, takes no parameters and depends on nothing else. Every value is the name to send in the matching query parameter of GET api/2.0/security/audit/events/filter or GET api/2.0/security/audit/login/filter, so read this operation once and reuse the answer instead of guessing spellings. The response is an untyped object holding those five arrays of names, and it changes only with the portal version. Use GET api/2.0/security/audit/mappers when the relations between products, modules and actions are needed rather than the flat lists.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The action, action type, product, module and entry type names accepted by the audit filtersAuditTrailTypesWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuditTrailTypesWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getLastAuditEvents​

AuditEventArrayWrapper getLastAuditEvents()

GET /api/2.0/security/audit/events/last

Get recent audit events

Returns the twenty most recent audit events of the portal - the creations, changes, deletions, sharing and settings updates its members made - as the short summary a settings page shows before anyone asks for the full trail. The caller needs the portal-settings right of a DocSpace administrator, and in a cloud installation the login history and audit trail section must be enabled for the portal, otherwise the call is answered with 402. The operation is read-only and takes no parameters: it looks back exactly as far as the audit trail lifetime that GET api/2.0/security/audit/settings/lifetime reports, returns at most twenty events ordered newest first, and cannot be filtered. date is given in the portal time zone, actionText is the readable sentence describing the event with every substituted value shortened to fifty characters here, and target names the entity the action was applied to. An empty list means nothing was recorded inside that period. Use GET api/2.0/security/audit/events/filter to filter by user, module, action or period.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The twenty most recent audit events of the portal, newest firstAuditEventArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The login history and audit trail section is not enabled for this portal--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuditEventArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

setAuditSettings​

TenantAuditSettingsResponseWrapper setAuditSettings(TenantAuditSettingsWrapper)

POST /api/2.0/security/audit/settings/lifetime

Set audit lifetime settings

Sets how long this portal keeps its login history and its audit trail, in days, and returns the pair as it was stored. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. Send both numbers inside settings: each has to be between 1 and 180 days, and a value outside that range is refused with 400 without either number being saved, so read the current pair from GET api/2.0/security/audit/settings/lifetime and resend the one that should stay as it is. The call replaces the stored settings rather than merging them, is idempotent, and takes effect at once: the period covered by GET api/2.0/security/audit/events/last and by both audit reports shrinks or grows with it, and events older than the new lifetime stop being reported. The change is itself recorded in the audit trail.

Parameters​

NameInTypeDescriptionNotes
TenantAuditSettingsWrapperbodyTenantAuditSettingsWrapper[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The login history and audit trail lifetimes as they were storedTenantAuditSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400A lifetime is outside the allowed range of 1 to 180 days--
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantAuditSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

terminateAuditTrailReport​

terminateAuditTrailReport()

DELETE /api/2.0/security/audit/events/report

Terminate audit trail report

Cancels the audit trail report the calling user has running and drops it from the build queue. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. Cancellation is handed to the same background service that builds the report, so a successful answer means the request was accepted rather than that the job has already stopped: poll GET api/2.0/security/audit/events/report to watch it disappear. The operation returns no content and touches only the caller's own audit trail report - the login history report is cancelled by DELETE api/2.0/security/audit/login/report, and no report of another user can be reached from here. It is idempotent: cancelling when nothing is running is not an error. A job stopped before it finished writing leaves nothing in My documents, and a report cancelled by mistake has to be built again with POST api/2.0/security/audit/events/report.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The cancellation of the caller's audit trail report has been accepted-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SecurityBannersVisibilityApi​

setTenantBannerSettings​

TenantBannerSettingsWrapper setTenantBannerSettings(TenantBannerSettingsDto)

POST /api/2.0/settings/banner

Set the banners visibility

Sets whether the portal's promotional banners are hidden for every user. Available only on an Enterprise license; every other plan is refused regardless of the caller's role. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). The flag only takes effect on a Standalone (self-hosted) installation; on SaaS, banners are always shown no matter what is saved here. This is a mutating, idempotent, portal-wide call: it applies to every user on the tenant immediately. It returns the saved setting; read the current value at any time from GET api/2.0/settings/banner.

Parameters​

NameInTypeDescriptionNotes
TenantBannerSettingsDtobodyTenantBannerSettingsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved promotional banners visibility settingTenantBannerSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantBannerSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SecurityCSPApi​

configureCsp​

CspWrapper configureCsp(CspRequestsDto)

POST /api/2.0/security/csp

Configure CSP settings

Replaces the list of external domains the portal's Content Security Policy trusts and returns the policy header the portal serves to browsers from that moment on. The list in domains replaces the stored one, so an omitted or empty list falls back to the portal's built-in policy, and every entry that is sent becomes an allowed source for scripts, styles, images, fonts, frames, media and connections at once. An entry may be a host, a host with a scheme, or a wildcard host such as *.example.com; it has to form a valid absolute address and may contain ASCII characters only, and an entry that does not is refused with 400 before anything is saved. The caller needs the portal-settings right of a DocSpace administrator, and the request is also refused with 403 when the header built from the list grows past the size configured for the installation, 15 KB by default. The change applies to the whole portal at once and is idempotent. Read the current state with GET api/2.0/security/csp.

Parameters​

NameInTypeDescriptionNotes
CspRequestsDtobodyCspRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The stored domains and the policy header the portal now servesCspWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400An entry of domains is not a valid address or holds non-ASCII characters--
403The caller does not have the portal-settings right of a DocSpace administrator, or the built policy header exceeds the size allowed for the installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CspWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getCspSettings​

CspWrapper getCspSettings()

GET /api/2.0/security/csp

Get CSP settings

Returns the Content Security Policy this portal serves: domains, the external hosts an administrator has allowed, and header, the whole policy value built from them together with the portal's own defaults and the integrations it has switched on. The operation is anonymous and reachable cross-origin - no token is needed - because the login and editor front-ends read it before anyone has signed in. It is read-only for the caller, but it does repair the portal's cached policy when the cache has lost it, so a call can rebuild the header instead of only reading it. The answer honours If-Modified-Since: send back the Last-Modified value of an earlier answer and an unchanged policy comes back as an empty not-modified response rather than a body. domains is an empty list on a portal nobody has configured, while header is filled from the defaults even then. Change the allowed domains with POST api/2.0/security/csp, which does need a DocSpace administrator.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The allowed domains and the full policy header the portal servesCspWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CspWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SecurityFirebaseApi​

docRegisterPusnNotificationDevice​

FireBaseUserWrapper docRegisterPusnNotificationDevice(FirebaseRequestsDto)

POST /api/2.0/settings/push/docregisterdevice

Register a push device

Registers one mobile device of the calling user for the push notifications of the Documents application, by storing the Firebase token that device was issued together with the initial isSubscribed state. The token is handed out by Firebase to the mobile client, so obtain it there before calling: nothing here checks it, and it is kept as an opaque string of up to 255 characters. Every signed-in member registers its own devices, whatever its role - owner, administrator, user or guest - and a registration is bound to the caller and the current portal, so another member's devices cannot be touched. The call is safe to repeat, but it is not an update: a token already registered comes back as it stands and isSubscribed from the request is ignored, so switch an existing registration on or off with PUT api/2.0/settings/push/docsubscribe instead. What comes back is the stored registration, with application always doc and isSubscribed as stored. Only a subscribed device is sent the room activity messages, such as an invitation to a room, a role change, an archived room or a new document in a room, and only while the installation itself is configured with Firebase credentials.

Parameters​

NameInTypeDescriptionNotes
FirebaseRequestsDtobodyFirebaseRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The stored device registration of the calling user, with the Firebase token, the doc application and the subscription state as they are keptFireBaseUserWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

FireBaseUserWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

subscribeDocumentsPushNotification​

FireBaseUserWrapper subscribeDocumentsPushNotification(FirebaseRequestsDto)

PUT /api/2.0/settings/push/docsubscribe

Set push subscription

Switches the push notifications of the Documents application on or off for one already registered device of the calling user: send that device's Firebase token together with isSubscribed true to let the messages through or false to stop them. The device has to be registered first with POST api/2.0/settings/push/docregisterdevice, and only the subscription state is written - the token is matched, never changed. Every signed-in member manages its own devices, whatever its role - owner, administrator, user or guest - and a token that belongs to another member or to another portal is not matched at all, so nothing of theirs can be switched. Repeating the call with the same pair leaves the registration as it is. What comes back is the updated registration, while an empty response means no registration of the caller carries that token and nothing was stored - register the device and call again. A device switched off keeps its token stored but is left out of the delivery, and the other devices of the same member are unaffected. Which kinds of notification the account receives at all is a separate setting, read with GET api/2.0/settings/notification/{type}.

Parameters​

NameInTypeDescriptionNotes
FirebaseRequestsDtobodyFirebaseRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The device registration as it stands after the change, or an empty response when no registration of the calling user carries the token that was sentFireBaseUserWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

FireBaseUserWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SecurityLoginHistoryApi​

createLoginHistoryReport​

DocumentBuilderTaskWrapper createLoginHistoryReport(format)

POST /api/2.0/security/audit/login/report

Start login history report

Queues a report of the portal's login history and returns the state of the background job that builds it. The report covers the period reaching from now back by the login history lifetime that GET api/2.0/security/audit/settings/lifetime reports and is never filtered: the query parameters of GET api/2.0/security/audit/login/filter do not apply here. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. The file is not ready when the response arrives - poll GET api/2.0/security/audit/login/report until isCompleted is true, then take resultFileUrl, and treat a non-empty error as a failed build. The finished file is saved to the caller's My documents section, as an XLSX workbook by default or as CSV when format=Csv, in which case resultFileId stays empty and only the name and the URL identify it. One job runs per caller and kind: calling again while the previous one is still building returns that job instead of starting a second, and DELETE api/2.0/security/audit/login/report cancels it.

Parameters​

NameInTypeDescriptionNotes
formatqueryAuditReportFormatThe format the report file is written in. The workbook format is the default and is the only one that leaves the finished file addressable by ID: a report asked for as CSV comes back with an empty resultFileId, so it can only be reached through resultFileName and resultFileUrl.[optional] [example: Xlsx] [enum: 0, 1]

Responses​

Status codeDescriptionTypeResponse headers
200The state of the queued job that builds the login history reportDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getLastLoginEvents​

LoginEventArrayWrapper getLastLoginEvents()

GET /api/2.0/security/audit/login/last

Get recent login events

Returns the twenty most recent login events of the whole portal - successful sign-ins, sign-outs and failed attempts alike - as the short summary a settings page shows before anyone asks for the full history. The caller needs the portal-settings right of a DocSpace administrator, and in a cloud installation the login history and audit trail section must be enabled for the portal, otherwise the call is answered with 402. The operation is read-only and takes no parameters: the number of events is fixed at twenty, nothing can be filtered, and events are ordered newest first. date is given in the portal time zone, actionText is the readable sentence describing the event with every substituted value shortened to fifty characters here, and country and city are resolved from the IP address and stay empty when it cannot be located. An empty list means the portal has recorded no login events yet. Use GET api/2.0/security/audit/login/filter to filter by user, action or period and to page through the whole history.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The twenty most recent login events of the portal, newest firstLoginEventArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The login history and audit trail section is not enabled for this portal--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

LoginEventArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getLoginEventsByFilter​

LoginEventArrayWrapper getLoginEventsByFilter(userId, action, from, to, count, startIndex)

GET /api/2.0/security/audit/login/filter

Get filtered login events

Returns the portal's login events that match the filters in the query - by user, by login action and by period - and is the operation behind the login history page. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan; when that option is missing the filters are silently ignored and the answer is the same twenty most recent events that GET api/2.0/security/audit/login/last returns, and when the login history and audit trail section is disabled altogether the call is answered with 402. Omit a filter to match everything. from and to are read as UTC instants while date comes back in the portal time zone, count defaults to 100 and cannot exceed it, startIndex skips events from the newest end, and the page window is applied to the log before the filters, so a page can hold fewer items than count while older matches still exist. The operation is read-only; take the values accepted by action from GET api/2.0/security/audit/types.

Parameters​

NameInTypeDescriptionNotes
userIdqueryUUID (uuid)The user whose sign-in attempts are kept, given by portal user ID. Leave it at the empty GUID to keep the events of every user.[optional] [example: 00000000-0000-0000-0000-000000000000]
actionqueryMessageActionThe sign-in action recorded, spelled as GET api/2.0/security/audit/types lists it under actions - a successful login, a failed one, a logout. The default value keeps every action.[optional] [example: FileCreated] [enum: 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5501, 5502, 5503, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 7000, 7001, 7002, 7003, 7004, 7005, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, -1]
fromqueryDate (date-time)The earliest moment an event may have been recorded at, read as a UTC instant. The date of the events that come back is in the portal time zone instead, so the two do not line up on a portal that is not on UTC.[optional] [example: 2024-01-15T10:30:00Z]
toqueryDate (date-time)The latest moment an event may have been recorded at, read as a UTC instant in the same way as from.[optional] [example: 2024-01-15T10:30:00Z]
countqueryInteger (int32)How many events one page may hold. The maximum is also the default, so a client that wants shorter pages has to ask for them.[optional] [example: 1] [min: 1] [max: 100]
startIndexqueryInteger (int32)How many events to skip before the page begins, counting from the newest. It is applied to the log before the filters, so a page can hold fewer events than count while older matches still exist.[optional] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200Login events matching the filters, newest first, or the twenty most recent events when the portal has no audit optionLoginEventArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The login history and audit trail section is not enabled for this portal--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

LoginEventArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getLoginHistoryReport​

DocumentBuilderTaskWrapper getLoginHistoryReport()

GET /api/2.0/security/audit/login/report

Get login history report status

Returns the state of the login history report the calling user has started, and is the operation to poll after POST api/2.0/security/audit/login/report. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. Jobs are kept per user and per report kind: this operation never shows another administrator's report, nor the audit trail report, which has its own status at GET api/2.0/security/audit/events/report. The answer is empty when no report of this kind is known for the caller; otherwise percentage grows towards 100, isCompleted turns true when the build has ended, error carries the failure message when it ended badly, and resultFileName and resultFileUrl point at the file saved to the caller's My documents section, while resultFileId is filled for an XLSX report only. The operation is read-only and safe to poll every few seconds; a finished job is dropped as soon as the next report of this kind is started.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the caller's login history report, or an empty answer when none is knownDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

terminateLoginHistoryReport​

terminateLoginHistoryReport()

DELETE /api/2.0/security/audit/login/report

Terminate login history report

Cancels the login history report the calling user has running and drops it from the build queue. The caller needs the portal-settings right of a DocSpace administrator plus the audit option of the portal's pricing plan, otherwise the call is answered with 402. Cancellation is handed to the same background service that builds the report, so a successful answer means the request was accepted rather than that the job has already stopped: poll GET api/2.0/security/audit/login/report to watch it disappear. The operation returns no content and touches only the caller's own login history report - the audit trail report is cancelled by DELETE api/2.0/security/audit/events/report, and no report of another user can be reached from here. It is idempotent: cancelling when nothing is running is not an error. A job stopped before it finished writing leaves nothing in My documents, and a report cancelled by mistake has to be built again with POST api/2.0/security/audit/login/report.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The cancellation of the caller's login history report has been accepted-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan has no audit option, or the login history and audit trail section is not enabled--
403The caller does not have the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SecurityOAuth2Api​

generateJwtToken​

StringWrapper generateJwtToken()

GET /api/2.0/security/oauth2/token

Generate JWT token

Issues a short-lived JWT that identifies the calling user to the identity service, the component that stores the OAuth2 applications of this installation and their consents. Any signed-in user may call it, nothing has to be prepared first, and the token always describes the caller - it cannot be issued on behalf of somebody else. The token is signed with the installation's own key and carries the user ID, name and e-mail, the portal ID and address, whether the caller is an administrator or a guest, and whether the portal's developer tools setting leaves OAuth2 applications open to ordinary users. It expires five minutes after it was issued and is meant to be presented to the identity service in the x-signature header, not to this API: requests to the portal are authorized with the token that POST api/2.0/authentication returns, and this JWT is not accepted in its place. The call is read-only and gives the token back as a plain string; ask for a fresh one per exchange instead of storing it.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The signed JWT identifying the caller, valid for five minutesStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SecuritySMTPSettingsApi​

getSmtpOperationStatus​

SmtpOperationStatusRequestsWrapper getSmtpOperationStatus()

GET /api/2.0/smtpsettings/smtp/test/status

Get SMTP test status

Returns the state of the test message that GET api/2.0/smtpsettings/smtp/test queued for this portal, and is the operation to poll while that test runs. A test has to be queued first; the caller needs the portal-settings right of a DocSpace administrator, and the SMTP settings section has to be enabled for the portal, otherwise the call is answered with 402. The call changes no settings, but it is not free of consequence: the first answer that reports completed true also discards the finished job, so a later call no longer knows about it - take error from that answer and keep it. An empty answer means the portal has no test on record, either because none was queued or because its result has already been read. While the job runs, percents climbs to 100 and status names the step reached, such as Connect to host or Send test message; error is empty until something fails and stays empty when the relay accepted the message. id identifies the queued job, of which a portal only ever has one.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the test message of the portal, or an empty answer when no test is on recordSmtpOperationStatusRequestsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The SMTP settings section is not enabled for this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SmtpOperationStatusRequestsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSmtpSettings​

SmtpSettingsWrapper getSmtpSettings()

GET /api/2.0/smtpsettings/smtp

Get SMTP settings

Returns the SMTP relay this portal sends its own mail through - host, port, sender identity and authentication flags - as it is stored for the portal. Nothing has to be called first; the caller needs the portal-settings right of a DocSpace administrator, and the SMTP settings section has to be enabled for the portal, otherwise the call is answered with 402. The call is read-only and safe to repeat. isDefaultSettings is true when the portal has no settings of its own and runs on the mail configuration of the installation: a standalone installation then shows those server-wide values, while a cloud portal is answered with an empty settings object instead, so an empty host together with isDefaultSettings true means nothing was ever saved here. credentialsUserPassword always comes back empty - the stored password cannot be read back, and a client that saves the settings again has to ask the user for it once more. port is the port that was saved, and settings saved without one are stored with 25. To find out whether the returned relay actually accepts mail, queue a test with GET api/2.0/smtpsettings/smtp/test.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The SMTP settings stored for the portal, with an empty password and isDefaultSettings telling whether the configuration of the installation is in useSmtpSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The SMTP settings section is not enabled for this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SmtpSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

resetSmtpSettings​

SmtpSettingsWrapper resetSmtpSettings()

DELETE /api/2.0/smtpsettings/smtp

Reset SMTP settings

Deletes the SMTP settings of this portal and puts it back on the mail configuration of the installation, so the portal stops using the relay saved by POST api/2.0/smtpsettings/smtp. Nothing has to be called first; the caller needs the portal-settings right of a DocSpace administrator, and the SMTP settings section has to be enabled for the portal, otherwise the call is answered with 402. The call is destructive and cannot be undone - the host, the sender identity and the credentials are gone and have to be entered again - but it is idempotent, and on a portal that has no settings of its own it changes nothing. Portal mail itself keeps working as long as the installation has a relay of its own configured. The answer holds the settings that are in force after the reset, always with isDefaultSettings true: the server-wide values in a standalone installation, an empty settings object in a cloud portal, and an empty credentialsUserPassword in both. Read them back at any time with GET api/2.0/smtpsettings/smtp.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The settings in force after the reset - the configuration of the installation, or an empty settings object in a cloud portalSmtpSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The SMTP settings section is not enabled for this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SmtpSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveSmtpSettings​

SmtpSettingsWrapper saveSmtpSettings(SmtpSettingsDto)

POST /api/2.0/smtpsettings/smtp

Save SMTP settings

Stores the SMTP relay that this portal will hand all of its own mail to, replacing whatever was saved before and taking the portal off the mail configuration of the installation. Nothing has to be called first; the caller needs the portal-settings right of a DocSpace administrator, and the SMTP settings section has to be enabled for the portal, otherwise the call is answered with 402. The call is mutating and idempotent - the same body saved twice leaves the same settings - and it applies to the next message the portal sends. The settings are stored unverified, no connection to host is attempted, so queue GET api/2.0/smtpsettings/smtp/test afterwards to find out whether they work. host and senderAddress must not be empty, senderDisplayName has to be present, and enableAuth true also requires credentialsUserName and credentialsUserPassword; a request that misses any of them is rejected and nothing is saved. port falls back to 25 when it is omitted, and useNtlm is accepted but not stored, so the saved settings always authenticate with a plain user name and password. The answer repeats the stored settings with the password emptied. Use DELETE api/2.0/smtpsettings/smtp to return to the configuration of the installation.

Parameters​

NameInTypeDescriptionNotes
SmtpSettingsDtobodySmtpSettingsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The SMTP settings now stored for the portal, with an empty passwordSmtpSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The SMTP settings section is not enabled for this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SmtpSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

testSmtpSettings​

SmtpOperationStatusRequestsWrapper testSmtpSettings()

GET /api/2.0/smtpsettings/smtp/test

Test SMTP settings

Queues a background job that sends a test message through the SMTP settings currently stored for the portal to the email address of the calling user, and returns the state of that job. Save the settings with POST api/2.0/smtpsettings/smtp first: the job always takes the stored settings and nothing can be passed to it here. The caller needs the portal-settings right of a DocSpace administrator, and the SMTP settings section has to be enabled for the portal, otherwise the call is answered with 402. The call is mutating, it sends mail, and it is rate-limited to five requests per fifteen minutes per user and path by default, answering 429 above that; while a test is still running the same job is returned instead of a second one being started. The message has not been sent when the answer arrives: poll GET api/2.0/smtpsettings/smtp/test/status until completed is true, then read error - empty means the relay accepted the message, otherwise it carries the reason. percents climbs to 100 and status names the step reached, such as Connect to host or Send test message. An unreachable relay is reported in error after a 30-second connection timeout, not as a failed request.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the queued test message, to be polled until completed is trueSmtpOperationStatusRequestsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The SMTP settings section is not enabled for this portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SmtpOperationStatusRequestsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsAccessToDevToolsApi​

getTenantAccessDevToolsSettings​

TenantDevToolsAccessSettingsWrapper getTenantAccessDevToolsSettings()

GET /api/2.0/settings/devtoolsaccess

Get the Developer Tools access settings

Returns whether the portal currently restricts the User role from using the developer tools (API keys, OAuth apps, webhooks). Requires an authenticated session; every role can read the restriction, even though it only limits what a User may do, not what a RoomAdmin or DocSpaceAdmin may do. This is a read-only, idempotent call. Change the restriction with POST api/2.0/security/devtoolsaccess, which requires the EditPortalSettings permission.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Whether the User role is currently restricted from using the developer toolsTenantDevToolsAccessSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantDevToolsAccessSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsAuthorizationApi​

getAuthServices​

AuthServiceRequestsArrayWrapper getAuthServices()

GET /api/2.0/settings/authservice

Get the authorization services

Returns the catalogue of third-party storage and authorization providers DocSpace can integrate with (for example Amazon S3, Dropbox, Google, or Telegram), including whichever keys were last saved for each one that currently has any configured. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). This is a read-only, idempotent call, and the list is not paginated; entries are ordered by the provider's configured display order. Only providers that expose at least one manageable key are included, so a provider with nothing to configure is omitted entirely. Save or change a provider's keys with POST api/2.0/settings/authservice.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Third-party providers with a manageable key, and their last-saved key valuesAuthServiceRequestsArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AuthServiceRequestsArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveAuthKeys​

BooleanWrapper saveAuthKeys(AuthServiceRequestsDto)

POST /api/2.0/settings/authservice

Save the authorization keys

Saves the authorization keys for one third-party storage or authorization provider, identified by name, or clears them when every submitted key is left empty. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission); a provider that does not allow its keys to be changed from the API rejects the call outright. A provider that is only available on a paid plan additionally requires the portal's tariff to include third-party storage, or Standalone licensing, before the call is accepted. Keys that fail the provider's own validation are cleared and the call is rejected rather than left partially applied. This is a mutating, idempotent call: resaving identical keys succeeds and reports no change. It returns whether the keys actually changed, not the keys themselves; connecting Telegram or an external database through this call also triggers the matching real-time connection update.

Parameters​

NameInTypeDescriptionNotes
AuthServiceRequestsDtobodyAuthServiceRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Whether the provider's keys actually changedBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The submitted keys failed the provider's own validation--
402The provider is a paid option not covered by the portal's current pricing plan--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

testExternalDatabaseConnection​

ConnectionTestResultWrapper testExternalDatabaseConnection(ExternalDatabaseSettings)

POST /api/2.0/settings/authservice/externaldb/test

Test external database connection

Probes connectivity to an external database using the settings supplied in the request, without saving them or affecting the portal's own configuration. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). SQLite is only accepted as a target on a Standalone (self-hosted) installation; requesting it on SaaS is reported as a failed connection rather than an error. This is a read-only call, safe to retry. A failed connection is not an HTTP error: the response always comes back as a normal success with success=false and an error message describing what went wrong.

Parameters​

NameInTypeDescriptionNotes
ExternalDatabaseSettingsbodyExternalDatabaseSettings[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Connection test result: a success flag and, on failure, an error messageConnectionTestResultWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ConnectionTestResultWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsBannersVisibilityApi​

getTenantBannerSettings​

TenantBannerSettingsWrapper getTenantBannerSettings()

GET /api/2.0/settings/banner

Get the banners visibility

Returns whether the portal's promotional banners are currently hidden from every user's interface. Requires an authenticated session; every role can read it, since the flag affects what they see regardless of their own permissions. This is a read-only, idempotent call. The flag only takes effect on a Standalone (self-hosted) installation; on SaaS, banners are always shown no matter what is saved here. Change the setting with POST api/2.0/settings/banner, which additionally requires an Enterprise license.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Whether the portal's promotional banners are currently hiddenTenantBannerSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantBannerSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsCommonSettingsApi​

closeAdminHelper​

closeAdminHelper()

PUT /api/2.0/settings/closeadminhelper

Close the admin helper

Dismisses the administrator helper tip for the caller, so it is not shown again on this account. Available only to a DocSpace administrator, which includes the portal Owner, on a Standalone (self-hosted) installation running outside white-label custom mode; every other caller is refused. This is a mutating, idempotent call scoped to the calling account only; it never affects other administrators. It returns no data on success.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The admin helper tip was dismissed for the caller-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405The caller is not a DocSpace administrator, or the portal is on SaaS, custom mode, or not Standalone--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

completeWizard​

WizardSettingsWrapper completeWizard(WizardRequestsDto)

PUT /api/2.0/settings/wizard/complete

Complete the Wizard settings

Finishes the initial portal setup wizard: sets the owner's password and locale, applies the supplied license if one is required, and marks the wizard as completed so it is not shown again. This call is not for a normal logged-in session: it requires a confirmation link bearing the Wizard claim, of the kind issued when a new portal is created, and the link is consumed as part of authenticating the request; the caller must also hold the EditPortalSettings permission. An empty password or a malformed email address is rejected without completing the wizard, and so is a missing, invalid, or expired license, or a license whose user quota does not cover the portal. This call is meant to run once per portal; running it again is accepted but has no further effect once the wizard is already completed. It returns the resulting wizard settings, including the completed flag.

Parameters​

NameInTypeDescriptionNotes
WizardRequestsDtobodyWizardRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Resulting wizard settings, including the completed flagWizardSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The email address is malformed, or the password is empty--
402The supplied license is missing, invalid, expired, or its user quota does not cover the portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WizardSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

TenantDeepLinkSettingsWrapper configureDeepLink(DeepLinkConfigurationRequestsDto)

POST /api/2.0/settings/deeplink

Configure the deep link settings

Sets how the portal responds when a client opens a DocSpace link on a mobile device: always in the browser, always in the native app, or asking the user to choose each time. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). The handling mode must be one of the documented enum values; anything else is rejected without being saved. This is a mutating, idempotent call: sending the same mode again leaves the setting unchanged. It returns the saved deep link settings, including the timestamp of the last change; read the current value at any time, including anonymously, from GET api/2.0/settings/deeplink.

Parameters​

NameInTypeDescriptionNotes
DeepLinkConfigurationRequestsDtobodyDeepLinkConfigurationRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved deep link handling settingsTenantDeepLinkSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The handling mode is not one of the supported deep link handling values--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantDeepLinkSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

deletePortalColorTheme​

CustomColorThemesSettingsWrapper deletePortalColorTheme(id)

DELETE /api/2.0/settings/colortheme

Delete a color theme

Removes a custom color theme from the portal by its ID. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). An ID belonging to one of the built-in default themes is not removable; the call succeeds but leaves the theme list unchanged. If the deleted theme was the currently selected one, the theme with the lowest remaining ID is selected automatically. This is a mutating, idempotent call: deleting an ID that is already gone succeeds without error and again leaves nothing changed. It returns the full updated theme configuration, including the (possibly new) selected theme.

Parameters​

NameInTypeDescriptionNotes
idqueryInteger (int32)The theme to remove, by theme ID. An ID belonging to a built-in theme leaves the list untouched, and so does one that is already gone - neither is reported as an error. Removing the theme currently in use moves the portal to the remaining theme with the lowest ID.[required] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200Updated color theme configuration: saved themes, selected theme, and plan limitCustomColorThemesSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomColorThemesSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getDeepLinkSettings​

TenantDeepLinkSettingsWrapper getDeepLinkSettings()

GET /api/2.0/settings/deeplink

Get the deep link settings

Returns how the portal currently responds when a client opens a DocSpace link on a mobile device: always in the browser, always in the native app, or asking the user to choose. No permission is required; anonymous callers can read it too. This is a read-only, idempotent call. The response supports conditional requests: send the standard If-Modified-Since header with the previous lastModified value, and an unchanged response comes back empty instead of resending the settings. Change the mode with POST api/2.0/settings/deeplink, which requires the EditPortalSettings permission.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Current deep link handling settingsTenantDeepLinkSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantDeepLinkSettingsWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPaymentSettings​

PaymentSettingsWrapper getPaymentSettings()

GET /api/2.0/settings/payment

Get the payment settings

Returns the portal's payment-related configuration: the sales contact email, the URL to buy or extend a subscription, whether the portal is Standalone, the current license's trial status and expiration date, and the maximum quota quantity that can be purchased at once. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). This is a read-only, idempotent call. It remains reachable even while the portal's own subscription payment is overdue, since this is how the caller finds the link to resolve it.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Payment-related settings: sales contact, buy URL, Standalone flag, license, and quota capPaymentSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

PaymentSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalColorTheme​

CustomColorThemesSettingsWrapper getPortalColorTheme()

GET /api/2.0/settings/colortheme

Get a color theme

Returns the portal's color theme configuration: every saved custom theme, which one is currently selected, and how many custom themes the plan still allows. No permission is required; anonymous callers can read it too. This is a read-only, idempotent call. The response supports conditional requests: send the standard If-Modified-Since header with the previous lastModified value, and an unchanged response comes back empty instead of resending the same settings. A limit of 0 means the plan does not cap the number of custom themes.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Current color theme configuration: saved themes, selected theme, and plan limitCustomColorThemesSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomColorThemesSettingsWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalHostname​

StringWrapper getPortalHostname()

GET /api/2.0/settings/machine

Get the portal hostname

Returns the hostname the current request arrived on, exactly as sent in the HTTP Host header, so a client mid-setup can learn the address the portal is actually reachable at. This call is not for a normal logged-in session: it requires a confirmation link bearing the Wizard claim, of the kind generated during initial portal setup, and the link is consumed as part of authenticating the request. This is a read-only, idempotent call. The value reflects whatever the caller connected through, including a reverse proxy's public name, and is not necessarily the tenant's configured alias or mapped domain.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Hostname the current request arrived onStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

StringWrapper getPortalLogo()

GET /api/2.0/settings/logo

Get a portal logo

Returns the absolute URL of the portal's current logo image, already resolved against the active white-label branding. Requires an authenticated session; every role, including Guest, can read it. This is a read-only, idempotent call. The response supports conditional requests: send the standard If-Modified-Since header with the previous lastModified value, and an unchanged response comes back empty instead of resending the same URL. The URL points at whatever image is currently configured, including the default DocSpace logo when no custom branding has been set.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Absolute URL of the portal's current logo imageStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPortalSettings​

SettingsWrapper getPortalSettings(withpassword)

GET /api/2.0/settings

Get the portal settings

Returns the current portal's general configuration: branding, culture, feature flags, and DocSpace/Standalone mode, everything the client needs to render its shell before or after login. No permission is required, but the response shape depends on the caller's identity. An anonymous caller receives only the public subset (culture, branding, DocSpace/Standalone flags, deep link data, setup-wizard and join-by-domain hints); once authenticated, the response also includes tenant-specific fields such as the owner ID, time zone, invitation limit, AI/banner/dev-tools flags, and, for a DocSpace administrator, the tenant wallet's low-balance flag. This is a read-only, idempotent call. Pass withPassword=true to also receive the parameters (salt, iteration count, hash size) used to hash the password client-side before it is sent to the authentication endpoints; these are only added for an anonymous caller or when explicitly requested, never as part of the default authenticated response.

Parameters​

NameInTypeDescriptionNotes
withpasswordqueryBooleanWhether the answer also carries the salt, iteration count and hash size a client needs to hash a password before sending it to the authentication operations. They are included for an anonymous caller anyway; for a signed-in one they are left out unless this is set.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200Current portal settings, tailored to the caller's authentication stateSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SettingsWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSocketSettings​

SocketSettingsWrapper getSocketSettings()

GET /api/2.0/settings/socket

Get the socket settings

Returns the base URL of the portal's real-time notification hub (Socket.IO), which the client connects to for live updates such as file changes, presence, or quota alerts. Requires an authenticated session; every role can read it. This is a read-only, idempotent call. The value comes from server-side configuration and cannot be changed through this API; an empty url means the portal has no notification hub configured and the client should not attempt to connect.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Base URL of the portal's real-time notification hubSocketSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SocketSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSupportedCultures​

STRINGArrayWrapper getSupportedCultures()

GET /api/2.0/settings/cultures

Get supported languages

Returns the two- or four-letter language codes of every culture currently enabled on the portal (for example en-US), used to populate a language picker before or after login. No permission is required; anonymous callers can read it too. This is a read-only, idempotent call, and the list is not paginated. The response supports conditional requests: an unchanged result is signaled instead of resending the same list. The set of enabled cultures is a portal-wide configuration value, not a per-user preference.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Language codes of every culture currently enabled on the portalSTRINGArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

STRINGArrayWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantAiAccessSettings​

TenantAiAccessSettingsWrapper getTenantAiAccessSettings()

GET /api/2.0/settings/ai-access

Get the AI access settings

Returns whether AI functionality (chat, agents, vectorization) is currently available on the portal at all; AI is enabled by default. Requires an authenticated session; every role can read it. This is a read-only, idempotent call. When the setting is disabled, every AI-specific endpoint and folder is unavailable regardless of the caller's own permissions; this call only reports the portal-wide switch, not any per-user entitlement.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Whether AI functionality is currently enabled for the portalTenantAiAccessSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantAiAccessSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantUserInvitationSettings​

TenantUserInvitationSettingsWrapper getTenantUserInvitationSettings()

GET /api/2.0/settings/invitationsettings

Get the user invitation settings

Returns whether the portal currently allows inviting new members and new guests at all. No permission is required; anonymous callers can read it too, since the invitation flow itself may run before the caller has signed in. This is a read-only, idempotent call. The response supports conditional requests: send the standard If-Modified-Since header with the previous lastModified value, and an unchanged response comes back empty instead of resending the same settings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Whether inviting new members and new guests is currently allowedTenantUserInvitationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantUserInvitationSettingsWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTimeZones​

TimezonesRequestsArrayWrapper getTimeZones()

GET /api/2.0/settings/timezones

Get time zones

Returns every time zone known to the host machine, each with its IANA identifier and a human-readable display name, ordered from the most negative to the most positive UTC offset. This call is not for a normal logged-in session: it requires a confirmation link bearing the Wizard or Administrators claim, of the kind generated during initial portal setup or issued by an administrator, and the link is consumed as part of authenticating the request. This is a read-only, idempotent call, and the list is not paginated. Use the returned id values wherever the portal expects a time zone identifier; an unrecognized value is rejected there, not here.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Every time zone known to the host, with its IANA ID and display nameTimezonesRequestsArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TimezonesRequestsArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveDefaultFolder​

StudioDefaultPageSettingsWrapper saveDefaultFolder(DefaultProductRequestDto)

PUT /api/2.0/settings/defaultfolder

Set the default folder

Sets which folder the current user's account opens into by default, such as My Documents, the rooms list, or favorites. Requires an authenticated session; every role may set its own default, and the change never affects any other user. Only folder types the client actually offers as a landing page are accepted; picking My Documents (USER) as a Guest is rejected too, since guests have no personal storage. This is a mutating, idempotent call. It returns the saved setting.

Parameters​

NameInTypeDescriptionNotes
DefaultProductRequestDtobodyDefaultProductRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved default folder setting for the current userStudioDefaultPageSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StudioDefaultPageSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveDnsSettings​

StringWrapper saveDnsSettings(DnsSettingsRequestsDto)

PUT /api/2.0/settings/dns

Save the DNS settings

Maps a custom domain name onto the current tenant, or clears the mapping, so the portal becomes reachable under the caller's own DNS name instead of only its default alias. Available only on a Standalone (self-hosted) installation; on SaaS the call is always refused. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). Disable the mapping by passing enable=false, in which case the domain name in the request is ignored. A domain that collides with the portal's reserved base domain, or otherwise fails validation, is rejected without changing the current mapping. This is a mutating, idempotent call. On success the previous domain also stops answering, and any CSP configuration referencing it is updated to the new one.

Parameters​

NameInTypeDescriptionNotes
DnsSettingsRequestsDtobodyDnsSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Confirmation that the DNS mapping was updatedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The domain name is invalid, or collides with the portal's reserved base domain--
402This option is not available under the portal's current pricing plan--
405The portal is not a Standalone installation, so a custom domain cannot be mapped--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveMailDomainSettings​

StringWrapper saveMailDomainSettings(MailDomainSettingsRequestsDto)

POST /api/2.0/settings/maildomainsettings

Save the mail domain settings

Overwrites the portal's trusted mail domain configuration, which controls which email domains are treated as already verified when a user is invited or self-registers. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). When the requested mode is a custom domain list, every domain is normalized to lowercase and checked against the expected hostname format; a domain that fails the check, or an empty custom list, causes the whole call to be rejected without saving anything. For the other modes the domain list in the request is ignored. The inviteUsersAsVisitors flag controls whether users who join through a trusted domain are added as full members or as visitors, and takes effect on the next join rather than retroactively. This is a mutating, idempotent call: repeating it with the same body leaves the portal in the same state. On success it returns a confirmation message, not the saved settings themselves; read them back from GET api/2.0/settings.

Parameters​

NameInTypeDescriptionNotes
MailDomainSettingsRequestsDtobodyMailDomainSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Confirmation message that the trusted mail domain settings were savedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

savePortalColorTheme​

CustomColorThemesSettingsWrapper savePortalColorTheme(CustomColorThemesSettingsRequestsDto)

PUT /api/2.0/settings/colortheme

Save a color theme

Adds or updates a custom color theme, or changes which theme is selected, for the whole portal. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). Pass theme to create or edit one: an existing theme is matched and updated by its ID, a new one is appended, and an ID that collides with a built-in default theme is treated as a request to create a new custom theme instead of overwriting the default. Once the plan's custom-theme limit is reached, a new theme is silently not added rather than rejected with an error, so check the returned themes count against limit before assuming it was saved. Pass selected to switch the active theme; an ID that does not match any existing theme is ignored. This is a mutating call, not strictly idempotent once the limit has been reached. It returns the full updated theme configuration.

Parameters​

NameInTypeDescriptionNotes
CustomColorThemesSettingsRequestsDtobodyCustomColorThemesSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Updated color theme configuration: saved themes, selected theme, and plan limitCustomColorThemesSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CustomColorThemesSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setTenantAiAccessSettings​

TenantAiAccessSettingsWrapper setTenantAiAccessSettings(TenantAiAccessSettingsDto)

POST /api/2.0/settings/ai-access

Set the AI access settings

Turns AI functionality (chat, agents, vectorization) on or off for the whole portal; AI is enabled by default. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission); every other caller is refused. Disabling it immediately hides the AI Agents folder from root folder listings, makes AI status checks report disabled, and makes AI chat endpoints unreachable for every user on the tenant, not only the caller. This is a mutating, idempotent, portal-wide call, and the change is pushed to already-connected clients over the real-time notification hub rather than waiting for their next request. It returns the saved setting.

Parameters​

NameInTypeDescriptionNotes
TenantAiAccessSettingsDtobodyTenantAiAccessSettingsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved AI access setting for the portalTenantAiAccessSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, so the AI access setting cannot be changed--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantAiAccessSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateEmailActivationSettings​

EmailActivationSettingsWrapper updateEmailActivationSettings(EmailActivationSettings)

PUT /api/2.0/settings/emailactivation

Update the email activation settings

Updates the current user's own preference for whether the email confirmation prompt is displayed on their account. Requires an authenticated session; every role may change its own setting, and the change never affects any other user. This is a mutating, idempotent call. It returns the settings exactly as submitted, without validating them against the account's actual email confirmation state, so show can be set to true even after the address is already confirmed.

Parameters​

NameInTypeDescriptionNotes
EmailActivationSettingsbodyEmailActivationSettings[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Email activation settings exactly as submittedEmailActivationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

EmailActivationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateInvitationSettings​

TenantUserInvitationSettingsWrapper updateInvitationSettings(TenantUserInvitationSettingsRequestDto)

PUT /api/2.0/settings/invitationsettings

Update the user invitation settings

Sets whether the portal allows inviting new members and new guests. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). Disabling member or guest invitations only blocks creating new invitations going forward; it does not revoke links already issued or remove members already invited. This is a mutating, idempotent, portal-wide call. It returns the saved setting; read the current value at any time, including anonymously, from GET api/2.0/settings/invitationsettings.

Parameters​

NameInTypeDescriptionNotes
TenantUserInvitationSettingsRequestDtobodyTenantUserInvitationSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved user invitation settingsTenantUserInvitationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantUserInvitationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsCookiesApi​

getCookieSettings​

CookieSettingsWrapper getCookieSettings()

GET /api/2.0/settings/cookiesettings

Get the cookie lifetime settings

Returns how long an authentication session of this portal stays valid: lifeTime in minutes together with the enabled flag that says whether that limit is applied at all. The caller needs the portal-settings right of a DocSpace administrator - the portal owner and a DocSpace administrator qualify, any other member is refused - and the call is read-only. The pair describes the whole portal rather than the calling user, and it is never empty: a portal nobody has configured answers lifeTime 1440, one day, with enabled false. Read the two fields together, because the number alone does not say how long a session lasts - while enabled is false the stored number is ignored and an issued session is honoured for a year, and lifeTime 0 with enabled true means a session that never expires on its own. On an installation whose configuration hides the cookie section the built-in default pair comes back instead of the stored one. GET api/2.0/settings carries the same flag as cookieSettingsEnabled without the number; change the pair with PUT api/2.0/settings/cookiesettings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The authentication session lifetime of the portal in minutes together with the flag that says whether that limit is appliedCookieSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CookieSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateCookieSettings​

StringWrapper updateCookieSettings(CookieSettingsRequestsDto)

PUT /api/2.0/settings/cookiesettings

Update the cookie lifetime settings

Stores how long an authentication session of this portal stays valid: lifeTime in minutes together with the enabled flag that switches the limit on. The caller needs the portal-settings right of a DocSpace administrator - the portal owner and a DocSpace administrator qualify, any other member is refused - and on an installation whose configuration hides the cookie section nothing is stored and the call is answered with 402. A lifeTime above 9999 minutes is not rejected but clamped to 9999, while 0 or less clears the number instead, which with enabled true leaves sessions that never expire on their own. Any positive lifeTime raises the session version of the portal: every session issued before the call stops being accepted, and with enabled true the connections behind them are dropped as well. The caller is signed in again inside the same call and gets a fresh session cookie in the response, so a client that keeps sending the token it held before this call is the one locked out. The change is recorded in the audit trail. What comes back is a localized confirmation message; read the stored pair with GET api/2.0/settings/cookiesettings.

Parameters​

NameInTypeDescriptionNotes
CookieSettingsRequestsDtobodyCookieSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200A localized message confirming that the session lifetime has been savedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The installation hides the cookie lifetime section, or the portal's payment has lapsed--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsDocsCloudApi​

calculateDevPack​

PaymentCalculationWrapper calculateDevPack(DocsCloudDevPackRequestDto)

POST /api/2.0/settings/docscloud/calculatedevpack

Calculate the Docs Connect Dev Pack switch cost

Prices the upgrade of the paid Docs Connect subscription of the current portal to Docs Connect Dev Pack for the requested number of users, without changing the subscription or charging anything. It applies the same preconditions as the switch itself: the portal must hold an active Docs Connect subscription, must not already hold a Docs Connect Dev Pack one, and its tariff must not be delayed or unpaid; the quotas and the state of the current tariff are listed by GET api/2.0/portal/tariff. The caller must be a DocSpace administrator of a portal registered with the billing service. The call is read-only and idempotent, so it can be repeated for different quantities before any switch is made. It returns the amount that switching would cost, the three-letter ISO 4217 currency of that amount, the quantity the amount was calculated for, and the identifier of the billing operation; an empty result means the billing service could not price the switch, which should then not be attempted. The switch itself is performed by POST api/2.0/settings/docscloud/switchtodevpack with the same quantity and takes no identifier from this response; to price a change in the number of users of a subscription the portal already has, use PUT api/2.0/portal/payment/calculatewallet instead.

Parameters​

NameInTypeDescriptionNotes
DocsCloudDevPackRequestDtobodyDocsCloudDevPackRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The cost of switching to Docs Connect Dev Pack for the requested quantity, or an empty result if the billing service could not price itPaymentCalculationWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The quantity is below the allowed minimum, the portal has no active Docs Connect subscription, or it already has a Docs Connect Dev Pack subscription--
402The portal tariff is delayed or not paid, so the switch cannot be priced--
403The caller is not a DocSpace administrator, or the billing service is not configured--
404The portal is not registered as a billing customer, or the Docs Connect and Docs Connect Dev Pack wallet products are not configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

PaymentCalculationWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

createTenantQuotaReport​

DocumentBuilderTaskWrapper createTenantQuotaReport()

POST /api/2.0/settings/docscloud/tenant/quota/report

Start the Docs Connect quota report

Queues a background job that renders the current Docs Connect user quota of the portal into an xlsx file and saves that file in the My documents folder of the calling user; the report lists the editor and the viewer users with the type and the expiration date of each, and summarizes the internal, external and remaining users against the license limits. The file is not ready when the response arrives: poll GET api/2.0/settings/docscloud/tenant/quota/report until isCompleted is true, then take the file from resultFileId or resultFileUrl, and use DELETE api/2.0/settings/docscloud/tenant/quota/report to cancel a job that is still running. The caller must be a portal administrator allowed to edit the portal settings. The portal should have an activated Docs Connect tenant: this call does not check that, and without a tenant the job itself fails and reports the reason in the error of the status response. One report per caller runs at a time: while a report of this user is still being built, the call describes that running job and no second generation is started, so a repeated call is safe. What comes back is the initial state of the job, with percentage 0 and a created status, not the report; the report is a point-in-time snapshot and carries the generation date in its file name. To read the same data as JSON, without building a file, use GET api/2.0/settings/docscloud/tenant/quota.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The initial state of the queued report generation job, with zero progress and an uncompleted statusDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenant​

DocsCloudTenantWrapper getTenant(refresh)

GET /api/2.0/settings/docscloud/tenant

Get the Docs Connect tenant

Returns the Docs Connect tenant of the current portal: the Docs Connect server assigned to the portal, with its address, the date the tenant subscription ends and the payment the tenant was created for. A tenant exists only after a Docs Connect subscription has been granted, by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase, and only on an installation where the Docs Connect service is configured. The caller must be a portal administrator allowed to edit the portal settings. The call is read-only and idempotent, and it is served from a cache that keeps the tenant for an hour and the absence of a tenant for a minute, so pass refresh=true right after a subscription change to read the current state from Docs Connect instead. In the result, address is the absolute URL of the assigned server, isActive tells whether endDate is still in the future, and the dates are in UTC. An empty result means the portal has no Docs Connect tenant yet, which is the normal state before a subscription and not an error, so this is the operation to call to find out whether Docs Connect is activated at all. The license and server details, the editing settings, the user quota and the usage statistics are not part of it: they live in GET api/2.0/settings/docscloud/tenant/info, .../tenant/config, .../tenant/quota and .../tenant/usage, each of which fails with 400 while the portal has no activated tenant.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanPass true to skip the cached copy and request the tenant from Docs Connect again, replacing the cached one; with the default false the answer may be up to an hour old, or up to a minute old while the portal has no tenant.[optional] [default to false]

Responses​

Status codeDescriptionTypeResponse headers
200The Docs Connect tenant of the portal, or an empty result if no Docs Connect tenant is assigned to itDocsCloudTenantWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudTenantWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantConfig​

DocsCloudConfigWrapper getTenantConfig(refresh)

GET /api/2.0/settings/docscloud/tenant/config

Get the Docs Connect tenant configuration

Returns the configuration of the Docs Connect tenant of the current portal: its name, the security secret and header name, the file size limit and anonymous access switch of the server, the WOPI switch and the IP filter rules. The portal must have an activated Docs Connect tenant, granted by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase: an empty result from GET api/2.0/settings/docscloud/tenant means there is none and this call fails with 400. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the Docs Connect service is configured. The call is read-only, idempotent and cached for an hour, so pass refresh=true to read the current state from Docs Connect; the same values are changed by PUT api/2.0/settings/docscloud/tenant/config, which drops the cached copy itself, so no refresh is needed after an update. In the result, security.secret is a credential, so the response should be treated as sensitive; server.fileSizeLimit is in bytes and an update cannot raise it above 209715200 (200 MB); and an empty or absent ipFilter.rules means no address restriction is configured. The license and server version, the address of the assigned server, the per-user quota and the usage counters are not part of it: they live in .../tenant/info, .../tenant, .../tenant/quota and .../tenant/usage.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanPass true to skip the cached copy and request the configuration from Docs Connect again, replacing the cached one; with the default false the answer may be up to an hour old.[optional] [default to false]

Responses​

Status codeDescriptionTypeResponse headers
200The configuration of the Docs Connect tenant of the portal, with its security, server, WOPI and IP filter settingsDocsCloudConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal has no activated Docs Connect tenant, so there is no configuration to return--
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantInfo​

DocsCloudTenantInfoWrapper getTenantInfo(refresh)

GET /api/2.0/settings/docscloud/tenant/info

Get the Docs Connect tenant information

Returns the Docs Connect license of the current portal, the Docs Connect server serving it, the user limits of that license and the editor and viewer usage counted against them for the current period. The portal must have an activated Docs Connect tenant, granted by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase: an empty result from GET api/2.0/settings/docscloud/tenant means there is none and this call fails with 400. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the Docs Connect service is configured. The call is read-only, idempotent and cached for a minute, so pass refresh=true right after a subscription change to read the current state from Docs Connect. In the result, license.valid is when the license expires and license.trial is reported as false once the portal holds a paid Docs Connect or Docs Connect Dev Pack subscription, even when the license itself still says trial; usersLimit caps the editors and the viewers allowed, stats counts the active, internal, external and remaining users of each of those two kinds over the last stats.periodDay days, and the dates are in UTC. The editing settings, the per-user quota lists and the address of the assigned server live in .../tenant/config, .../tenant/quota and .../tenant, while .../tenant/usage gives one active-user total instead of this per-role breakdown.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanPass true to skip the cached copy and request the license, server and usage information from Docs Connect again, replacing the cached one; with the default false the answer may be up to a minute old.[optional] [default to false]

Responses​

Status codeDescriptionTypeResponse headers
200The Docs Connect license and server information of the portal, with the user limits of the license and the usage statistics for the current periodDocsCloudTenantInfoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal has no activated Docs Connect tenant, so there is no license information to return--
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudTenantInfoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantQuota​

DocsCloudQuotaWrapper getTenantQuota(refresh)

GET /api/2.0/settings/docscloud/tenant/quota

Get the Docs Connect tenant quota

Returns the Docs Connect user quota of the current portal: the users who currently count as Docs Connect editors and the users who count as viewers, each with the identifier Docs Connect knows them by and the date their quota entry expires. The portal must have an activated Docs Connect tenant, granted by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase: an empty result from GET api/2.0/settings/docscloud/tenant means there is none and this call fails with 400. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the Docs Connect service is configured. The call is read-only, idempotent and cached for a minute, so pass refresh=true to read the current state from Docs Connect. In the result, users holds the editor entries and usersView the viewer entries, both unordered; userId is the DocSpace user ID for a portal member and an identifier of Docs Connect's own for anyone else; expire is the date and time the entry expires, as a UTC string; and empty lists mean no user has been counted yet. It lists the users themselves, not the counters: the license limits with the per-role totals are in GET api/2.0/settings/docscloud/tenant/info, a single active-user total is in .../tenant/usage, and the same lists as a downloadable xlsx file are produced by POST api/2.0/settings/docscloud/tenant/quota/report.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanPass true to skip the cached copy and request the user quota from Docs Connect again, replacing the cached one; with the default false the answer may be up to a minute old.[optional] [default to false]

Responses​

Status codeDescriptionTypeResponse headers
200The editor and viewer users of the Docs Connect tenant of the portal, with the expiration date of each entryDocsCloudQuotaWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal has no activated Docs Connect tenant, so there is no user quota to return--
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudQuotaWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantQuotaReport​

DocumentBuilderTaskWrapper getTenantQuotaReport()

GET /api/2.0/settings/docscloud/tenant/quota/report

Get the Docs Connect quota report status

Returns the state of the Docs Connect user quota report that the current user started with POST api/2.0/settings/docscloud/tenant/quota/report, so that the caller can follow the generation and pick up the resulting file. It reports the caller's own job only: a report started by another administrator is not visible here, and an empty result means this user has no job, because none was started, because it was terminated, or because a finished one has already been cleared (a job state is kept for a day, and starting a new report drops the previous finished one); that is a normal state and not an error. The caller must be a portal administrator allowed to edit the portal settings. The call is read-only and idempotent, and it is meant to be polled while the job runs. In the result, percentage goes from 0 to 100 and isCompleted becomes true both on success and on failure, so check error: it is empty when the report was built and carries the failure message otherwise; resultFileId, resultFileName and resultFileUrl are filled in only once the file exists, and that file also stays in the My documents folder of the caller. Use the POST operation on this path to start a report and the DELETE one to cancel it.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The state of the Docs Connect quota report job of the caller, or an empty result if there is no such jobDocumentBuilderTaskWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocumentBuilderTaskWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTenantUsage​

DocsCloudUsageWrapper getTenantUsage(refresh)

GET /api/2.0/settings/docscloud/tenant/usage

Get the Docs Connect tenant usage

Returns the Docs Connect usage of the current portal: the number of users who have been active in Docs Connect in the current period, and the moment that period is counted from. The portal must have an activated Docs Connect tenant, granted by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase: an empty result from GET api/2.0/settings/docscloud/tenant means there is none and this call fails with 400. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the Docs Connect service is configured. The call is read-only, idempotent and cached for a minute, so pass refresh=true to read the current state from Docs Connect. In the result, activeCount counts the users seen since since, which is in UTC, and it is one total for the whole tenant, with no split by role and no limit to compare it against. For the editor and viewer breakdown with the license limits use GET api/2.0/settings/docscloud/tenant/info, and for the users counted one by one GET api/2.0/settings/docscloud/tenant/quota.

Parameters​

NameInTypeDescriptionNotes
refreshqueryBooleanPass true to skip the cached copy and request the usage statistics from Docs Connect again, replacing the cached one; with the default false the answer may be up to a minute old.[optional] [default to false]

Responses​

Status codeDescriptionTypeResponse headers
200The number of active Docs Connect users of the portal and the date the count starts fromDocsCloudUsageWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal has no activated Docs Connect tenant, so there is no usage information to return--
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudUsageWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

startDocsCloudTrial​

BooleanWrapper startDocsCloudTrial()

POST /api/2.0/settings/docscloud/trial

Start the Docs Connect trial

Activates the free Docs Connect trial subscription for the current portal, and, once a Docs Connect server is assigned to the portal, allows the address of that server in the Content Security Policy settings. The portal tariff must be in the trial or paid state (not delayed and not unpaid), and the portal must not already hold a Docs Connect trial, Docs Connect or Docs Connect Dev Pack subscription: the quotas of the current tariff are listed by GET api/2.0/portal/tariff. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the billing service is configured. The operation changes the portal subscription and is not idempotent: repeating it after a successful activation fails with 400. It returns true when the trial has been granted, and false when the billing service declines it (for example, when this portal has already used its trial), in which case nothing is changed. It never buys a paid plan: an existing paid Docs Connect subscription is moved to Docs Connect Dev Pack by POST api/2.0/settings/docscloud/switchtodevpack instead.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Boolean value: true if the trial subscription is activated, false if the billing service declines itBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal already has a Docs Connect trial, Docs Connect or Docs Connect Dev Pack subscription--
402The portal tariff is delayed or not paid, so the trial cannot be started--
403The caller is not allowed to edit the portal settings, or the billing service is not configured--
404The Docs Connect trial quota is not available on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

switchToDevPack​

BooleanWrapper switchToDevPack(DocsCloudDevPackRequestDto)

POST /api/2.0/settings/docscloud/switchtodevpack

Switch Docs Connect to Docs Connect Dev Pack

Upgrades the paid Docs Connect subscription of the current portal to Docs Connect Dev Pack for the requested number of users, charging the price difference to the portal wallet and moving the Docs Connect license to the new product. The portal must hold an active Docs Connect subscription, must not already hold a Docs Connect Dev Pack one, and its tariff must not be delayed or unpaid: the quotas and the state of the current tariff are listed by GET api/2.0/portal/tariff, and the amount that will be charged is returned by POST api/2.0/settings/docscloud/calculatedevpack for the same quantity. The caller must be a DocSpace administrator of a portal registered with the billing service. The switch is synchronous, mutating and not idempotent: repeating it after a successful call fails with 400, and concurrent calls for one portal are serialized so that the wallet is charged only once. It returns true when the subscription has been switched, and false when the billing service declines or fails to perform the switch, in which case nothing is charged and the portal stays on Docs Connect. Only the Docs Connect to Docs Connect Dev Pack direction is supported: to change the number of users of a subscription the portal already has, or to schedule a reversion from Docs Connect Dev Pack back to Docs Connect at the next billing period, use PUT api/2.0/portal/payment/updatewallet instead.

Parameters​

NameInTypeDescriptionNotes
DocsCloudDevPackRequestDtobodyDocsCloudDevPackRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Boolean value: true if the subscription is switched to Docs Connect Dev Pack, false if the billing service declines itBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The quantity is below the allowed minimum, the portal has no active Docs Connect subscription, or it already has a Docs Connect Dev Pack subscription--
402The portal tariff is delayed or not paid, so the subscription cannot be switched--
403The caller is not a DocSpace administrator, or the billing service is not configured--
404The portal is not registered as a billing customer, or the Docs Connect and Docs Connect Dev Pack wallet products are not configured on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

terminateTenantQuotaReport​

terminateTenantQuotaReport()

DELETE /api/2.0/settings/docscloud/tenant/quota/report

Terminate the Docs Connect quota report

Cancels the Docs Connect user quota report that the current user started with POST api/2.0/settings/docscloud/tenant/quota/report and removes its job, so that a new report can be started right away. There is no precondition: the call is accepted even when this user has no report job at all, and it affects the caller's own job only, never one started by another administrator. The caller must be a portal administrator allowed to edit the portal settings. The cancellation is asynchronous and idempotent: 200 means the request has been queued for the report worker, not that the job has already stopped, so poll GET api/2.0/settings/docscloud/tenant/quota/report until it returns an empty result. Nothing is returned in the body. A report file that has already been saved in the My documents folder of the caller is left there and has to be deleted through the file operations if it is no longer wanted.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The termination request has been queued for the report worker; the response has no body-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateTenantConfig​

DocsCloudConfigWrapper updateTenantConfig(DocsCloudConfig)

PUT /api/2.0/settings/docscloud/tenant/config

Update the Docs Connect tenant configuration

Replaces the configuration of the Docs Connect tenant of the current portal: its name, the security secret and header name, the file size limit and anonymous access switch of the server, the WOPI switch and the IP filter rules; it returns the configuration as Docs Connect stored it. The portal must have an activated Docs Connect tenant, granted by POST api/2.0/settings/docscloud/trial or by a Docs Connect purchase: an empty result from GET api/2.0/settings/docscloud/tenant means there is none and this call fails with 400. Read the current values with GET api/2.0/settings/docscloud/tenant/config first and send back whole sections: the sections left out of the request are not sent to Docs Connect at all, while a section that is present is sent with all of its fields, so a field left unset inside it goes out as 0, false or empty. The caller must be a portal administrator allowed to edit the portal settings, on an installation where the Docs Connect service is configured. The call is mutating, synchronous and idempotent, it is recorded in the portal audit trail, and it drops the cached configuration itself, so the next read returns the new values without refresh=true. The tenantName, security.secret, security.header and every ipFilter.rules address are capped at 255 characters and server.fileSizeLimit at 209715200 bytes (200 MB); a value outside those bounds is rejected with 400 before anything reaches Docs Connect. It changes these settings only, never the subscription, the user quota or the license.

Parameters​

NameInTypeDescriptionNotes
DocsCloudConfigbodyDocsCloudConfig[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The configuration of the Docs Connect tenant as Docs Connect stored it after the updateDocsCloudConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400A text field is longer than 255 characters, the file size limit is outside 0-209715200 bytes, or the portal has no activated Docs Connect tenant--
403The caller is not allowed to edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DocsCloudConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsEncryptionApi​

getStorageEncryptionProgress​

DoubleNullableWrapper getStorageEncryptionProgress()

GET /api/2.0/settings/encryption/progress

Get the storage encryption progress

Returns how far the running encryption or decryption of the installation storage has got, as a percentage from 0 to 100. It reports the run started by POST api/2.0/settings/encryption/start, whose direction, encryption or decryption, is told by GET api/2.0/settings/encryption/settings. An empty response means no run is in flight and no recent result is remembered: the value of a finished run is kept for one minute after it completes and then dropped, so poll often enough not to miss the end of the operation. A value of -1 means the build does not offer storage encryption at all, and on an installation that is not a server one the call is refused rather than answered. Unlike the other encryption operations, this one asks for no portal-settings permission: any authenticated member of the portal may read the progress, which is intentional, because the portals are unavailable while the run is on and their users need to see when it ends. Nothing is written and the call is safe to repeat.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Encryption or decryption progress as a percentage, or empty when no run is in flightDoubleNullableWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405Storage encryption is not available on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DoubleNullableWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getStorageEncryptionSettings​

EncryptionSettingsWrapper getStorageEncryptionSettings()

GET /api/2.0/settings/encryption/settings

Get the storage encryption settings

Returns the encryption state of the installation storage: the status, which is one of decrypted, encryption started, encrypted or decryption started, and the flag saying whether users are mailed when an encryption run begins. The password is deliberately blanked out, so the field always comes back empty even on an encrypted installation. The caller is expected to have the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space; on any other installation, and whenever the check fails, the operation answers with an empty body instead of an error. An empty answer is therefore not proof that encryption is off, only that the settings cannot be read in this context. Nothing is written and the call is safe to repeat. Use GET api/2.0/settings/encryption/progress to follow a run that is in flight, and POST api/2.0/settings/encryption/start to encrypt or decrypt the storage.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The encryption status and the notify-users flag, with the password blanked out; empty where encryption settings cannot be readEncryptionSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings--
405Storage encryption is not available on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

EncryptionSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

startStorageEncryption​

BooleanWrapper startStorageEncryption(StorageEncryptionRequestsDto)

POST /api/2.0/settings/encryption/start

Start the storage encryption

Queues encryption of everything the installation keeps in its local storage, or decryption of it when the data is already encrypted: the saved encryption state decides the direction, so the same call encrypts a decrypted installation and decrypts an encrypted one. It covers the whole server, not one portal, and only a server installation with the feature switched on can run it, with neither the portal storage nor the CDN pointing at a third-party provider: reset those first with DELETE api/2.0/settings/storage and DELETE api/2.0/settings/storage/cdn. No backup may be running, and the backup schedules of all portals are dropped as part of starting. The caller needs the permission to edit portal settings, that is the portal owner or a DocSpace admin, and an unrestricted access space. This is a long, disruptive operation: every portal is put into the encryption state and stays unavailable until it ends, so do not repeat the call while it runs, and follow it with GET api/2.0/settings/encryption/progress instead. The password is generated on the server and never returned by the API. Pass notifyUsers=true to mail every user before the portals go down. The response is true once the job is queued, and false where encryption is switched off, nothing being started then.

Parameters​

NameInTypeDescriptionNotes
StorageEncryptionRequestsDtobodyStorageEncryptionRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200True when the encryption job has been queued; false in a build where storage encryption is switched offBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal pricing plan does not include storage encryption--
403The caller may not edit portal settings, or this installation does not allow storage encryption--
405Storage encryption is not available on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsGreetingSettingsApi​

getGreetingSettings​

StringWrapper getGreetingSettings()

GET /api/2.0/settings/greetingsettings

Get greeting settings

Returns the greeting title of the current portal - the caption shown as the welcome heading on the sign-in page, kept as the portal name. Any authenticated user may call it and no administrative right is needed; the call is read-only. The title comes back as a bare string and is never empty: when the portal has no title of its own, the built-in default caption is returned instead, localized to the caller's language. Because of that fallback this operation cannot tell a saved title from the default one - call GET api/2.0/settings/greetingsettings/isdefault when that distinction matters. The same string is part of the portal settings answer as the greetingSettings field of GET api/2.0/settings, so a client that already reads the settings needs no separate call. The value is a caption only: it is neither the portal address nor the white-label logo text of the header, which is returned by GET api/2.0/settings/whitelabel/logotext.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The greeting title of the portal, or the localized default caption when the portal has no title of its ownStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getIsDefaultGreetingSettings​

BooleanWrapper getIsDefaultGreetingSettings()

GET /api/2.0/settings/greetingsettings/isdefault

Check the default greeting settings

Reports whether the current portal still shows the built-in greeting caption instead of a title of its own. The check is read-only and open to any authenticated user, with no administrative right required. It answers true while no title is stored for the portal - the state after POST api/2.0/settings/greetingsettings/restore on an installation that configures no portal name, and also after saving an empty title - and false as soon as a non-empty title has been saved. Use it together with GET api/2.0/settings/greetingsettings: that operation substitutes the localized default caption for a missing title, so only these two calls together separate a default greeting from a custom one that happens to repeat the default wording. The answer covers the greeting title alone; whether the white-label logos and logo text are still the default ones is reported by GET api/2.0/settings/whitelabel/logos/isdefault and GET api/2.0/settings/whitelabel/logotext/isdefault.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Boolean value: true if the portal has no greeting title of its own and the built-in default caption is shownBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

restoreGreetingSettings​

StringWrapper restoreGreetingSettings()

POST /api/2.0/settings/greetingsettings/restore

Restore the greeting settings

Drops the custom greeting title of the current portal and puts back the title configured for the installation, which is an empty value unless the installation defines a portal name of its own. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The change is immediate for every user of the portal and a second call changes nothing, so a retry after a failed attempt is safe. The answer is the greeting in force afterwards: the configured title when there is one, and the localized default caption when the stored title ends up empty - in that case GET api/2.0/settings/greetingsettings/isdefault starts answering true. Only the caption is touched: the portal logos and the white-label logo text keep their values and are reset separately by PUT api/2.0/settings/whitelabel/logos/restore and PUT api/2.0/settings/whitelabel/logotext/restore. To set a title instead of the default one use POST api/2.0/settings/greetingsettings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The greeting title in force after the restore, or the localized default caption when the installation configures noneStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveGreetingSettings​

StringWrapper saveGreetingSettings(GreetingSettingsRequestsDto)

POST /api/2.0/settings/greetingsettings

Save the greeting settings

Replaces the greeting title of the current portal with the title from the request, storing it as the portal name. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The new caption takes effect at once for every user of the portal and the change is written to the audit trail; repeating the call with the same title leaves the portal in the same state. A missing title or one longer than 255 characters is rejected as an invalid request before the handler runs. On a cloud portal with a free or trial plan the title is also matched against the character rule configured for the installation and a title that breaks it is refused, while a paid cloud plan and a server installation apply no character check. An empty title clears the greeting: the portal falls back to the built-in default caption and GET api/2.0/settings/greetingsettings/isdefault starts answering true. What comes back is a localized confirmation message, not the stored title - read the title with GET api/2.0/settings/greetingsettings.

Parameters​

NameInTypeDescriptionNotes
GreetingSettingsRequestsDtobodyGreetingSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200A localized message confirming that the greeting title has been savedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsIPRestrictionsApi​

getIpRestrictions​

IPRestrictionArrayWrapper getIpRestrictions()

GET /api/2.0/settings/iprestrictions

Get IP restrictions

Returns the IP restriction list of the current portal - the addresses allowed to reach it, each with its id and the forAdmin flag that narrows the entry to DocSpace administrators. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The call is read-only and honours If-None-Match: send back the ETag of an earlier answer and an unchanged list comes back as an empty not-modified response rather than a body. The list has no defined order and is empty on a portal where nobody has configured restrictions - and an empty list blocks nobody, whatever the enforcement flag says. Whether the restrictions are enforced at all is not part of this answer: read that flag with GET api/2.0/settings/iprestrictions/settings. The entries listed here apply to every user of the portal except its owner. Replace the whole list with PUT api/2.0/settings/iprestrictions; single entries cannot be added or deleted, and that update takes plain addresses rather than the IDs returned here.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The IP addresses allowed to reach the portal, each with its ID and administrators-only flag; an empty list when the portal has no restrictionsIPRestrictionArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IPRestrictionArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

readIpRestrictionsSettings​

IPRestrictionsSettingsWrapper readIpRestrictionsSettings()

GET /api/2.0/settings/iprestrictions/settings

Get IP restriction settings

Reports whether the IP restrictions of the current portal are enforced, as the enable flag together with the lastModified stamp of the setting. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The call is read-only and honours If-Modified-Since: send back the Last-Modified value of an earlier answer and an unchanged setting comes back as an empty not-modified response rather than a body. The flag is false on a portal nobody has configured. A true flag on its own blocks nothing: enforcement also needs at least one stored address, which this answer does not carry - read the addresses with GET api/2.0/settings/iprestrictions - and it is skipped entirely on an installation whose configuration hides the IP security section. Even when enforced, the portal owner and the installation's own networks are let through. Change the flag with PUT api/2.0/settings/iprestrictions/settings, which replaces the address list in the same call, so resend the addresses in force when all that changes is the flag.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The enforcement flag of the IP restrictions and the date the setting was last modifiedIPRestrictionsSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IPRestrictionsSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveIpRestrictions​

IpRestrictionsWrapper saveIpRestrictions(IpRestrictionsDto)

PUT /api/2.0/settings/iprestrictions

Save IP restrictions

Replaces the whole IP restriction list of the current portal with the addresses from the request and stores the enforcement flag in the same call. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. Every entry must be a single IPv4 or IPv6 address: from-to ranges and CIDR blocks are matched by the portal but cannot be stored here and are rejected as an invalid request, as is enable: true with an empty list. An omitted enable follows the list - on when addresses are sent, off when the list is empty. The replacement is written in one transaction, applies to new requests without a restart and is recorded in the audit trail; entries not repeated in the body are deleted, and sending the same body twice leaves the portal as it is. Enforcement spares the portal owner and the installation's own networks only, so a list without the caller's own address locks the remaining administrators out. The answer echoes the request rather than the stored rows - no entry IDs, and enable exactly as sent, empty when it was omitted - so read the result with GET api/2.0/settings/iprestrictions.

Parameters​

NameInTypeDescriptionNotes
IpRestrictionsDtobodyIpRestrictionsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The saved addresses and enforcement flag echoed back exactly as sent, without the IDs of the stored entriesIpRestrictionsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IpRestrictionsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateIpRestrictionsSettings​

IpRestrictionsWrapper updateIpRestrictionsSettings(IpRestrictionsDto)

PUT /api/2.0/settings/iprestrictions/settings

Update IP restriction settings

Stores the enforcement flag of the IP restrictions of the current portal together with the whole address list, replacing the addresses saved before; this operation and PUT api/2.0/settings/iprestrictions are two routes to the same handler and behave identically. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. Every entry must be a single IPv4 or IPv6 address: from-to ranges and CIDR blocks are matched by the portal but cannot be stored here and are rejected as an invalid request, as is enable: true with an empty list. An omitted enable follows the list - on when addresses are sent, off when the list is empty - so the flag cannot be moved without resending the addresses that stay in force. The new state applies to new requests without a restart, is recorded in the audit trail, and sending the same body twice changes nothing further. Enforcement spares the portal owner and the installation's own networks only, so a list without the caller's own address locks the remaining administrators out. The answer echoes the request, so read the stored entries and their IDs with GET api/2.0/settings/iprestrictions.

Parameters​

NameInTypeDescriptionNotes
IpRestrictionsDtobodyIpRestrictionsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The stored enforcement flag and addresses echoed back exactly as sent, without the IDs of the stored entriesIpRestrictionsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IpRestrictionsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsLicenseApi​

acceptLicense​

StringWrapper acceptLicense()

POST /api/2.0/settings/license/accept

Activate a license

Activates the license staged by POST api/2.0/settings/license on this self-hosted Enterprise installation: it records that the license was accepted, promotes the staged file to the active one and rewrites the portal-wide quota and tariff from it. Upload a file first: with nothing staged and no license on disk there is nothing to activate. The caller only has to be signed in, and the activation is recorded in the audit trail. Repeating the call is safe: the acceptance stamp is written only once and the same license is simply applied again. Read the outcome from the body rather than the status code - an empty string means the license is now active, and any other string is a message explaining why it is not: no license key was found, the key is not correct, the installed edition does not match the license type, or the license is expired or too small for the current user count. The acceptance stamp survives a failed activation, so a corrected file needs nothing extra. An installation with no license path configured answers that its pricing plan does not support the option and changes nothing. The operation stays reachable while the portal is unpaid.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200An empty string when the license is now active, or a localized sentence explaining why it was not activatedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getIsLicenseRequired​

BooleanWrapper getIsLicenseRequired()

GET /api/2.0/settings/license/required

Check if a license is required

Reports whether this installation still has to be given a license file before it can be used, which is the question the setup wizard asks before offering its license upload step. No authentication is needed, so it can be called on a portal nobody has signed in to yet, and the call is read-only. The answer is true only for a self-hosted Enterprise build whose license file is not on disk yet; an open-source or SaaS portal, a portal configured to let anyone in without an account, an installation whose configuration hides the pricing section, and one that takes its setup from cloud-image metadata all answer false. A false answer therefore does not mean the portal is licensed - it also covers every build that needs no license at all. Nothing here describes a license already in place, neither its due date nor whether the editing service still accepts it, and the answer turns to false only once a staged file has been activated by POST api/2.0/settings/license/accept, not when it is uploaded. The operation stays reachable while the portal is unpaid.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200true when this Enterprise installation still needs a license file, false when one is already active or the build needs noneBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

refreshLicense​

BooleanWrapper refreshLicense()

GET /api/2.0/settings/license/refresh

Refresh the license

Re-reads the license file of this self-hosted Enterprise installation and rewrites the portal-wide quota and tariff from it, so a file replaced on disk or a renewal issued by the vendor takes effect without a restart. A license staged by POST api/2.0/settings/license is promoted to the active one here as well, but the usual first-time order is upload and then POST api/2.0/settings/license/accept; this operation is for later refreshes. The caller only has to be signed in - no administrator right is checked. Despite the GET, the call rewrites stored data, and it is idempotent: repeating it applies the same license again. The editing service is asked to confirm the license as part of the check, and the license it reports must match the file. The answer is true when the license was applied and false on an installation with no license path configured at all, such as a SaaS or open-source portal, where nothing is read and nothing changes. A missing or unreadable file, a mismatched customer or edition, and an editing service that rejects the license all fail the call instead of answering false. The operation stays reachable while the portal is unpaid.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200true when the license file was re-read and the portal quota and tariff rewritten from it, false on an installation that has no license path configuredBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

uploadLicense​

StringWrapper uploadLicense(Files)

POST /api/2.0/settings/license

Upload a license

Takes the license file of this self-hosted Enterprise installation as multipart/form-data and stages it for activation; only the first entry of Files is read and the rest are ignored. The file is validated but not put in force here - follow with POST api/2.0/settings/license/accept to activate it, and until then the portal keeps the license it already had. The caller must be a DocSpace administrator, or hold a wizard or administrator confirmation link while the setup wizard is still unfinished; after the wizard is complete such a link alone is refused. An earlier staged file is overwritten, so the upload can be repeated safely. The answer is a localized sentence, not a structured result: Uploaded successfully on its own, or the same words plus the date since when support and updates are not covered, because a file already past its due date is still accepted. A request carrying no file, and a license whose start date has not arrived yet, are rejected as invalid; a file that cannot be read as a license, carries no customer id or signature, or was issued for the other edition fails the call. Whether the editing service accepts it is only checked at activation.

Parameters​

NameInTypeDescriptionNotes
FilesformList (binary)The license file, sent as multipart/form-data. Only the first entry is read and the rest are ignored, and a request carrying none is refused with 400. A file that cannot be read as a license, that carries no customer id or signature, or that was issued for the other edition fails the call; one whose start date has not arrived yet is refused, while one already past its due date is still accepted. Staging only stores the file - POST api/2.0/settings/license/accept puts it in force - and a file staged earlier is overwritten.[required]

Responses​

Status codeDescriptionTypeResponse headers
200A localized confirmation that the file was staged, carrying the date support and updates ended when the license is already overdueStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request carried no license file, or the license does not start until a later date--
403The caller is not a DocSpace administrator, or a confirmation link was used after the setup wizard had already been completed--
405The installation has no license path configured, so it cannot be given a license file--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: multipart/form-data
  • Accept: application/json

SettingsLoginSettingsApi​

getLoginSettings​

LoginSettingsWrapper getLoginSettings()

GET /api/2.0/settings/security/loginsettings

Get login settings

Returns the brute-force protection of the sign-in form for the current portal: how many failed attempts are tolerated, how long the window they are counted in lasts, and how long an offender stays blocked. The caller needs the portal-settings right of a DocSpace administrator; members without it are refused, and anonymous callers are not admitted. The operation is read-only and honours If-Modified-Since: send back the Last-Modified value of an earlier answer and unchanged settings come back as an empty not-modified response rather than a body. checkPeriod and blockTime are counted in seconds. A portal nobody has configured tolerates 5 failed attempts inside a window of 60 seconds and blocks for 60 seconds, and reports isDefault true; the flag turns false as soon as any of the three values differs from that. The answer describes the portal-wide policy only: it does not say which accounts or addresses are blocked at the moment, while a lockout that has already happened is recorded in the login history and can be read with GET api/2.0/security/audit/login/filter. Change the numbers with PUT api/2.0/settings/security/loginsettings, or put them back with DELETE api/2.0/settings/security/loginsettings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The brute-force protection settings of the portal: the tolerated attempts, the counting window and the block in seconds, and whether they match the shipped defaultsLoginSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

LoginSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

setDefaultLoginSettings​

LoginSettingsWrapper setDefaultLoginSettings()

DELETE /api/2.0/settings/security/loginsettings

Reset login settings

Puts the brute-force protection of the sign-in form back to what the portal shipped with: 5 tolerated failed attempts, a counting window of 60 seconds and a block of 60 seconds. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The operation takes no parameters and overwrites whatever was configured before without asking, so read the current numbers with GET api/2.0/settings/security/loginsettings first if they are worth keeping. Only the setting is reset: sign-ins already blocked stay blocked until the block they were given runs out, and the attempt counters running for other users are left alone. The reset is portal-wide, applies to attempts made from now on, is recorded in the audit trail, and calling it twice changes nothing further. The restored numbers also decide when the sign-in form starts asking for a captcha, which it does one attempt before the block. The answer is the restored settings, with isDefault true. Store numbers of your own with PUT api/2.0/settings/security/loginsettings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The brute-force protection settings restored to the shipped defaultsLoginSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

LoginSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateLoginSettings​

LoginSettingsWrapper updateLoginSettings(LoginSettingsRequestDto)

PUT /api/2.0/settings/security/loginsettings

Update login settings

Replaces the brute-force protection of the sign-in form for the whole portal: attemptCount failed attempts inside a rolling window of checkPeriod seconds, after which the offender is blocked for blockTime seconds. All three values are replaced together and each has to be between 1 and 9999, so read the current ones with GET api/2.0/settings/security/loginsettings before changing only one of them; a value outside the range is rejected as an invalid request. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. Failed attempts are counted per user name and client address, so one member's lockout leaves the rest of the portal signing in normally, and a blocked pair is refused even once the password is finally correct. The new numbers apply to attempts made from now on and leave counters and blocks already running as they are. The change is recorded in the audit trail, and the answer is the stored settings with the flag that says whether they still match the shipped defaults.

Parameters​

NameInTypeDescriptionNotes
LoginSettingsRequestDtobodyLoginSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The brute-force protection settings as they were stored, with the flag that says whether they match the shipped defaultsLoginSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

LoginSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsMessagesApi​

enableAdminMessageSettings​

StringWrapper enableAdminMessageSettings(TurnOnAdminMessageSettingsRequestDto)

POST /api/2.0/settings/messagesettings

Enable or disable administrator messages

Switches on or off the contact form the sign-in page offers a visitor who cannot get into the portal, and which delivers their message to the portal administrators. The caller needs the portal-settings right of a DocSpace administrator - the portal owner and a DocSpace administrator qualify, any other member is refused. Send the new state as turnOn: true publishes the form, false hides it. The change covers the whole portal, applies to the next sign-in page without a restart, is recorded in the audit trail, and repeating the call with the same value leaves the portal as it is. What comes back is a localized confirmation message rather than the stored flag - read the flag as enableAdmMess from GET api/2.0/settings, which needs no token. That flag is also forced on while the portal's payment has lapsed, so it can report true on a portal where the form was switched off here. The form itself posts to POST api/2.0/settings/sendadmmail and this setting gates nothing else: the notifications administrators receive as portal members are subscribed separately with POST api/2.0/settings/notification.

Parameters​

NameInTypeDescriptionNotes
TurnOnAdminMessageSettingsRequestDtobodyTurnOnAdminMessageSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200A localized message confirming that the administrator message setting has been savedStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

sendAdminMail​

StringWrapper sendAdminMail(AdminMessageSettingsRequestsDto)

POST /api/2.0/settings/sendadmmail

Send a message to the administrator

Sends a message from someone who cannot get into the portal to its administrators - the contact form the sign-in page offers unauthenticated visitors. No token is needed. The form has to be published first with POST api/2.0/settings/messagesettings unless the portal's payment has lapsed, otherwise nothing is sent; enableAdmMess in GET api/2.0/settings reports whether the call is worth making. email is the address the administrators answer to and has to be a real address, and message is reduced to plain text first, so a body carrying nothing but markup counts as empty - either fault is refused with 400. When the caller is not signed in and this installation has a CAPTCHA configured, recaptchaResponse has to carry a solved challenge of the recaptchaType that GET api/2.0/settings publishes together with the site key, and a missing or stale answer refuses the call. culture picks the language of the letter. Delivery is queued and reaches the administrators subscribed to administrator notifications, so a confirmed call means accepted rather than read, and the answer is a localized confirmation. Attempts are rate limited per address and per operation, and further ones are refused with 429.

Parameters​

NameInTypeDescriptionNotes
AdminMessageSettingsRequestsDtobodyAdminMessageSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200A localized message confirming that the message has been queued for the portal administratorsStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The email address is malformed, or the message is empty once its markup is stripped--
429Too many contact attempts came from the same address within the rate-limit windowErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

sendJoinInviteMail​

StringWrapper sendJoinInviteMail(AdminMessageBaseSettingsRequestsDto)

POST /api/2.0/settings/sendjoininvite

Send an invitation email

Sends an invitation email with a join link to the address in the request - the self-registration the sign-in page's register link performs. No token is needed. The portal has to publish a trusted-domain policy first, saved with POST api/2.0/settings/maildomainsettings: without one there is nothing to join and every caller alike is answered with 405 - the same condition GET api/2.0/settings reports as enabledJoin. email has to be a real address written in ASCII rather than an internationalized one, must not already belong to a portal member, and, when the policy names domains rather than accepting all of them, has to end with one of them - each of those faults is refused with 400. culture picks the language of the letter. The invitation is not an account: the invitee becomes a member only after following the link, and the role it grants, user or room administrator, follows the trusted-domain settings and drops to user once the portal's paid places are taken. Where the installation caps invitations, an accepted call spends one of those counted by invitationLimit, and only about a dozen calls from one address in two minutes are accepted. What comes back is a localized confirmation.

Parameters​

NameInTypeDescriptionNotes
AdminMessageBaseSettingsRequestsDtobodyAdminMessageBaseSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200A localized message confirming that the invitation with the join link has been sentStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The email address is malformed or internationalized, lies outside the trusted domains, or already belongs to a member of the portal--
403The portal is not accepting requests while it is being restored, transferred or encrypted--
405The portal publishes no trusted-domain policy, so it has nothing to join--
429Too many invitation requests came from the same network addressErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsNotificationsApi​

getNotificationChannels​

NotificationChannelStatusWrapper getNotificationChannels()

GET /api/2.0/settings/notification/channels

Get notification channels

Lists the ways this installation can deliver a notification, each as the internal name of the channel together with isEnabled: email.sender for letters and telegram.sender for Telegram messages. The list describes the installation and the portal rather than the calling user, so every member gets the same answer, and the call is read-only. Any signed-in member may ask for it, whatever its role, and no permission is demanded. A channel appears only when the notification service of the running installation is configured with a sender of that name, so the list can be shorter than the two names above, and an empty list means that configuration names no channel this build implements. email.sender is reported as enabled whenever it is listed, while telegram.sender is reported as enabled only while the portal has a Telegram bot name and token stored, which is what POST api/2.0/settings/authservice writes. An enabled channel says nothing about the caller: a member also has to connect their own Telegram account, for which GET api/2.0/settings/telegram/link hands out the link and GET api/2.0/settings/telegram/check reports the outcome. Which kinds of notification a member receives is a separate setting, read with GET api/2.0/settings/notification/{type}.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The notification channels this installation can deliver through, each with the flag that says whether it is enabledNotificationChannelStatusWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

NotificationChannelStatusWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getNotificationSettings​

NotificationSettingsWrapper getNotificationSettings(type)

GET /api/2.0/settings/notification/{type}

Check notification availability

Reports whether one kind of notification is switched on for the calling user, taking the kind as the integer type in the route: 0 the new-item badges the Files responses carry, 1 the room activity letters, 2 the daily feed digest, 3 the periodic tips letters. The answer describes the caller's own account only - there is no way to read another member's settings - and the call is read-only and safe to repeat. Every signed-in member reads its own settings: the portal owner, a DocSpace administrator, a room administrator, a user and a guest are all accepted, and no permission is demanded. Badges come back switched on for an account that has not changed them, while the kinds 1, 2 and 3 come back switched off until they are switched on with POST api/2.0/settings/notification. What comes back is the kind that was asked for together with isEnabled. A type outside 0-3 is not recognised and the call fails instead of falling back to a default. The rooms silenced one by one are listed by GET api/2.0/settings/notification/rooms, and the delivery channels of the installation by GET api/2.0/settings/notification/channels.

Parameters​

NameInTypeDescriptionNotes
typepathNotificationTypeThe kind of notification being asked about. A value outside the defined set fails the call rather than falling back to a default.[required] [example: 0] [enum: 0, 1, 2, 3]

Responses​

Status codeDescriptionTypeResponse headers
200The notification kind that was asked for together with the flag that says whether it is switched on for the calling userNotificationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

NotificationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getRoomsNotificationSettings​

RoomsNotificationSettingsWrapper getRoomsNotificationSettings()

GET /api/2.0/settings/notification/rooms

Get muted rooms

Returns the rooms the calling user has silenced, as the disabledRooms list of their identifiers. The list describes the caller's own account only, the call is read-only, and an empty list means nothing is silenced. Every signed-in member reads its own list, whatever its role - owner, administrator, user or guest - and no permission is demanded. The identifiers come back the way POST api/2.0/settings/notification/rooms stored them, in the order they were added and without paging; they are kept as opaque values, so both the numeric identifier of a portal room and the string identifier of a room on a connected third-party account appear here, and an identifier stays in the list after the room itself is deleted. While a room is on this list its activity is left out of the hourly room digest and of the daily feed, the letters that room would send at once are not sent, and its new-item counters are hidden from the Files responses. Silencing a room changes nothing for its other members. The kinds of notification this list is applied to are switched with POST api/2.0/settings/notification.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The identifiers of the rooms the calling user has silencedRoomsNotificationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

RoomsNotificationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

setNotificationSettings​

NotificationSettingsWrapper setNotificationSettings(NotificationSettingsRequestsDto)

POST /api/2.0/settings/notification

Set notification status

Switches one kind of notification on or off for the calling user: send the kind as type - 0 the new-item badges, 1 the room activity letters, 2 the daily feed digest, 3 the periodic tips letters - together with isEnabled. The change touches the caller's own account only, and repeating the call with the same pair leaves the account as it is. Every signed-in member configures its own settings: the portal owner, a DocSpace administrator, a room administrator, a user and a guest are all accepted, and no permission is demanded. With 0 switched off the Files responses report new as 0 and mark files as muted; with 1 switched off both the hourly room digest and the letters a room sends at once, such as an editor mention, stop; with 2 switched off the daily digest stops; with 3 switched off the tips letters stop. What comes back is an echo of the request rather than a re-read of the stored state, and a type outside 0-3 is echoed as well while nothing is stored, so confirm the result with GET api/2.0/settings/notification/{type}. To silence a single room instead of a whole kind use POST api/2.0/settings/notification/rooms.

Parameters​

NameInTypeDescriptionNotes
NotificationSettingsRequestsDtobodyNotificationSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The notification kind and state as they were sent in the requestNotificationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

NotificationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setRoomsNotificationStatus​

RoomsNotificationSettingsWrapper setRoomsNotificationStatus(RoomsNotificationsSettingsRequestDto)

POST /api/2.0/settings/notification/rooms

Mute or unmute a room

Adds one room to the calling user's silenced list or takes it off again: mute true silences the room, false lets its notifications through. One call carries one room, so several rooms take several calls, and repeating a call with the same pair changes nothing. The room is named by roomsId and kept as an opaque value: the numeric identifier of a portal room and the string identifier of a room on a connected third-party account are both accepted, and neither the room's existence nor the caller's access to it is checked, so a mistyped identifier is stored as sent. Every signed-in member manages its own list, whatever its role, and the list of another member cannot be touched. While a room is silenced its activity is left out of the hourly room digest and of the daily feed, the letters it would send at once are not sent, and its new-item counters are hidden. The Files responses stop offering the mute action on a room once badges, room activity and the daily feed are all switched off, while this call keeps working. What comes back is the whole updated list, the same shape GET api/2.0/settings/notification/rooms returns.

Parameters​

NameInTypeDescriptionNotes
RoomsNotificationsSettingsRequestDtobodyRoomsNotificationsSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The identifiers of the rooms the calling user has silenced, as the list stands after the changeRoomsNotificationSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

RoomsNotificationSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsOwnerApi​

sendOwnerChangeInstructions​

OwnerChangeInstructionsWrapper sendOwnerChangeInstructions(OwnerIdSettingsRequestDto)

POST /api/2.0/settings/owner

Start the portal owner change

Starts handing this portal over to another of its members: the confirmation letter goes to the current owner's address, and nothing changes until the link in it is used. The owner's own email address has to be confirmed first, otherwise the call is answered with 400; GET api/2.0/people/@self reports it as activationStatus. The caller needs the portal-settings right of a DocSpace administrator, so a room administrator, an ordinary member or a guest is refused with 403, as is naming a guest in ownerId. Only the portal owner can actually start a transfer: an administrator who is not the owner, or a named user who is inactive or unknown here, gets 200 with status 0 and a localized refusal instead of an error, so read status and not the HTTP code. A started transfer answers status 1 and a message carrying the owner's address inside an HTML mailto: anchor rather than as plain text. Ownership itself does not move here; every call issues a fresh link usable for a limited period, seven days by default, and the attempt is recorded in the audit trail. Complete the transfer with PUT api/2.0/settings/owner; changing what a member may do is PUT api/2.0/people/type/{type}.

Parameters​

NameInTypeDescriptionNotes
OwnerIdSettingsRequestDtobodyOwnerIdSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The outcome of the request: status 1 with the address the instructions were sent to, or status 0 with a localized refusal when the transfer cannot be startedOwnerChangeInstructionsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The portal owner's own email address has not been confirmed yet, so no instructions can be sent--
403The caller does not hold the portal-settings right of a DocSpace administrator, or the user named as the new owner is a guest--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

OwnerChangeInstructionsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updatePortalOwner​

updatePortalOwner(OwnerIdSettingsRequestDto)

PUT /api/2.0/settings/owner

Confirm the portal owner change

Completes the portal owner change that POST api/2.0/settings/owner started, making the user named in ownerId the owner of this portal. Authorization comes from the confirmation link in that letter, not from an ordinary session: pass the link's type, key, uid and encemail parameters in the confirm request header, and check with POST api/2.0/authentication/confirm that it is still usable, because it expires after a limited period, seven days by default. A caller without such a link is refused whatever role it holds, and so is a link whose address is no longer the owner's, which is what replaying a used link looks like. The named user has to be an active member of the portal and must not be a guest. The call is mutating: a named user who is not a DocSpace administrator yet is promoted to one first, and a promotion needing a paid seat the portal lacks is refused before ownership moves. The previous owner keeps their account and role but loses the owner's rights, and the change reaches the audit trail. The answer carries no payload: read the new ownerId from GET api/2.0/settings, which needs no token. Only the new owner can start another transfer.

Parameters​

NameInTypeDescriptionNotes
OwnerIdSettingsRequestDtobodyOwnerIdSettingsRequestDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The portal owner has been changed to the user named in the request-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The user named as the new owner cannot be found in this portal, is a guest, or is not active--
409The new owner could not be given DocSpace administrator rights, so the transfer was not applied--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsQuotaApi​

getUserQuotaSettings​

TenantUserQuotaSettingsWrapper getUserQuotaSettings()

GET /api/2.0/settings/userquotasettings

Get the user quota settings

Returns the portal's per-user default storage quota: whether it is enabled and, if so, its size in bytes. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission); every other authenticated role, and an anonymous caller, is refused. This is a read-only, idempotent call. When enableQuota is false, the size value is not enforced and users get unlimited personal storage regardless of what it holds. The response supports conditional requests: send the standard If-Modified-Since header with the previous lastModified value, and an unchanged response comes back empty instead of resending the settings.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Current per-user default storage quota settingsTenantUserQuotaSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantUserQuotaSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveAiAgentQuotaSettings​

TenantAiAgentQuotaSettingsWrapper saveAiAgentQuotaSettings(QuotaSettingsRequestsDto)

POST /api/2.0/settings/aiagentquotasettings

Save the AI Agent quota settings

Sets the portal's default storage quota for AI agents, applied as the starting limit for newly created agents. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission), and on a paid SaaS tenant the portal's plan must include the statistics feature, or the call is rejected as not covered by the plan. The requested size cannot exceed the portal's own total storage quota, nor, on a Standalone install with a portal-wide quota enabled, that quota's size. Disable enforcement by passing enableQuota=false; the size is then ignored for new agents. This is a mutating, idempotent call: sending the same body again leaves the quota unchanged. It returns the saved settings, not any agent's current usage.

Parameters​

NameInTypeDescriptionNotes
QuotaSettingsRequestsDtobodyQuotaSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved default AI agent storage quota settingsTenantAiAgentQuotaSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan does not include the statistics feature required for AI agent quotas--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantAiAgentQuotaSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveRoomQuotaSettings​

TenantRoomQuotaSettingsWrapper saveRoomQuotaSettings(QuotaSettingsRequestsDto)

POST /api/2.0/settings/roomquotasettings

Save the room quota settings

Sets the portal's default per-room storage quota, applied to newly created rooms as their starting limit. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission), and on a paid SaaS tenant the portal's plan must include the statistics feature, or the call is rejected as not covered by the plan. The requested size cannot exceed the portal's own total storage quota, nor, on a Standalone install with a portal-wide quota enabled, that quota's size. Disable enforcement by passing enableQuota=false; the size is then ignored for new rooms. This is a mutating, idempotent call: sending the same body again leaves the quota unchanged. It returns the saved settings, not the individual rooms' current usage.

Parameters​

NameInTypeDescriptionNotes
QuotaSettingsRequestsDtobodyQuotaSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved default per-room storage quota settingsTenantRoomQuotaSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan does not include the statistics feature required for room quotas--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantRoomQuotaSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setTenantQuotaSettings​

TenantQuotaSettingsWrapper setTenantQuotaSettings(TenantQuotaSettingsRequestsDto)

PUT /api/2.0/settings/tenantquotasettings

Save the tenant quota settings

Sets or removes the storage quota for a given tenant. Available only on a Standalone (self-hosted) installation; on SaaS the call is always refused. Requires a DocSpace administrator, and the portal's plan must include the statistics feature or the call is rejected as not covered by the plan. Pass a non-negative quota in bytes to enable the limit for the tenant identified by tenantId, or a negative value to remove any limit. This is a mutating, idempotent call: sending the same body again leaves the quota unchanged. It returns the saved quota settings for that tenant, not its current usage.

Parameters​

NameInTypeDescriptionNotes
TenantQuotaSettingsRequestsDtobodyTenantQuotaSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Saved tenant storage quota settingsTenantQuotaSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal's pricing plan does not include the statistics feature required for tenant quotas--
405The caller is not a DocSpace administrator, or the portal is not a Standalone installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TenantQuotaSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsRebrandingApi​

deleteAdditionalWhiteLabelSettings​

AdditionalWhiteLabelSettingsResponseWrapper deleteAdditionalWhiteLabelSettings()

DELETE /api/2.0/settings/rebranding/additional

Delete the additional white label settings

Discards the resource flags stored for the installation and brings back the built-in set, so the sample documents, the Help Center link, the Feedback and Support link, the user forum, the video guides and the license agreements are offered as they are out of the box. Requires a DocSpace administrator and a server installation with unrestricted space access; on a SaaS portal the call is refused. Unlike POST api/2.0/settings/rebranding/additional it does not need a plan that includes branding, so an installation whose subscription no longer covers it can still be reset. The call is destructive for the stored flags, which have to be set again to come back, and it is idempotent. Instead of a flag it answers the set that is now in effect, so no follow-up read is needed. The reset is installation-wide and reaches every portal, and it leaves the visibility of the About page alone. The company details are reset separately by DELETE api/2.0/settings/rebranding/company.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The built-in resource flags that are now in effectAdditionalWhiteLabelSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AdditionalWhiteLabelSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

deleteCompanyWhiteLabelSettings​

CompanyWhiteLabelSettingsResponseWrapper deleteCompanyWhiteLabelSettings()

DELETE /api/2.0/settings/rebranding/company

Delete the company white label settings

Discards the company details stored for the installation and brings back the built-in ONLYOFFICE name, site, email, address and phone, so the About page and the notification letters print the original vendor again. Requires a DocSpace administrator and a server installation with unrestricted space access; on a SaaS portal the call is refused. Unlike POST api/2.0/settings/rebranding/company it does not need a plan that includes branding, so an installation whose subscription no longer covers it can still be reset. The call is destructive: the previous details are not kept anywhere and have to be entered again to come back. It is idempotent, and instead of a flag it answers the details that are now in effect, so no follow-up read is needed. The reset is installation-wide and reaches every portal. The help and support links are reset separately by DELETE api/2.0/settings/rebranding/additional, and the logos and the wordmark of a single portal by the restore operations under api/2.0/settings/whitelabel.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The built-in company details that are now in effectCompanyWhiteLabelSettingsResponseWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CompanyWhiteLabelSettingsResponseWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAdditionalWhiteLabelSettings​

AdditionalWhiteLabelSettingsDtoWrapper getAdditionalWhiteLabelSettings()

GET /api/2.0/settings/rebranding/additional

Get the additional white label settings

Returns which of the ONLYOFFICE help and community resources the interface may offer - the sample documents, the Help Center link, the Feedback and Support link, the user forum, the video guides and the license agreements - so a client can hide the entries that are switched off. Any authenticated user may call it; no administrator permission is required, and a portal whose payment has lapsed is served as well. The call is read-only and idempotent. Each flag is true when the entry may be shown and false when it must be hidden, and isDefault tells whether the whole set is still the built-in one. The flags are installation-wide, so every portal of a server installation reports the same ones. They say nothing about the caller's own permissions, and the addresses behind the entries are not part of the answer. Change the flags with POST api/2.0/settings/rebranding/additional and reset them with DELETE api/2.0/settings/rebranding/additional.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The help and community resources the interface may offer, with the default flagAdditionalWhiteLabelSettingsDtoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AdditionalWhiteLabelSettingsDtoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getCompanyWhiteLabelSettings​

CompanyWhiteLabelSettingsDtoWrapper getCompanyWhiteLabelSettings()

GET /api/2.0/settings/rebranding/company

Get the company white label settings

Returns the company details that the About page and the notification letters print as the vendor, in the form the settings interface edits them. Any authenticated user may call it; no administrator permission is required, and a portal whose payment has lapsed is served as well. The call is read-only and idempotent. Alongside the stored fields the answer carries isLicensor, which tells whether these details belong to the vendor of the product itself, and isDefault, which tells whether they are still the built-in ONLYOFFICE ones. The values are installation-wide, so every portal of a server installation reports the same ones. The response is revalidatable: it carries Last-Modified, and sending that value back in If-Modified-Since yields an empty body while the details have not changed, which makes polling cheap. For the About page, where the built-in vendor has to be shown next to a reseller, use GET api/2.0/settings/companywhitelabel instead. Change the details with POST api/2.0/settings/rebranding/company.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The company details in effect, with the licensor and default flagsCompanyWhiteLabelSettingsDtoWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CompanyWhiteLabelSettingsDtoWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getEnableWhitelabel​

BooleanWrapper getEnableWhitelabel()

GET /api/2.0/settings/enablewhitelabel

Check the white label availability

Reports whether branding may be configured for the current portal at all, which is the check to make before offering the rebranding interface or calling any of the save operations under api/2.0/settings/whitelabel. Requires a DocSpace administrator. The call is read-only and idempotent. The answer is true only when both conditions hold: the branding section is not switched off in the installation configuration, and the portal's current plan includes customization. It comes back as false on a plan without branding, which is exactly the case in which POST api/2.0/settings/whitelabel/logos/save, POST api/2.0/settings/whitelabel/logos/savefromfiles and POST api/2.0/settings/whitelabel/logotext/save are refused as payment required. The restore operations do not depend on this flag and stay available, so a portal that loses branding can still be reset to the built-in logos and wordmark. The flag says nothing about the installation-wide default branding, which additionally needs a server installation with unrestricted space access, and nothing about the company details and help links under api/2.0/settings/rebranding.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200true when branding is enabled in this installation and included in the portal's planBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getIsDefaultWhiteLabelLogoText​

IsDefaultWhiteLabelLogosWrapper getIsDefaultWhiteLabelLogoText(IsDark, IsDefault)

GET /api/2.0/settings/whitelabel/logotext/isdefault

Check the default logo text

Reports whether the current portal still uses the built-in wordmark or one that was stored for it, which is what an interface needs to decide whether a Restore action applies to the text. Requires a DocSpace administrator. The call is read-only and idempotent. The answer has the same shape as one entry of GET api/2.0/settings/whitelabel/logos/isdefault, with name fixed to logotext and default set to true while no text has been stored and to false once one has. Because GET api/2.0/settings/whitelabel/logotext falls back to ONLYOFFICE when nothing is stored, this operation is the only way to tell a portal that deliberately kept the built-in wordmark from one that saved the very same text. Pass isDefault=true to inspect the installation-wide default branding instead of this portal's. The flag turns back to true after PUT api/2.0/settings/whitelabel/logotext/restore, and to false after POST api/2.0/settings/whitelabel/logotext/save. Saving the built-in wordmark itself counts as clearing the setting, so the flag stays true in that case as well.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200A single logotext entry telling whether the portal still uses the built-in wordmarkIsDefaultWhiteLabelLogosWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IsDefaultWhiteLabelLogosWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getIsDefaultWhiteLabelLogos​

IsDefaultWhiteLabelLogosArrayWrapper getIsDefaultWhiteLabelLogos(IsDark, IsDefault)

GET /api/2.0/settings/whitelabel/logos/isdefault

Check the default white label logos

Reports, slot by slot, whether the current portal still shows the built-in image or a logo that was uploaded for it, which is what an interface needs to decide where a Restore action makes sense. Requires a DocSpace administrator; the URLs themselves are public and come from GET api/2.0/settings/whitelabel/logos, which needs no authentication. The call is read-only and idempotent. Every logo slot is returned, including the notification logo that the public list leaves out, so the result has one entry more than that list. An entry gives the stable slot name in name and default set to true while the slot has never been written, and to false once an image has been stored for it, whether for the light or for the dark theme. A slot goes back to true after PUT api/2.0/settings/whitelabel/logos/restore. Pass isDefault=true to inspect the installation-wide default branding instead of this portal's. The logo text is reported separately by GET api/2.0/settings/whitelabel/logotext/isdefault.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200One entry per logo slot, telling whether the slot still holds the built-in imageIsDefaultWhiteLabelLogosArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

IsDefaultWhiteLabelLogosArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getLicensorData​

CompanyWhiteLabelSettingsArrayWrapper getLicensorData()

GET /api/2.0/settings/companywhitelabel

Get the licensor data

Returns the licensor details - company name, site, support email, postal address and phone - that the About page and the notification letters print as the vendor of the installation. Any authenticated user may call it, as these details are shown in the interface to everyone; no administrator permission is required. The call is read-only and idempotent. The list holds the details currently in effect as its first item; when they have been replaced by a reseller and the replacement is not itself marked as the licensor, the built-in ONLYOFFICE details are appended as a second item, so a caller can print both the reseller and the original vendor. A single-item list therefore means that the current details are the only ones to show. The values are installation-wide rather than per-portal, so every portal of a server installation reports the same ones. The same data in the form the settings interface edits is served by GET api/2.0/settings/rebranding/company, and it is written by POST api/2.0/settings/rebranding/company.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The licensor details in effect, followed by the built-in ONLYOFFICE ones when they have been replacedCompanyWhiteLabelSettingsArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CompanyWhiteLabelSettingsArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWhiteLabelLogoText​

StringWrapper getWhiteLabelLogoText(IsDark, IsDefault)

GET /api/2.0/settings/whitelabel/logotext

Get the white label logo text

Returns the wordmark the current portal prints next to or instead of a logo image, as a bare string rather than an object. Requires a DocSpace administrator, because this is the settings view of the value; the branding a login page needs is served by GET api/2.0/settings/whitelabel/logos, which needs no authentication. The call is read-only and idempotent. When nothing has been stored for the portal, the built-in ONLYOFFICE is returned, so the answer is never empty and cannot be used to tell a custom text from the default one - GET api/2.0/settings/whitelabel/logotext/isdefault answers that question. Pass isDefault=true to read the installation-wide default wordmark instead of this portal's; without it the portal's own value is returned even when the installation carries a different default. Change the text with POST api/2.0/settings/whitelabel/logotext/save and clear it with PUT api/2.0/settings/whitelabel/logotext/restore. The value is stored as it was typed, at most 40 characters long, and is not translated for the caller's language, so the same wordmark is returned for every user of the portal.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The wordmark stored for the portal, or the built-in ONLYOFFICE when none is setStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWhiteLabelLogos​

WhiteLabelItemArrayWrapper getWhiteLabelLogos(IsDark, IsDefault)

GET /api/2.0/settings/whitelabel/logos

Get the white label logos

Lists the branding logo slots of the current portal together with the image URLs to render, which is what a login page, an editor or a mail template needs before any user is known. No authentication is required, and the portal is resolved from the address the request is made to. The call is read-only and idempotent. Each item carries the slot as a number in type, its stable name in name, the size the image is fitted to in size (width and height in pixels), and the URLs in path. When isDark is passed, only the matching theme is filled in, light for false and dark for true; when it is omitted both are filled in and dark comes back empty for the slots that have no separate dark image. The notification slot is not part of this list, as it is derived from the login-page logo and used only in letters. Pass isDefault=true to read the installation-wide default logos instead of this portal's. To learn which slots are still untouched use GET api/2.0/settings/whitelabel/logos/isdefault.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The logo slots of the portal, each with its target size and the URLs of the light and dark imagesWhiteLabelItemArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WhiteLabelItemArrayWrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

restoreWhiteLabelLogoText​

BooleanWrapper restoreWhiteLabelLogoText(IsDark, IsDefault)

PUT /api/2.0/settings/whitelabel/logotext/restore

Restore the white label logo text

Clears the wordmark stored for the current portal, so the built-in ONLYOFFICE is printed again next to or instead of the logo images. Requires a DocSpace administrator. Unlike POST api/2.0/settings/whitelabel/logotext/save it does not need a plan that includes branding, so a portal whose subscription no longer covers branding can still be reset. The call is destructive for the stored text, which is not kept anywhere and has to be typed again to come back, and it is idempotent: true comes back both when a text was cleared and when there was none. Logo images are left untouched and have their own PUT api/2.0/settings/whitelabel/logos/restore. Pass isDefault=true to reset the installation-wide default wordmark instead of this portal's, which only a server installation allows. After the call GET api/2.0/settings/whitelabel/logotext reports ONLYOFFICE and GET api/2.0/settings/whitelabel/logotext/isdefault reports default as true. The wordmark is the only setting this operation touches, so the company details and the help links of the installation are left as they are.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the portal prints the built-in wordmark againBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow default branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

restoreWhiteLabelLogos​

BooleanWrapper restoreWhiteLabelLogos(IsDark, IsDefault)

PUT /api/2.0/settings/whitelabel/logos/restore

Restore the white label logos

Drops every logo uploaded for the current portal and brings back the built-in images, so the portal looks unbranded again on the login page, in the left menu, in the editors and in letters. Requires a DocSpace administrator. Unlike the two save operations it does not need a plan that includes branding, so a portal whose subscription no longer covers it can still be reset. The call is destructive: the stored image files are deleted and cannot be recovered from the portal, only re-uploaded with POST api/2.0/settings/whitelabel/logos/save. It is idempotent and answers true both when logos were removed and when there was nothing to remove. All slots are reset together; there is no way to restore a single one. For this portal the picture kept for the older mail templates is reset along with the logos, while the logo text is left as it is and has its own PUT api/2.0/settings/whitelabel/logotext/restore. Pass isDefault=true to reset the installation-wide default branding instead, which only a server installation allows. Confirm the result with GET api/2.0/settings/whitelabel/logos/isdefault.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the portal shows the built-in logos againBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow default branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveAdditionalWhiteLabelSettings​

BooleanWrapper saveAdditionalWhiteLabelSettings(AdditionalWhiteLabelSettingsWrapper)

POST /api/2.0/settings/rebranding/additional

Save the additional white label settings

Stores which of the ONLYOFFICE help and community resources the interface offers: the sample documents, the Help Center link, the Feedback and Support link, the user forum, the video guides and the license agreements. The whole set is replaced by the settings object of the request, so send every flag, not only the changed ones - a flag left out is stored as off. A request without that object is rejected as an invalid request. Requires a DocSpace administrator, a server installation with unrestricted space access and a plan that includes branding, which GET api/2.0/settings/enablewhitelabel reports; on a SaaS portal the call is refused. The flags are installation-wide, so the change reaches every portal of that installation. The call is mutating and idempotent, and answers true. Only the visibility of these entries is controlled here, not the addresses behind them. Read the result back with GET api/2.0/settings/rebranding/additional and undo it with DELETE api/2.0/settings/rebranding/additional.

Parameters​

NameInTypeDescriptionNotes
AdditionalWhiteLabelSettingsWrapperbodyAdditionalWhiteLabelSettingsWrapper[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the resource flags have been stored for the installationBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request carries no settings object--
403The caller is not a DocSpace administrator, or the installation does not allow branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveCompanyWhiteLabelSettings​

BooleanWrapper saveCompanyWhiteLabelSettings(CompanyWhiteLabelSettingsWrapper)

POST /api/2.0/settings/rebranding/company

Save the company white label settings

Stores the company details - name, site, support email, postal address and phone - that the About page and the notification letters print as the vendor. The whole set is replaced by the settings object of the request, so send every field, not only the changed ones; a request without that object, or with an email or a site that is not a valid value, is rejected as an invalid request. Requires a DocSpace administrator, a server installation with unrestricted space access and a plan that includes branding, which GET api/2.0/settings/enablewhitelabel reports; on a SaaS portal the call is refused. The values are installation-wide, so the change reaches every portal of that installation. Two fields are not taken from the request: the licensor flag is always stored as false, and hiding the About page is silently kept off unless the plan allows it. The call is mutating and idempotent, and answers true. Read the result back with GET api/2.0/settings/rebranding/company and undo it with DELETE api/2.0/settings/rebranding/company.

Parameters​

NameInTypeDescriptionNotes
CompanyWhiteLabelSettingsWrapperbodyCompanyWhiteLabelSettingsWrapper[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the company details have been stored for the installationBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The request carries no settings object, or the email or the site is not a valid value--
403The caller is not a DocSpace administrator, or the installation does not allow branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveWhiteLabelLogoText​

BooleanWrapper saveWhiteLabelLogoText(IsDark, IsDefault, WhiteLabelRequestsDto)

POST /api/2.0/settings/whitelabel/logotext/save

Save the white label logo text

Sets the wordmark that the portal prints next to or instead of a logo image, on the login page, in the editors and in notification letters. Only logoText from the request body is used here, and it is limited to 40 characters; a longer value is rejected as an invalid request. Sending an empty or blank text, or exactly the built-in ONLYOFFICE, clears the setting instead of storing it, which has the same effect as PUT api/2.0/settings/whitelabel/logotext/restore. Requires a DocSpace administrator and a plan that includes branding, which GET api/2.0/settings/enablewhitelabel reports; otherwise the call is refused as payment required. The call is mutating and idempotent: the previous text is overwritten and true comes back. Logo images are not touched - they are saved by POST api/2.0/settings/whitelabel/logos/save - and the text is not rendered into them. Pass isDefault=true to write the installation-wide default wordmark instead of this portal's, which only a server installation allows. Read the stored value back with GET api/2.0/settings/whitelabel/logotext.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]
WhiteLabelRequestsDtobodyWhiteLabelRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the logo text has been stored for the portalBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow default branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveWhiteLabelSettings​

BooleanWrapper saveWhiteLabelSettings(IsDark, IsDefault, WhiteLabelRequestsDto)

POST /api/2.0/settings/whitelabel/logos/save

Save the white label logos

Replaces the branding images of the current portal with the ones sent in the request, so that the logos on the login page, in the left menu, in the editors and in letters come from this portal. Every entry of logo names a logo slot in its key - the numeric type published by GET api/2.0/settings/whitelabel/logos - and carries the light-theme and the dark-theme image in light and dark. An image is either a data:image/png;base64,... payload (png, jpg and svg are accepted) or the name of a file already uploaded to the temporary store; a slot left out of the request keeps its image. The dark image is stored only for the slots that have a dark variant, that is 1, 2, 6, 7 and 8, and is ignored for the favicon and the editor logos; saving slot 2 also rebuilds the notification logo 8 from it. Requires a DocSpace administrator and a plan that includes branding, which GET api/2.0/settings/enablewhitelabel reports; otherwise the call is refused as payment required. It answers true and is undone by PUT api/2.0/settings/whitelabel/logos/restore. With isDefault=true it writes the installation-wide default branding instead, which only a server installation allows. Uploaded files go to POST api/2.0/settings/whitelabel/logos/savefromfiles.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]
WhiteLabelRequestsDtobodyWhiteLabelRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the submitted logos have been stored for the portalBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow default branding to be edited--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

saveWhiteLabelSettingsFromFiles​

BooleanWrapper saveWhiteLabelSettingsFromFiles(IsDark, IsDefault)

POST /api/2.0/settings/whitelabel/logos/savefromfiles

Save the logos from files

Replaces the branding images of the current portal with the files sent as multipart/form-data, which is the way to upload image files directly instead of embedding them as base64 in POST api/2.0/settings/whitelabel/logos/save. The form field names are not used: each file is routed by its own name, which has to start with the numeric logo slot published by GET api/2.0/settings/whitelabel/logos and end with the image extension, as in 2.png; a name that also contains dark, as in 2.dark.png, is stored as the dark-theme image of that slot. Slots that get no file keep the image they have, and a dark file is ignored for the favicon and the editor logos, which have no dark variant. A request that carries no file at all is rejected. Requires a DocSpace administrator and a plan that includes branding, which GET api/2.0/settings/enablewhitelabel reports; otherwise the call is refused as payment required. It answers true, overwrites in place and is undone by PUT api/2.0/settings/whitelabel/logos/restore. With isDefault=true it writes the installation-wide default branding, which only a server installation allows.

Parameters​

NameInTypeDescriptionNotes
IsDarkqueryBooleanWhich theme the answer is filled in for: true fills the dark image only, false the light one only. Omitting it fills both, leaving the dark one empty for the slots that have no separate dark image.[optional] [example: true]
IsDefaultqueryBooleanWhether the installation-wide default branding is addressed instead of this portal own. Writing the default branding is only allowed on a self-hosted installation; elsewhere it is refused with 403.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the uploaded files have been stored as the portal logosBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not a DocSpace administrator, or the installation does not allow default branding to be edited--
409The request carried no file to store as a logo--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsSSOApi​

getDefaultSsoSettingsV2​

SsoSettingsV2Wrapper getDefaultSsoSettingsV2()

GET /api/2.0/settings/ssov2/default

Get the default SSO settings

Returns the built-in SSO configuration a portal starts from: empty identity provider and service provider sections with the stock SAML settings already filled in (HTTP-POST binding, transient name ID format, RSA-SHA1 signing, AES-128 encryption), the default attribute mapping of givenName, sn and mail, the Single Sign-on login label, new accounts typed as user, and SSO switched off. Use it as the template for a new configuration: fill in the identity provider entity ID, sign-in URL and certificates, then send the result to POST api/2.0/settings/ssov2. The values are the same for every portal and do not depend on what is currently saved, nothing is written, and the call is safe to repeat. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and the portal plan has to include Single Sign-On. This operation changes nothing by itself: to actually discard the configuration in use, call DELETE api/2.0/settings/ssov2, and to read what is configured now, call GET api/2.0/settings/ssov2.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The built-in SSO configuration a portal starts fromSsoSettingsV2WrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SsoSettingsV2Wrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSsoSettingsV2​

SsoSettingsV2Wrapper getSsoSettingsV2()

GET /api/2.0/settings/ssov2

Get the SSO settings

Returns the SAML Single Sign-On configuration of the current portal: the identity provider endpoints and certificates, the service provider certificates, the attribute mapping, the login button label and the user type new SSO accounts get. Anonymous callers are accepted, but an unauthenticated one receives only hideAuthPage, which tells the sign-in page whether the built-in login form has to be hidden; every other field stays empty, so read the full configuration with an authenticated request. An authenticated caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and the portal plan has to include Single Sign-On, otherwise the call is refused. The operation only reads and is safe to repeat. When the login label was never set, the response carries the built-in Single Sign-on instead of an empty string, and enableSso is null until the settings are saved for the first time. Use GET api/2.0/settings/ssov2/default for a blank configuration to start from, and GET api/2.0/settings/ssov2/constants for the values the SAML fields accept.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The current portal SSO settings; an anonymous caller gets only the hidden-login-form flagSsoSettingsV2WrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SsoSettingsV2Wrapper

Authorization​

cookieAuth, bearerAuth

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getSsoSettingsV2Constants​

SsoSettingsV2ConstantsWrapper getSsoSettingsV2Constants()

GET /api/2.0/settings/ssov2/constants

Get the SSO settings constants

Returns every literal value the SAML fields of the SSO configuration accept, grouped by the field it belongs to: name ID formats, request bindings, signing and encryption algorithms, and what a service provider or identity provider certificate can be used for. The values are the SAML URNs and algorithm URIs themselves, so they can be written into the configuration exactly as they come back; picking one from the matching group is the point, because POST api/2.0/settings/ssov2 stores these fields as they are given and a misspelled value therefore surfaces only later, as a failing sign-in. The list is a fixed part of the product: it is the same for every portal, does not depend on the saved settings and does not change between calls within a release, so it can be cached. The operation only reads, is safe to repeat and needs nothing beyond an authenticated caller. Use it together with GET api/2.0/settings/ssov2/default, which already has the usual values set.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Every value the SAML fields accept: name ID formats, bindings, signing and encryption algorithms, and the service provider and identity provider certificate usesSsoSettingsV2ConstantsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SsoSettingsV2ConstantsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

resetSsoSettingsV2​

SsoSettingsV2Wrapper resetSsoSettingsV2()

DELETE /api/2.0/settings/ssov2

Reset the SSO settings

Discards the SAML Single Sign-On configuration of the current portal, stores the built-in default one in its place and returns what was stored, which is the same content as GET api/2.0/settings/ssov2/default. This is destructive and cannot be undone through the API: the identity provider addresses, both certificate sets, the attribute mapping and the login label are gone and SSO is left switched off, so keep a copy of GET api/2.0/settings/ssov2 first if the configuration may be needed again. Every account that signed in through SSO is unlinked and becomes an ordinary account that keeps its data but authenticates with portal credentials from then on, and its external contacts are converted the same way. Repeating the call is harmless, as the second one stores the same defaults again. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and the portal plan has to include Single Sign-On, otherwise the call is refused. To switch SSO off while keeping the configuration, send it back to POST api/2.0/settings/ssov2 with SSO disabled instead. The reset is recorded in the audit trail.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The default SSO configuration that is now in effectSsoSettingsV2WrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SsoSettingsV2Wrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

saveSsoSettingsV2​

SsoSettingsV2Wrapper saveSsoSettingsV2(SsoSettingsRequestsDto)

POST /api/2.0/settings/ssov2

Save the SSO settings

Replaces the whole SAML Single Sign-On configuration of the current portal with the one passed as a JSON object in serializeSettings, and returns the configuration as it was stored. The payload is a complete configuration rather than a patch: fields left out are stored empty, so send back a changed copy of GET api/2.0/settings/ssov2, or start from GET api/2.0/settings/ssov2/default. The identity provider entity ID and sign-in URL are required, the sign-in and sign-out URLs have to be absolute http or https addresses, and the attribute mapping has to name the fields for first name, last name and email; otherwise nothing is saved. The caller has to be allowed to edit portal settings (portal owner or DocSpace admin), and the portal plan has to include Single Sign-On. Some values are normalised on the way in: a usersType other than 1 (room admin), 3 (DocSpace admin) or 4 (user) becomes 4, an empty login label becomes Single Sign-on, and a longer one is cut to 100 characters. Saving with SSO switched off unlinks every existing SSO account and turns it into an ordinary one; switching SSO back on later does not restore those links. The change is recorded in the audit trail.

Parameters​

NameInTypeDescriptionNotes
SsoSettingsRequestsDtobodySsoSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The SSO settings as they were stored, with the login label and the user type normalisedSsoSettingsV2WrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The serialized settings are empty or do not contain an SSO configuration object--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SsoSettingsV2Wrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsSecurityApi​

getEnabledModules​

EnabledModuleArrayWrapper getEnabledModules()

GET /api/2.0/settings/security/modules

Get enabled modules

Lists the portal modules the calling user can currently open, each as an id holding the module's product class name and a title holding its display name, both HTML-encoded. Any signed-in member may call this; anonymous callers are not admitted. The operation is read-only and takes no parameters, and the list is specific to the caller: modules hidden for this portal, and modules whose access rules exclude the caller, are left out, and sub-modules nested under another module are never listed. Entries follow the portal's own module order rather than an alphabetical one. An empty list means the installation registers no such modules at all - the case on DocSpace, where the classic modules do not exist - and is not a failure. The identifiers here are display-oriented class names, not the GUIDs the access-settings operations work with, so do not feed them to GET api/2.0/settings/security/{id}, which expects a module GUID.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The portal modules the calling user can open, each with its product class name and its display name, in the portal's own module orderEnabledModuleArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

EnabledModuleArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getIsProductAdministrator​

ProductAdministratorWrapper getIsProductAdministrator(productid, userid)

GET /api/2.0/settings/security/administrator

Check product administrator

Reports whether one user administers one portal module, as the identifiers asked about plus an administrator flag. Both productid and userid are query parameters and both are required; the all-zero product GUID asks about the portal itself rather than about a single module. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. The operation is read-only. The flag is true when the user belongs to the DocSpace administrator group or to the module's own group, so a portal-wide administrator is reported as an administrator of every module, whatever the module identifier says. Identifiers that name no user and no group are answered with false instead of a failure, so a false does not prove the user exists. The verdict is read out of group membership alone and says nothing about whether the module is enabled for this portal, which GET api/2.0/settings/security/{id} reports. Use GET api/2.0/settings/security/administrator/{productid} to list everyone who administers a module, and PUT api/2.0/settings/security/administrator to change the membership.

Parameters​

NameInTypeDescriptionNotes
productidqueryUUID (uuid)The module being asked about, by module GUID. The all-zero GUID asks about the portal itself rather than a single module.[required] [example: 00000000-0000-0000-0000-000000000000]
useridqueryUUID (uuid)The account being asked about, by portal user ID. An ID that names no account is answered as a plain negative rather than a failure, so a negative answer does not prove the account exists.[required] [example: 00000000-0000-0000-0000-000000000000]

Responses​

Status codeDescriptionTypeResponse headers
200The module and the user asked about together with the flag that says whether that user administers the moduleProductAdministratorWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ProductAdministratorWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getPasswordSettings​

PasswordSettingsWrapper getPasswordSettings()

GET /api/2.0/settings/security/password

Get password settings

Returns the password policy of the current portal: the minimum length together with the flags that demand an uppercase letter, a digit and a special symbol, plus the regular expressions a client can check a password against before sending it anywhere. Any signed-in member may read it, and it is also reachable with the parameters of a confirmation link, so an invited user or one resetting a password can validate the new password before having a session; a portal whose payment has lapsed still answers. The operation is read-only and honours If-Modified-Since: send back the Last-Modified value of an earlier answer and an unchanged policy comes back as an empty not-modified response rather than a body. A portal nobody has configured requires 8 characters with all three flags off. Whatever the policy says, the portal refuses a password longer than 30 characters, a ceiling this answer does not carry. Change the policy with PUT api/2.0/settings/security/password.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The portal password policy: the minimum length, the uppercase, digit and special-symbol requirements, and the regular expressions a client can validate againstPasswordSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

PasswordSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getProductAdministrators​

EmployeeArrayWrapper getProductAdministrators(productid)

GET /api/2.0/settings/security/administrator/{productid}

Get product administrators

Lists the users who administer the portal module identified by productid in the path. The all-zero GUID stands for the portal itself: the answer then covers the DocSpace administrator group together with every product group, and includes the portal owner, who administers everything by default. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. productid has to be a GUID, and one that names no group is answered with an empty list rather than a failure. The operation is read-only and returns whole user profiles, a heavier answer than a membership check, and a user who belongs to more than one of the groups asked about is listed once per group. Entries arrive in group order, the DocSpace administrator group first, the list is neither paged nor filterable, and a promotion made through the sibling PUT shows up here at once. Use GET api/2.0/settings/security/administrator to test a single user against a single module, and PUT api/2.0/settings/security/administrator to promote or demote somebody.

Parameters​

NameInTypeDescriptionNotes
productidpathUUID (uuid)The module the operation acts on, by module GUID. The all-zero GUID stands for the portal itself rather than for a single module, and a GUID that names no module group is answered with an empty result instead of a failure.[required] [example: 00000000-0000-0000-0000-000000000000]

Responses​

Status codeDescriptionTypeResponse headers
200The users who administer the module asked about, or the portal-wide administrators when the all-zero identifier is usedEmployeeArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

EmployeeArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebItemSecurityInfo​

BooleanWrapper getWebItemSecurityInfo(id)

GET /api/2.0/settings/security/{id}

Check module availability

Answers whether the module with the given identifier is available to the calling user right now, as a single boolean. id is the module GUID and travels in the path; a value that is not a GUID does not match the route at all. Any signed-in member may call this; anonymous callers are not admitted. The operation is read-only and its answer is specific to the caller: true means a module with that identifier is registered in this portal, is visible, and the caller is allowed to read it, while false covers every other case - the module is not registered here, it is hidden for this portal, or the caller is outside the users and groups allowed to open it. A false therefore does not tell those apart, and an unknown identifier is reported as unavailable instead of failing. Read the allow-list behind the decision with GET api/2.0/settings/security, list the modules the caller can actually open with GET api/2.0/settings/security/modules, and change access with PUT api/2.0/settings/security.

Parameters​

NameInTypeDescriptionNotes
idpathUUID (uuid)The identifier of the object the operation acts on, as the listing operation of that kind of object reports it. It has to match the shape the route declares - a GUID where the route is typed as one - since a value of another shape does not match the route at all and is answered as not found.[required] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200Whether the module is registered, visible and readable by the calling user - false covers a module that is not registered here as well as one the caller may not openBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebItemSettingsSecurityInfo​

SecurityArrayWrapper getWebItemSettingsSecurityInfo(ids)

GET /api/2.0/settings/security

Get module access settings

Reports how access to the portal's own modules is configured: for every module identifier sent in ids, whether access is restricted at all and which users and groups are allowed to open the module. Send the identifiers as repeated ids query values; each one has to be a GUID, and anything else is rejected as an invalid request. Omitting ids asks about every module registered in the portal, which on a DocSpace installation is none, so the answer is then an empty list rather than a failure. Any signed-in member may call this; anonymous callers are not admitted. The operation is read-only and answers one entry per identifier, in the order the identifiers were sent. enabled is false for a module nobody has ever configured, groups and users name the subjects the rule was stored for, and isSubItem marks a module that hangs under another one. Users the caller is not allowed to see are left out of users, so the same module can come back with different lists for different callers. Change any of this with PUT api/2.0/settings/security.

Parameters​

NameInTypeDescriptionNotes
idsqueryListThe modules to report on, each given as a GUID and sent as a repeated query value. An entry that is not a GUID fails the whole request as invalid. Leaving the list out asks about every module registered in the portal, which on a DocSpace installation is none, so the answer is then empty rather than complete.[optional] [example: ["00000000-0000-0000-0000-000000000000"]]

Responses​

Status codeDescriptionTypeResponse headers
200The access configuration of every module identifier asked about: the enabled flag, the allowed groups, the allowed users the caller may see, and the sub-module flagSecurityArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SecurityArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

setAccessToWebItems​

SecurityArrayWrapper setAccessToWebItems(WebItemsSecurityRequestsDto)

PUT /api/2.0/settings/security/access

Set access to modules in bulk

Switches several portal modules on or off in one call: items carries an entry per module, its key the module GUID and its value the new enabled flag. The caller needs the portal-settings right of a DocSpace administrator, and the call is answered with 403 on an open portal, where everyone is admitted and per-module rules would mean nothing. Every key has to be a GUID; anything else is rejected as an invalid request, and a module listed twice is applied once, from its first entry. This operation carries no subject list of its own: switching a product module on restores the users and groups it was last restricted to, while every other case is stored as a plain allow or deny for everyone, so use PUT api/2.0/settings/security when the allow-list itself has to change. The batch is recorded in the audit trail as one list update rather than module by module. The answer is the resulting configuration of every module listed, in the shape GET api/2.0/settings/security returns.

Parameters​

NameInTypeDescriptionNotes
WebItemsSecurityRequestsDtobodyWebItemsSecurityRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The resulting access configuration of every module listed in the requestSecurityArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Per-module access cannot be configured on an open portal, or the caller lacks the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SecurityArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setProductAdministrator​

ProductAdministratorWrapper setProductAdministrator(SecurityRequestsDto)

PUT /api/2.0/settings/security/administrator

Set product administrator

Promotes a portal member to administrator of one module, or takes that role away, according to the administrator flag; the all-zero product GUID targets the DocSpace administrator role, which covers the whole portal. The caller needs the portal-settings right of a DocSpace administrator, and granting the portal-wide role additionally requires being the portal owner - anyone else is refused with 403. A free cloud plan does not offer the option at all and answers 402, as does a promotion for which no paid seat is left, since promoting a guest or a plain member turns them into a paid one. Taking the portal-wide role away also removes the member from every product group. The change is immediate, portal-wide, recorded in the audit trail, and sending the same body twice changes nothing further; it never creates a user, so invite the member first. The answer echoes the identifiers and the flag as stored - re-read membership with GET api/2.0/settings/security/administrator.

Parameters​

NameInTypeDescriptionNotes
SecurityRequestsDtobodySecurityRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The module, the user and the administrator flag as they were storedProductAdministratorWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
402The portal plan does not offer product administrators, or no paid seat is left for the member being promoted--
403Only the portal owner can grant or revoke the portal-wide administrator role--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

ProductAdministratorWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

setWebItemSecurity​

SecurityArrayWrapper setWebItemSecurity(WebItemSecurityRequestsDto)

PUT /api/2.0/settings/security

Set module access

Replaces the access rules of one portal module: id names the module, enabled says whether it may be opened, and subjects lists the users and groups the rule is stored for. The caller needs the portal-settings right of a DocSpace administrator, and the call is answered with 403 on an open portal, where everyone is admitted and per-module rules would mean nothing. id has to be a GUID; anything else is rejected as an invalid request. The rules stored before are dropped rather than extended, so send the full list of subjects every time. Watch the empty cases: leaving subjects out applies enabled to everyone, while an empty subjects array is stored as access for everyone whatever enabled says. The change is recorded in the audit trail unless subjects was left out entirely. The answer is the module's resulting configuration as a single-entry list, in the shape GET api/2.0/settings/security returns. To switch several modules at once use PUT api/2.0/settings/security/access.

Parameters​

NameInTypeDescriptionNotes
WebItemSecurityRequestsDtobodyWebItemSecurityRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The resulting access configuration of the module, as a single-entry listSecurityArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Per-module access cannot be configured on an open portal, or the caller lacks the portal-settings right of a DocSpace administrator--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

SecurityArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updatePasswordSettings​

PasswordSettingsWrapper updatePasswordSettings(PasswordSettingsRequestsDto)

PUT /api/2.0/settings/security/password

Update password settings

Replaces the password policy of the whole portal with the four values sent: minLength and the three flags that demand an uppercase letter, a digit and a special symbol. There is no partial update - a flag left out of the body is stored as false - so read the current policy with GET api/2.0/settings/security/password and send it back with your change applied. The caller needs the portal-settings right of a DocSpace administrator, otherwise the call is refused. minLength has to sit between the floor the installation is configured with, 8 characters unless it was changed, and the ceiling of 30; anything outside is rejected as an invalid request. The new policy applies to passwords set from now on: existing passwords keep working until their owners change them, and nobody is asked to renew. The change is portal-wide, recorded in the audit trail, and sending the same body twice changes nothing further. The answer is the stored policy with its regular expressions.

Parameters​

NameInTypeDescriptionNotes
PasswordSettingsRequestsDtobodyPasswordSettingsRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The password policy as it was stored, including the regular expressions a client can validate againstPasswordSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The requested minimum length is outside the range the installation allows--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

PasswordSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsStatisticsApi​

getSpaceUsageStatistics​

UsageSpaceStatItemArrayWrapper getSpaceUsageStatistics(id)

GET /api/2.0/settings/statistics/spaceusage/{id}

Get the space usage statistics

Returns the storage space used by one portal module, broken down per data category the module tracks (for example per room type), together with a human-readable size and whether the category is disabled. Requires Owner or DocSpaceAdmin (the EditPortalSettings permission). id identifies the module by the same GUID the portal's module catalog uses; a module that does not exist, or one that does not report space usage at all, returns an empty list rather than an error. This is a read-only, idempotent call, and the list is not paginated. Sizes are already formatted as display strings (for example 1.5 GB), not raw byte counts.

Parameters​

NameInTypeDescriptionNotes
idpathUUID (uuid)The identifier of the object the operation acts on, as the listing operation of that kind of object reports it. It has to match the shape the route declares - a GUID where the route is typed as one - since a value of another shape does not match the route at all and is answered as not found.[required] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200Per-category space usage statistics for the requested moduleUsageSpaceStatItemArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

UsageSpaceStatItemArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsStorageApi​

getAllBackupStorages​

StorageArrayWrapper getAllBackupStorages(Dump)

GET /api/2.0/settings/storage/backup

Get the backup storages

Returns the storages that can hold portal backups, with the one the saved backup schedule writes to marked as current and its parameters filled in from that schedule; when no schedule is saved, or when the schedule stores backups somewhere else than a third-party provider, none of the entries is current. Each entry has the same shape as in GET api/2.0/settings/storage: identifier, title, the authentication keys the provider expects, and isSet telling whether those keys are filled in on the server. Pass dump=true to read the schedule of the whole server instead of the one of the current portal, which only makes sense on a server installation. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and on an installation that is not a server one the call is also refused unless backup is available there. Nothing is written and the call is safe to repeat. This operation says nothing about where the portal data itself lives; the backup schedule is configured through the backup API, and the storage of the documents through PUT api/2.0/settings/storage.

Parameters​

NameInTypeDescriptionNotes
DumpqueryBooleanWhether the schedule of the whole server is read instead of the one of the current portal. It only changes which schedule marks an entry as current; the list of storages itself is the same either way, and the flag makes sense only on a self-hosted installation.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The storages that can hold portal backups, with the scheduled one marked as currentStorageArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings, or backup is not available on this installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StorageArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAllCdnStorages​

StorageArrayWrapper getAllCdnStorages()

GET /api/2.0/settings/storage/cdn

Get the CDN storages

Returns the storages that can serve the static content of the portal through a content delivery network, which is the subset of the providers of GET api/2.0/settings/storage that offer a CDN of their own. The entries have the same shape as in the storage listing: identifier and title, the authentication keys the provider expects, isSet telling whether those keys are filled in on the server, and current marking the CDN the portal uses now. Keys of the current entry come from the saved CDN settings and keys of the others from the provider configuration. An empty list means the build ships no CDN-capable provider, and a list where nothing is current means the portal serves its static content itself. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space. Nothing is written and the call is safe to repeat. Use PUT api/2.0/settings/storage/cdn to select a CDN and DELETE api/2.0/settings/storage/cdn to stop using one.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The storages that can serve as the portal CDN, with the one in use marked as currentStorageArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StorageArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAllStorages​

StorageArrayWrapper getAllStorages()

GET /api/2.0/settings/storage

Get the portal storages

Returns the third-party storages the installation can keep portal data in, the providers the build ships with, such as Amazon S3, Google Cloud Storage or Rackspace. The built-in local storage is not among them: when none of the entries is current, the portal data sits in the local storage. Each entry carries the storage identifier and title, the authentication keys the provider expects, isSet telling whether those keys are already filled in on the server, and current marking the one the portal uses right now. Keys of the current storage are read from the saved settings, keys of the others from the provider configuration, so a value that was never configured comes back empty. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and the installation has to be a server one whose access space is not restricted; otherwise the call is refused with 403. Nothing is written and the call is safe to repeat. Use PUT api/2.0/settings/storage to switch the storage, DELETE api/2.0/settings/storage to go back to the local one, and GET api/2.0/settings/storage/cdn or GET api/2.0/settings/storage/backup for the CDN and backup targets.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The storages available to the portal, each marked as configured and as currently in useStorageArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StorageArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getAmazonS3Regions​

AmazonS3RegionArrayWrapper getAmazonS3Regions()

GET /api/2.0/settings/storage/s3/regions

Get the Amazon S3 regions

Returns the Amazon regions the server knows about, each with its system name such as eu-central-1, the display name to show a user, and the partition details the region belongs to: partition name, DNS suffix, the pattern its region names match and the template its host names are built from. This is static reference data compiled into the server rather than portal configuration: nothing is read from the settings, nothing is written, the answer is the same for every portal and changes only when the server is updated, so it can be cached by the caller. Use the system name of an entry as the region value in props when configuring an Amazon S3 storage with PUT api/2.0/settings/storage, PUT api/2.0/settings/storage/cdn or a backup schedule, and prefer picking a value from here over typing one, because a region the server does not know cannot be reached. Any authenticated caller may read the list, no portal-settings permission is asked for, and the result is neither paginated nor filtered.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The Amazon regions known to this installationAmazonS3RegionArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

AmazonS3RegionArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getStorageProgress​

DoubleWrapper getStorageProgress()

GET /api/2.0/settings/storage/progress

Get the storage migration progress

Returns how far the current portal has got in moving its data to another storage, as a percentage from 0 to 100. The migration itself is started by PUT api/2.0/settings/storage or DELETE api/2.0/settings/storage, which put the portal into the migrating state; poll this operation until the value reaches 100, then the portal is served from the new storage. A value of -1 means storage migration is not offered on this installation, which is the case for every portal that is not a server one. Ask for the progress only once a migration has actually been started: for a portal whose migration the server does not remember, the call fails instead of answering with a zero. The response carries the percentage only, without the error flag the migration service reports internally, so a value that stops advancing is a reason to check the portal state with GET api/2.0/portal rather than proof of progress. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, and the call is accepted even when the portal payment has lapsed. Nothing is written and the call is safe to repeat.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Migration progress as a percentage, or -1 where storage migration is not offeredDoubleWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

DoubleWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

resetCdnToDefault​

resetCdnToDefault()

DELETE /api/2.0/settings/storage/cdn

Reset the CDN storage settings

Drops the CDN configuration of the current portal, module and saved credentials alike, so that the static content is served by the portal itself again. Nothing is uploaded or migrated, no state change is queued and the call gives back no body: only the settings are cleared, and files already copied to the content delivery network are left where they are, to be removed in the provider's own console if that is wanted. The change takes effect for links built after it, so a page that is already open may keep pointing at the CDN until it is reloaded. Repeating the call is harmless, because clearing an empty configuration does nothing. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space. Use GET api/2.0/settings/storage/cdn to see what is configured now and PUT api/2.0/settings/storage/cdn to select a CDN again; the portal storage of the documents is untouched by this operation and is reset with DELETE api/2.0/settings/storage instead.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The CDN configuration has been cleared and static content is served by the portal again-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

resetStorageToDefault​

resetStorageToDefault()

DELETE /api/2.0/settings/storage

Reset the storage settings

Drops the third-party storage configuration of the current portal, module and saved credentials alike, and starts an asynchronous migration of the portal data back into the built-in local storage. The portal moves into the migrating state and stays unavailable until the transfer ends, so follow it with GET api/2.0/settings/storage/progress; the call itself returns as soon as the migration has been handed to the storage service and gives back no body. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space. This is a mutating and slow operation rather than a destructive one: documents are copied back rather than deleted, but the credentials of the previous storage are gone from the settings and have to be sent again with PUT api/2.0/settings/storage to switch back. Repeating the call while a migration is running starts another one, so poll instead. Resetting the storage is also the step that makes POST api/2.0/settings/encryption/start possible, since encryption only covers the local storage.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The storage configuration has been cleared and migration back to the local storage has started-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateCdnStorage​

CdnStorageSettingsWrapper updateCdnStorage(StorageRequestsDto)

PUT /api/2.0/settings/storage/cdn

Update the CDN storage

Selects the content delivery network that serves the static content of the portal and saves the credentials it needs: module is the identifier of one of the entries of GET api/2.0/settings/storage/cdn, and props carries that provider's authentication keys as name and value pairs. The provider has to be available on the server, which the isSet flag of the listing tells, otherwise the request is rejected as invalid. Sending the module the portal already uses changes nothing and returns the saved settings as they are. Any other module is saved and the upload of the static content is handed to the storage service; the settings come back only when that hand-over succeeds, a failure being reported as a server error. Unlike the portal storage this has no progress operation, so there is nothing to poll: the content appears on the CDN once the service has copied it. Only static content is affected here, never documents; for those use PUT api/2.0/settings/storage. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space. The response is the stored CDN configuration.

Parameters​

NameInTypeDescriptionNotes
StorageRequestsDtobodyStorageRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The saved CDN configuration; the upload of the static content has been handed to the storage serviceCdnStorageSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The requested CDN module is not configured on this installation--
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

CdnStorageSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateStorage​

StorageSettingsWrapper updateStorage(StorageRequestsDto)

PUT /api/2.0/settings/storage

Switch the portal storage

Points the current portal at another storage and saves the credentials it needs: module is the identifier of one of the storages listed by GET api/2.0/settings/storage, and props carries that provider's authentication keys as name and value pairs, for example the bucket, region and access key of an Amazon S3 storage. The provider has to be available on the server, which the isSet flag of the listing tells, otherwise the request is rejected as invalid. Sending the module the portal already uses changes nothing and returns the saved settings as they are. Any other module starts an asynchronous migration of the portal data: the portal moves into the migrating state and stays unavailable until the transfer ends, so follow it with GET api/2.0/settings/storage/progress and do not send a second switch while it runs. The caller needs the permission to edit portal settings, which in practice means the portal owner or a DocSpace admin, on a server installation with an unrestricted access space. The response is the stored configuration, module and properties, not the state of the migration. To return to the built-in local storage call DELETE api/2.0/settings/storage, and for the CDN use PUT api/2.0/settings/storage/cdn.

Parameters​

NameInTypeDescriptionNotes
StorageRequestsDtobodyStorageRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The saved storage configuration; migration of the portal data to it has been startedStorageSettingsWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The requested storage module is not configured on this installation--
403The caller may not edit portal settings, or this installation does not allow changing the storage--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StorageSettingsWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsTFASettingsApi​

getTfaAppCodes​

TfaAppCodeArrayWrapper getTfaAppCodes()

GET /api/2.0/settings/tfaappcodes

Get the TFA backup codes

Returns the one-time backup codes of the current user's authenticator-application credential, each with the flag that says whether it has been spent. A backup code is accepted in place of a code from the application when signing in, and every code works exactly once, so this list is what a member falls back on after losing access to their authenticator. Any authenticated member may call it, always for their own account: there is no way to read someone else's codes. The authenticator method has to be enabled on the portal and an application has to be linked to the account already, otherwise the call answers 405; link one through GET api/2.0/settings/tfaapp/confirm and POST api/2.0/settings/tfaapp/validate. Accounts flagged as outsiders are refused. This is a read-only, idempotent call: the codes are generated once, when the application is first linked, and the whole set is replaced by PUT api/2.0/settings/tfaappnewcodes. The default configuration issues five codes of six characters, and a portal may be configured for a different number and length.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The caller's backup codes, each with the flag showing whether it has already been usedTfaAppCodeArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405The authenticator method is not enabled on this portal, or the caller has no application linked--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TfaAppCodeArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTfaConfirmData​

TfaConfirmDataWrapper getTfaConfirmData()

GET /api/2.0/settings/tfaapp/confirm

Get TFA confirmation data

Returns the confirmation link the current user has to follow to pass the portal's two-factor authentication step, together with the confirmation cookie that link depends on. Any authenticated member may call it, always for their own account, and TFA has to be required for that account by the portal policy already, otherwise the response body is empty. Which link comes back depends on the method. With the SMS method it is a phone activation link while the account has no activated mobile number and a phone authorization link afterwards, and only url is filled in. With the authenticator-application method the response also carries cookieName and cookieValue, and the call mutates state by issuing a fresh confirmation key and setting that cookie; the link then points at activation while no application is linked, or after the previous link was reset, and at re-verification once one is linked. Hand the code obtained through that flow to POST api/2.0/settings/tfaapp/validate. The portal-wide policy behind all of this is read with GET api/2.0/settings/tfaapp.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The confirmation link for the caller's TFA step, with the cookie filled in for the authenticator methodTfaConfirmDataWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TfaConfirmDataWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getTfaSettings​

TfaSettingsArrayWrapper getTfaSettings()

GET /api/2.0/settings/tfaapp

Get the TFA settings

Lists the two-factor authentication methods this portal offers, with the state of each one. The list carries at most two entries: sms, present only when the SMS method is enabled in the portal's configuration, and app, present only when the authenticator-application method is enabled there, so an empty list means neither method is offered here. Any authenticated member may call it, and what it returns is the portal-wide policy, not the caller's own linked credential. This is a read-only, idempotent call. For every entry enabled says whether that method is the current policy, available says whether it can actually be switched on (for sms that also requires a configured SMS provider), trustedIps lists the addresses and ranges exempt from the challenge, and mandatoryUsers and mandatoryGroups list the accounts that have to pass it even from a trusted address. Change the policy with PUT api/2.0/settings/tfaapp, and read the caller's own backup codes with GET api/2.0/settings/tfaappcodes.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The TFA methods the portal offers, with the portal-wide state of eachTfaSettingsArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TfaSettingsArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

tfaAppGenerateSetupCode​

TfaSetupCodeWrapper tfaAppGenerateSetupCode()

GET /api/2.0/settings/tfaapp/setup

Generate the TFA setup code

Issues the secret the current user has to enter in an authenticator application before the authenticator-application method can be used, both as a scannable QR-code image and as a key for manual entry. The call is reachable only with a confirmation token carrying the TfaActivation role, obtained from GET api/2.0/settings/tfaapp/confirm or from the login flow; an ordinary bearer token is refused. The authenticator method has to be enabled on the portal and be its current policy, and the account must have no application linked yet: for an already-linked account the call answers 405, so reset the credential first with PUT api/2.0/settings/tfaappnewapp. Accounts flagged as outsiders are refused. Repeating the call is safe and hands back the same secret for the account, so the QR code and the manual key always describe one and the same credential. qrCodeSetupImageUrl is a base64 data: URL of a PNG image, and account is the label the application will show. Finish the setup by sending a code from the application to POST api/2.0/settings/tfaapp/validate.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The account label, the manual entry key and the QR-code image for linking an authenticator applicationTfaSetupCodeWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405The authenticator method is not enabled on this portal, or the account already has an application linked--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TfaSetupCodeWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

tfaValidateAuthCode​

BooleanWrapper tfaValidateAuthCode(TfaValidateRequestsDto)

POST /api/2.0/settings/tfaapp/validate

Validate the TFA code

Verifies a two-factor authentication code for the account named in the confirmation link being used, and completes that account's pending TFA step. The call is reachable only with a confirmation token carrying the TfaActivation or TfaAuth role, issued by GET api/2.0/settings/tfaapp/confirm or by the login flow; an ordinary bearer token is refused. Both a code from the authenticator application and one of the account's unused backup codes are accepted, and a backup code is spent by the check. The call mutates state: it signs the account in, clears the confirmation cookie so the link cannot be replayed, and on the very first activation it generates the backup codes later returned by GET api/2.0/settings/tfaappcodes. Pass session=true to keep that sign-in for the browser session only instead of a persistent one. It answers true only for that first activation and false when an application was already linked. A wrong code is rejected as an invalid request, and further attempts are refused once the portal's login attempt limit is reached. The call also works while the portal's payment is overdue.

Parameters​

NameInTypeDescriptionNotes
TfaValidateRequestsDtobodyTfaValidateRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the code completed a first activation and backup codes were generated, false when an application was already linkedBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

unlinkTfaApp​

StringWrapper unlinkTfaApp(TfaRequestsDto)

PUT /api/2.0/settings/tfaappnewapp

Unlink the TFA application

Detaches the authenticator application from an account, so that the account has to link a new one before it can sign in again. id has to name an existing account: an empty or unknown value is refused. Passing the caller's own ID resets their own credential and returns the activation link they should follow next; passing another member's ID is allowed for the portal owner only, and every other caller, a DocSpace administrator included, is refused. The account has to have an application linked and the authenticator method has to be enabled on the portal, otherwise the call answers 405. The call is destructive: the account's backup codes are dropped together with the credential and all of its sessions are signed out. For another member the portal also emails them that their TFA was reset, and the answer is then an empty string. The portal-wide policy is not touched, so TFA stays required and the account sets up an application again through GET api/2.0/settings/tfaapp/confirm; lift the requirement for everyone with PUT api/2.0/settings/tfaapp.

Parameters​

NameInTypeDescriptionNotes
TfaRequestsDtobodyTfaRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The activation link when the caller reset their own application, or an empty string when another member's was resetStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is not the portal owner, or the account cannot be resolved from id--
405The authenticator method is not enabled on this portal, or the account has no application linked--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateTfaAppCodes​

TfaAppCodeArrayWrapper updateTfaAppCodes()

PUT /api/2.0/settings/tfaappnewcodes

Regenerate the TFA backup codes

Replaces the current user's one-time backup codes with a freshly generated set and returns it. Use it once the previous codes have been spent or may have leaked: the whole old set stops being accepted the moment this call succeeds, so store the new codes before leaving the response. Any authenticated member may call it, always for their own account. The authenticator method has to be enabled on the portal and an application has to be linked to the account already, otherwise the call answers 405, and accounts flagged as outsiders are refused. The call mutates state and is not idempotent: every invocation issues another set and discards the one before it, so a retry after a timeout returns codes different from those the first attempt generated. The codes come back unused, five of them of six characters with the default configuration, and a portal may be configured for a different number and length. Read the current set without changing it through GET api/2.0/settings/tfaappcodes. The authenticator secret itself is untouched, so the linked application keeps working.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The newly generated backup codes, all unused, replacing the caller's previous setTfaAppCodeArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405The authenticator method is not enabled on this portal, or the caller has no application linked--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TfaAppCodeArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateTfaSettings​

BooleanWrapper updateTfaSettings(TfaRequestsDto)

PUT /api/2.0/settings/tfaapp

Update the TFA settings

Sets the portal-wide two-factor authentication policy: type 1 switches on the SMS method, 2 switches on the authenticator application, and 0 turns TFA off, as does any unknown value. The two methods are mutually exclusive, so switching one on switches the other off. The caller has to be the portal owner or a DocSpace administrator; other members are refused, and a request that names the owner's account in id or in mandatoryUsers is refused unless id carries the caller's own account. trustedIps takes single addresses, inclusive ranges and CIDR blocks, and an unparseable entry is rejected as an invalid request; accounts listed in mandatoryUsers or mandatoryGroups still have to pass the challenge even from a trusted address. Switching a method on is disruptive: it resets the portal's authentication cookies, so every session on the portal, the caller's own included, has to sign in again. The answer is true when a method was switched on and false when TFA was turned off. Use PUT api/2.0/settings/tfaappwithlink instead to receive the caller's own confirmation link in the same step.

Parameters​

NameInTypeDescriptionNotes
TfaRequestsDtobodyTfaRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200true when the SMS or the authenticator method was switched on, false when TFA was turned offBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
405The requested method is not enabled on this portal, or the SMS method has no configured provider--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

StringWrapper updateTfaSettingsLink(TfaRequestsDto)

PUT /api/2.0/settings/tfaappwithlink

Update TFA settings with a link

Applies the same portal-wide two-factor authentication change as PUT api/2.0/settings/tfaapp and additionally returns the confirmation link the caller needs to pass the new challenge, so an administrator who has just switched TFA on can go straight to setting it up for themselves. The caller has to be the portal owner or a DocSpace administrator, and a request that names the owner's account in id or in mandatoryUsers is refused unless id carries the caller's own account. Every effect of the plain call applies here too: the methods are mutually exclusive, type 0 turns TFA off, trustedIps and the two mandatory lists behave the same way, and switching a method on resets the portal's authentication cookies, so all sessions have to sign in again. The answer is an empty string whenever there is no link to hand out: when the request turned TFA off, and when the caller is exempt from the challenge, most often because their own address is in the trustedIps list of that very request. The cookie the link depends on is not returned here, read it with GET api/2.0/settings/tfaapp/confirm.

Parameters​

NameInTypeDescriptionNotes
TfaRequestsDtobodyTfaRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The caller's own confirmation link, or an empty string when TFA was turned off or the caller is exemptStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is neither the portal owner nor a DocSpace administrator, or is placing the owner under the policy--
405The requested method is not enabled on this portal, or the SMS method has no configured provider--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsTelegramApi​

checkTelegram​

TelegramStatusWrapper checkTelegram()

GET /api/2.0/settings/telegram/check

Check the Telegram connection

Reports whether the current user's account is linked to the portal's Telegram bot, and under which Telegram username. The bot keys must be configured for the portal beforehand with POST api/2.0/settings/authservice; until a bot is configured, linking cannot be completed and the status never reaches the linked state. Any authenticated user may call it, and only for their own account: there is no way to read another member's Telegram status. This is a read-only, idempotent call. The returned status is published as a number, where 0 means the account is not linked, 1 means it is linked, and 2 means a registration link has been issued and the portal is still waiting for the user to open it in Telegram. The username field is filled in only in state 1 and comes back empty in the other two. Start or resume linking with GET api/2.0/settings/telegram/link, and drop an established link with DELETE api/2.0/settings/telegram/link.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The current user's Telegram link state, with the username filled in only when linkedTelegramStatusWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

TelegramStatusWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

linkTelegram​

StringWrapper linkTelegram()

GET /api/2.0/settings/telegram/link

Get the Telegram link

Returns the personal t.me deep link that connects the current user's account to the portal's Telegram bot, so that notifications can be delivered to that user in Telegram. The bot keys must be configured for the portal beforehand with POST api/2.0/settings/authservice; without a configured bot name the response comes back empty. Any authenticated user may call it, and the link always belongs to the caller's own account. The call mutates state: unless the user still has an outstanding registration token it issues a fresh one, so calling it twice in a row hands back the same link instead of invalidating the first. That token is short-lived (20 minutes with the default configuration), and once it has expired the operation has to be called again for a new link. Linking itself is completed in Telegram, not here, so poll GET api/2.0/settings/telegram/check until its status becomes 1. Remove an established link with DELETE api/2.0/settings/telegram/link.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200A t.me deep link that connects the caller's account to the portal's Telegram botStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

unlinkTelegram​

BooleanWrapper unlinkTelegram()

DELETE /api/2.0/settings/telegram/link

Unlink Telegram

Removes the link between the current user's account and the portal's Telegram bot, so that this user stops receiving notifications in Telegram. Any authenticated user may call it, and only for their own account: one member cannot unlink another. Nothing has to be linked beforehand, and the call is destructive but idempotent, returning true both when a link was removed and when there was none to remove, so a retry after a timeout is safe. Only the portal-side link is dropped: the chat itself stays in the user's Telegram, and the portal's bot configuration is untouched, so the other members keep their own links. Re-linking is not automatic, request a new link with GET api/2.0/settings/telegram/link and confirm the result with GET api/2.0/settings/telegram/check. Delivery over the other notification channels is unaffected; the channels enabled for the portal are listed by GET api/2.0/settings/notification/channels.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200Always true once the caller has no link to the Telegram botBooleanWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

BooleanWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

SettingsWebhooksApi​

createWebhook​

WebhooksConfigWrapper createWebhook(CreateWebhooksConfigRequestsDto)

POST /api/2.0/settings/webhook

Create a webhook

Creates a webhook subscription for the current portal: a target URL that the portal calls with a signed JSON payload whenever one of the subscribed events happens. The target is checked before anything is stored, so it has to be an absolute http or https address outside the installation's own network, and it has to answer a HEAD request with a success code, redirects not being followed. secretKey is mandatory here, has to satisfy the portal password rules published by GET api/2.0/settings/security/password, and signs the payloads; it does not appear in any response. triggers is a bitmask of the subscribed events with 0 standing for all of them; a flag the caller's role may not use is rejected, so take the allowed set from GET api/2.0/settings/webhook/triggers. ssl=true additionally demands an https target with a valid certificate, while ssl=false leaves the certificate unchecked. Set targetId to deliver events about a single entity only. A subscription fires only for events its creator is allowed to see, and only while it is enabled. Any role except Guest may create one, and each call adds another subscription rather than replacing an existing one.

Parameters​

NameInTypeDescriptionNotes
CreateWebhooksConfigRequestsDtobodyCreateWebhooksConfigRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The created webhook subscription, without its secret keyWebhooksConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The target URL is unusable or unreachable, or the secret key or a trigger flag was rejected--
403The caller is a Guest, or a non-admin caller while the developer tools are restricted--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

enableWebhook​

WebhooksConfigWrapper enableWebhook(UpdateWebhooksConfigRequestsDto)

PUT /api/2.0/settings/webhook/enable

Switch a webhook on or off

Switches one webhook subscription on or off, leaving the rest of its parameters as they are. Only id and enabled are read from the body: name, uri, secretKey, ssl, triggers and targetId are demanded by the schema but ignored here, so change any of them with PUT api/2.0/settings/webhook instead. Switching a subscription on re-checks what is already stored, probing the saved URL with a HEAD request and re-validating the saved secret against the current portal password rules, and the call is refused with 400 when either fails: a subscription whose target has gone away, or whose secret predates a tightening of the password rules, cannot be switched on until it is updated. Switching one off is not validated. While a subscription is off its events are dropped rather than queued, so nothing arrives from that period once it is switched on again. A DocSpaceAdmin may switch any subscription in the portal, anyone else only their own, and a Guest is refused. The response carries the subscription in its new state, and repeating the call changes nothing further.

Parameters​

NameInTypeDescriptionNotes
UpdateWebhooksConfigRequestsDtobodyUpdateWebhooksConfigRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The webhook subscription in its new state, without its secret keyWebhooksConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The saved target no longer answers, or the saved secret no longer passes the password rules--
403The subscription belongs to another member, or the caller may not use webhooks at all--
404No webhook subscription with this ID exists in the portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

getTenantWebhooks​

WebhooksConfigWithStatusArrayWrapper getTenantWebhooks()

GET /api/2.0/settings/webhook

Get the portal webhooks

Returns the webhook subscriptions of the current portal, each together with the outcome of its most recent delivery. The portal owner and a DocSpaceAdmin see every subscription in the portal, while a RoomAdmin or a User sees only the ones they created themselves, so the same call answers differently depending on who asks. A Guest may not use webhooks at all and is refused, and so is any non-admin caller while the portal keeps the developer tools restricted, which GET api/2.0/settings/devtoolsaccess reports. Every entry pairs the stored configuration with status, the HTTP status code the target answered on the last attempt, where 0 means nothing has been delivered yet, while the secret key is not part of the response. The list is neither paginated nor ordered, and an empty list simply means no subscription exists for the caller. Nothing is written and the call is safe to repeat. Create a subscription with POST api/2.0/settings/webhook, and inspect single deliveries with GET api/2.0/settings/webhooks/log.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The webhook subscriptions visible to the caller, each with the status of its last deliveryWebhooksConfigWithStatusArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is a Guest, or a non-admin caller while the developer tools are restricted--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksConfigWithStatusArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebhookTriggers​

WebhookTriggerArrayWrapper getWebhookTriggers()

GET /api/2.0/settings/webhook/triggers

Get the webhook triggers

Returns the catalogue of events a webhook subscription can listen to, in the order the portal presents them: user events, then group, file, folder, room, form and agent ones. Each entry carries the event name as it appears in a payload, such as file.created, the bit value to put into the triggers bitmask of a subscription, and available, telling whether the caller's own role may subscribe to that event at all: a User cannot subscribe to the creation of users, groups or rooms, for instance, while a RoomAdmin can. Add the bit values of the wanted events together to build triggers; the entry named * has the value 0 and stands for every event, so it is used on its own rather than added. Events unavailable to the caller are listed all the same, but passing one to POST api/2.0/settings/webhook or PUT api/2.0/settings/webhook is rejected as an invalid request. This is fixed reference data: the same for every portal, not paginated, changing only with the product version, and readable by any authenticated caller, a Guest included. Nothing is written.

Parameters​

This endpoint does not need any parameter.

Responses​

Status codeDescriptionTypeResponse headers
200The triggers a webhook may subscribe to, each marked available for the caller's role or notWebhookTriggerArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhookTriggerArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebhooksLogs​

WebhooksLogArrayWrapper getWebhooksLogs(deliveryFrom, deliveryTo, hookUri, configId, eventId, groupStatus, userId, trigger, count, startIndex)

GET /api/2.0/settings/webhooks/log

Get the webhook delivery log

Returns the delivery records of the portal webhooks, one record per attempt, carrying the trigger, the request and response headers and bodies, the HTTP status the target answered and the delivery moment, the last two staying empty while an attempt is still on its way. Records come newest first and are paged with startIndex and count, at most 100 at a time, while the number of records matching the filter is reported as total beside the response. Filters combine with AND: deliveryFrom and deliveryTo bound the delivery moment, hookUri matches the subscription URL exactly, configId picks one subscription, eventId one single record, groupStatus keeps only the answered status classes it names with 0 meaning no status filter, and trigger narrows to one event with 0 meaning all of them. userId filters by who created the subscription rather than by who caused the event, and for a caller who is not a DocSpaceAdmin it is forced to the caller, so a non-admin only ever sees deliveries of their own subscriptions. A Guest is refused. Nothing is written.

Parameters​

NameInTypeDescriptionNotes
deliveryFromqueryDate (date-time)The earliest delivery moment a record may carry. Records of attempts still on their way have no delivery moment yet and fall outside any bound set here.[optional] [example: 2024-01-15T10:30:00Z]
deliveryToqueryDate (date-time)The latest delivery moment a record may carry. All the filters combine with AND, so it narrows whatever the other ones already kept.[optional] [example: 2024-01-15T10:30:00Z]
hookUriqueryStringThe subscription target address, matched in full rather than as a prefix. Filtering by configId is the reliable way to pick one subscription, since several may share an address.[optional] [example: https://example.com/webhook]
configIdqueryInteger (int32)The subscription whose deliveries are kept, by the id that GET api/2.0/settings/webhook reports.[optional] [example: 1]
eventIdqueryInteger (int32)A single delivery record, by its own identifier. It narrows the answer to that one record, which is how a client follows up a retry it queued earlier.[optional] [example: 1]
groupStatusqueryWebhookGroupStatusThe classes of answered status to keep, as a bitmask; 0 keeps every record whatever the target answered.[optional] [example: NotSent] [enum: 0, 1, 2, 4, 8, 16]
userIdqueryUUID (uuid)The member whose subscriptions the records belong to, by portal user ID - who created the subscription, not who caused the event. For a caller who is not a DocSpace administrator it is overwritten with the caller own ID, so such a caller never sees another member deliveries whatever is sent here.[optional] [example: {}]
triggerqueryWebhookTriggerThe single event kind to keep; 0 keeps every kind. It names one trigger rather than a mask of several, unlike the triggers a subscription is created with.[optional] [example: 0] [enum: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
countqueryInteger (int32)How many records one page may hold. The maximum is also the default, so a client that wants shorter pages has to ask for them; the number of records matching the filter comes back as total beside the page.[optional] [example: 1] [min: 1] [max: 100]
startIndexqueryInteger (int32)How many matching records to skip before the page begins, counting from the newest. Advance it by count to walk back through the log.[optional] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200The matching delivery records, newest first, with the total count reported beside themWebhooksLogArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is a Guest, or a non-admin caller while the developer tools are restricted--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksLogArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

removeWebhook​

WebhooksConfigWrapper removeWebhook(id)

DELETE /api/2.0/settings/webhook/{id}

Remove a webhook

Removes one webhook subscription from the current portal for good, addressed by id in the path. Deliveries stop with it: matching events are no longer queued, and there is no undo, so a subscription dropped by mistake has to be created again with POST api/2.0/settings/webhook, which gives it a new identifier and needs a new secret key. To pause deliveries without losing the configuration, switch the subscription off with PUT api/2.0/settings/webhook/enable instead. A DocSpaceAdmin may remove any subscription in the portal, anyone else only the ones they created, and a Guest may not use webhooks at all. The response repeats the subscription as it was just before the removal, so the caller can record what disappeared, again without the secret key. An identifier that no longer exists gives 404, which is what a second removal of the same subscription answers as well, so a repeated call is harmless but reports the state truthfully rather than pretending to succeed.

Parameters​

NameInTypeDescriptionNotes
idpathInteger (int32)The identifier of the object the operation acts on, as the listing operation of that kind of object reports it. It has to match the shape the route declares - a GUID where the route is typed as one - since a value of another shape does not match the route at all and is answered as not found.[required] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200The removed webhook subscription, as it was just before the removalWebhooksConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The subscription belongs to another member, or the caller may not use webhooks at all--
404No webhook subscription with this ID exists in the portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

retryWebhook​

WebhooksLogWrapper retryWebhook(id)

PUT /api/2.0/settings/webhook/{id}/retry

Retry a webhook delivery

Sends one past webhook delivery again. The id in the path is that of a delivery record from GET api/2.0/settings/webhooks/log, not of a subscription, and the payload kept in that record is sent once more to the subscription it belongs to. The work is asynchronous: a fresh delivery record is created and queued at once, and the response describes that new record, with an identifier of its own and with status and delivery not filled in yet. To learn the outcome, read GET api/2.0/settings/webhooks/log with eventId set to the returned identifier until delivery appears. The original record stays as it is, and every call queues one more attempt, so this is not safe to repeat blindly. A DocSpaceAdmin may retry any delivery in the portal, anyone else only deliveries of the subscriptions they created, and a Guest is refused. An id of 0 is rejected as an invalid request and an unknown one gives 404. The operation is rate limited, so a burst of calls is answered with 429; to retry several records use PUT api/2.0/settings/webhook/retry.

Parameters​

NameInTypeDescriptionNotes
idpathInteger (int32)The identifier of the object the operation acts on, as the listing operation of that kind of object reports it. It has to match the shape the route declares - a GUID where the route is typed as one - since a value of another shape does not match the route at all and is answered as not found.[required] [example: 1]

Responses​

Status codeDescriptionTypeResponse headers
200The newly queued delivery record, with its status and delivery moment not filled in yetWebhooksLogWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The delivery record identifier is 0--
403The delivery belongs to another member's subscription, or the caller may not use webhooks--
404No delivery record with this ID exists in the portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksLogWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

retryWebhooks​

WebhooksLogArrayWrapper retryWebhooks(WebhookRetryRequestsDto)

PUT /api/2.0/settings/webhook/retry

Retry webhook deliveries

Sends a batch of past webhook deliveries again. ids holds the identifiers of delivery records from GET api/2.0/settings/webhooks/log; each of them is sent once more to the subscription it belongs to as a fresh delivery record, queued for asynchronous delivery, and the response lists those new records with status and delivery not filled in yet. Records that do not exist, and records of another member's subscription when the caller is not a DocSpaceAdmin, are skipped in silence instead of failing the call, so a response shorter than ids is the only sign that something was left out: compare the counts rather than assuming everything was queued. An empty ids list is accepted and queues nothing. Read the outcomes from GET api/2.0/settings/webhooks/log, matching the returned identifiers with eventId. Every call queues another round of attempts, and the original records stay as they are. A Guest is refused. The operation is rate limited, so a burst of calls is answered with 429. For a single record PUT api/2.0/settings/webhook/{id}/retry reports a missing or forbidden record instead of skipping it.

Parameters​

NameInTypeDescriptionNotes
WebhookRetryRequestsDtobodyWebhookRetryRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The newly queued delivery records, one for every identifier that could be retriedWebhooksLogArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403The caller is a Guest, or a non-admin caller while the developer tools are restricted--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksLogArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

updateWebhook​

WebhooksConfigWrapper updateWebhook(UpdateWebhooksConfigRequestsDto)

PUT /api/2.0/settings/webhook

Update a webhook

Replaces the stored parameters of one webhook subscription, which is addressed by id in the body rather than in the path. Every field of the request overwrites the stored one, so a payload that leaves out enabled, ssl, triggers or targetId resets them to off, all events and no target: read the current values with GET api/2.0/settings/webhook first and send back whatever should stay. secretKey is the one exception, an empty value keeping the existing secret and a new one having to satisfy the portal password rules. The new target is validated exactly as on creation, that is it must sit outside the installation's own network and answer a HEAD request, and trigger flags the caller's role may not use are rejected. That validation runs before the subscription is looked up, so an unusable payload is refused with 400 even when no subscription with this id exists. A DocSpaceAdmin may update any subscription in the portal, anyone else only their own, and a Guest is refused. Sending the same payload twice leaves the same state. Use PUT api/2.0/settings/webhook/enable to switch a subscription on or off without touching anything else.

Parameters​

NameInTypeDescriptionNotes
UpdateWebhooksConfigRequestsDtobodyUpdateWebhooksConfigRequestsDto[optional]

Responses​

Status codeDescriptionTypeResponse headers
200The updated webhook subscription, without its secret keyWebhooksConfigWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The target URL is unusable or unreachable, or the secret key or a trigger flag was rejected--
403The subscription belongs to another member, or the caller may not use webhooks at all--
404No webhook subscription with this ID exists in the portal--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebhooksConfigWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

SettingsWebpluginsApi​

addWebPluginFromFile​

WebPluginWrapper addWebPluginFromFile(system)

POST /api/2.0/settings/webplugins

Add a web plugin

Installs a web plugin into the current portal from an uploaded package, and switches the plugin on straight away. The package is sent as multipart/form-data with exactly one file: a .zip archive holding a config.json manifest and a plugin.js entry point, under the configured size cap of 5 MB by default. Editing the portal settings is required, so a portal owner or administrator, and the installation has to have web plugins and plugin uploading enabled in its configuration. Pass system=true to install the plugin for every portal of the installation, which is accepted on standalone installations only. The call is mutating and not idempotent: a package whose manifest name is already installed replaces the stored files and keeps the settings saved for that name, and the domains the manifest declares are added to the portal Content Security Policy. It returns the freshly installed plugin, enabled, with the url its script is served from. A portal holds up to 100 plugins by default, the manifest name has to be lower-case letters, digits, _, . or -, and the package is rejected when another installed plugin registers the same JavaScript object under a different name. List what is installed with GET api/2.0/settings/webplugins.

Parameters​

NameInTypeDescriptionNotes
systemqueryBooleanWhether the plugin is installed for every portal of the installation rather than only this one. It is accepted on a self-hosted installation alone and refused with 403 elsewhere; an installation-wide plugin also hides a portal plugin that carries the same name.[optional] [example: false]

Responses​

Status codeDescriptionTypeResponse headers
200The installed web plugin, enabled, with the url its script is served fromWebPluginWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
400The uploaded package is missing, of the wrong type, too large, or its manifest is rejected--
403Web plugins or plugin uploads are switched off for the installation, or system was requested outside a standalone installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebPluginWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

deleteWebPlugin​

deleteWebPlugin(name)

DELETE /api/2.0/settings/webplugins/{name}

Delete a web plugin

Removes a web plugin from the current portal and deletes the files of its package from storage. The name is the manifest name published by GET api/2.0/settings/webplugins, matched without regard to case. Editing the portal settings is required, so a portal owner or administrator, and the installation has to have web plugins and plugin deletion enabled in its configuration. An installation-wide plugin, the one whose system field is true, can be removed on standalone installations only. The call is destructive and cannot be undone: the state and the settings stored for the plugin are dropped along with its files, the domains its manifest declares are taken out of the portal Content Security Policy, and the connected clients are notified. Getting the plugin back means uploading its package again with POST api/2.0/settings/webplugins, and the settings it had are gone. Nothing is returned on success, and a repeated call on a name that is no longer installed is rejected as not found instead of answered as success. To keep a plugin installed but inactive, switch it off with PUT api/2.0/settings/webplugins/{name} instead.

Parameters​

NameInTypeDescriptionNotes
namepathStringThe plugin to act on, by the manifest name GET api/2.0/settings/webplugins publishes as name, matched without regard to case. It is neither the localized display name nor the JavaScript object name in pluginName; a name that is not installed answers 404.[required] [example: example-plugin]

Responses​

Status codeDescriptionTypeResponse headers
200The web plugin and the files of its package are removed from the portal-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Web plugins or plugin deletion are switched off, the caller may not edit the portal settings, or the plugin is installation-wide outside a standalone installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebPlugin​

WebPluginWrapper getWebPlugin(name)

GET /api/2.0/settings/webplugins/{name}

Get a web plugin by name

Returns one web plugin of the current portal by its manifest name, looked up over the same set as GET api/2.0/settings/webplugins: the installation-wide plugins plus the portal's own. The name is the manifest name published in the name field of that list, matched without regard to case; it is neither the localized display name nor the JavaScript object name in pluginName, so it cannot be taken from the title shown in the interface. Any authenticated portal member may call it, no settings permission needed, and the installation has to have web plugins enabled in its configuration. The call is read-only and idempotent. The response carries the manifest data along with the state the portal stored for that plugin: enabled, the settings string, system, and the url and cssUrl a client loads it from. A name that is not installed is rejected as not found, and 403 means web plugins are switched off for the installation. Change the state of the plugin with PUT api/2.0/settings/webplugins/{name}.

Parameters​

NameInTypeDescriptionNotes
namepathStringThe plugin to act on, by the manifest name GET api/2.0/settings/webplugins publishes as name, matched without regard to case. It is neither the localized display name nor the JavaScript object name in pluginName; a name that is not installed answers 404.[required] [example: example-plugin]

Responses​

Status codeDescriptionTypeResponse headers
200The requested web plugin with the state the portal stored for itWebPluginWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Web plugins are switched off for the installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebPluginWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

getWebPlugins​

WebPluginArrayWrapper getWebPlugins(enabled)

GET /api/2.0/settings/webplugins

Get web plugins

Lists the web plugins available in the current portal: the plugins installed for the whole installation first, then the portal's own, with a portal plugin dropped when an installation-wide plugin already uses its name. Any authenticated portal member may call it, no settings permission needed, and the installation has to have web plugins enabled in its configuration. The call is read-only and idempotent. Pass enabled=true or enabled=false to keep only the plugins in that state, and leave the parameter out to get every plugin. Each entry carries the manifest data together with the state the portal stored for that plugin: enabled, the settings string, system for an installation-wide plugin, and the url and cssUrl a client loads the plugin from. An empty list means nothing is installed for this portal, not that plugins are switched off, which is refused with 403 instead. The list is capped at the configured maximum, 100 plugins by default, and is not paginated. For one plugin by its manifest name use GET api/2.0/settings/webplugins/{name}.

Parameters​

NameInTypeDescriptionNotes
enabledqueryBooleanWhich plugins are kept: true the ones switched on, false the ones switched off. Omitting it lists every installed plugin whatever its state.[optional] [example: true]

Responses​

Status codeDescriptionTypeResponse headers
200The web plugins available in the portal, the installation-wide ones firstWebPluginArrayWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Web plugins are switched off for the installation--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

WebPluginArrayWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

updateWebPlugin​

updateWebPlugin(name, WebPluginRequests)

PUT /api/2.0/settings/webplugins/{name}

Update a web plugin

Switches a web plugin of the current portal on or off and stores the settings string the portal keeps for it. The plugin has to be installed already, so upload its package with POST api/2.0/settings/webplugins first, and name is its manifest name as published by GET api/2.0/settings/webplugins, matched without regard to case. Editing the portal settings is required, so a portal owner or administrator, and the installation has to have web plugins enabled in its configuration. The body replaces the stored state instead of merging into it, which makes the call idempotent; settings is required, so send {} when there is nothing to keep, and it is limited to 255 characters and stored encrypted for this portal alone. Switching the plugin on adds the domains its manifest declares to the portal Content Security Policy and switching it off takes them away again, and the connected clients are notified of the new state. Nothing is returned on success. A name that is not installed is rejected as not found, and 403 means web plugins are switched off or the caller may not edit the portal settings.

Parameters​

NameInTypeDescriptionNotes
namepathStringThe plugin to change, by the manifest name GET api/2.0/settings/webplugins publishes as name, matched without regard to case. It is neither the localized display name nor the JavaScript object name in pluginName, so it cannot be read off the interface; a name that is not installed answers 404.[required] [example: example-plugin]
WebPluginRequestsbodyWebPluginRequestsThe whole state the plugin is to have afterwards. It replaces what was stored instead of merging into it, so both the enabled flag and the settings have to be sent every time.[required]

Responses​

Status codeDescriptionTypeResponse headers
200The state and the settings of the web plugin are saved for the portal-X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
403Web plugins are switched off for the installation, or the caller may not edit the portal settings--
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

null (empty response body)

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: application/json
  • Accept: application/json

ThirdPartyApi​

getThirdPartyCode​

StringWrapper getThirdPartyCode(provider)

GET /api/2.0/thirdparty/{provider}

Get provider consent URL

Builds and returns, as a string, the OAuth 2.0 consent URL of one external provider - the address a client opens in a browser so that the user can grant this portal access to their account. The provider's client id, secret and redirect URI have to be saved for the portal first with POST api/2.0/settings/authservice; without them the URL has no client_id and the provider refuses it. Any signed-in portal user may call it, and the call is read-only and safe to repeat. The URL carries response_type=code, the portal's client_id, the provider's redirect_uri, the scope the portal needs (Drive with offline access for Google, signature for DocuSign) and a state pointing back at this portal's thirdparty/{provider}/code page, where the code arrives in the URL fragment as #code=..., or #error/... when the user declines. Only Google 1, Dropbox 2, Docusign 3, Box 4, OneDrive 5, Wordpress 10 and Github 13 produce a URL; any other value is answered with 200 and no URL instead of an error. With desktop=true, the whole query string is copied into state and comes back on the callback. The code is not exchanged here: pass it on as token to POST api/2.0/files/thirdparty to connect the account.

Parameters​

NameInTypeDescriptionNotes
providerpathLoginProviderThe provider whose consent screen is wanted. Only Google, Dropbox, Docusign, Box, OneDrive, Wordpress and Github produce a URL; any other provider is answered with 200 and no URL rather than an error. The provider credentials have to be saved with POST api/2.0/settings/authservice first, or the URL comes back without a client identifier and the provider refuses it.[required] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

Responses​

Status codeDescriptionTypeResponse headers
200The consent URL of the provider, ready to be opened in a browser; empty when the requested provider is not one of the seven this operation supportsStringWrapperX-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
401UnauthorizedErrorApiResponse-
429Too Many Requests.ErrorApiResponseRetry-After
500Internal Server Error.ErrorApiResponse-
400Bad Request.ErrorApiResponse-
502Bad Gateway. Returned by the reverse proxy, response body may be HTML and not JSON.--
503Service Unavailable. Returned by the reverse proxy, response body may be HTML and not JSON.--

Return type​

StringWrapper

Authorization​

Basic, OAuth2 (scopes: read, write), ApiKeyBearer, asc_auth_key, Bearer, OpenId

HTTP request headers​

  • Content-Type: Not defined
  • Accept: application/json

Models​

Model ActionType​

Possible values:

  • 0 — None (None)
  • 1 — Create (Create)
  • 2 — Update (Update)
  • 3 — Delete (Delete)
  • 4 — Link (Link)
  • 5 — Unlink (Unlink)
  • 6 — Attach (Attach)
  • 7 — Detach (Detach)
  • 8 — Send (Send)
  • 9 — Import (Import)
  • 10 — Export (Export)
  • 11 — Update access (UpdateAccess)
  • 12 — Download (Download)
  • 13 — Upload (Upload)
  • 14 — Copy (Copy)
  • 15 — Move (Move)
  • 16 — Reassigns (Reassigns)
  • 17 — Follow (Follow)
  • 18 — Unfollow (Unfollow)
  • 19 — Logout (Logout)

Model ActiveConnectionsDto​

The connections the calling user currently has open, and which of them the request itself was made with.

NameTypeDescriptionNotes
loginEventInteger (int32)The id of the item in items that the current request is authenticated by. It is 0 when the request carried a token in the Authorization header instead of the portal cookie, and in that case none of the items is the current connection.[required] [example: 1]
itemsListOne item per sign-in of the caller that is still active, ordered newest sign-in first, with the connection the request itself uses moved to the front. Sign-ins older than a year are left out, and a caller with no stored connection gets a single item describing the current request rather than an empty list.[optional] [example: [{id=1234, ip=192.0.2.1}]] [nullable]

Model ActiveConnectionsItemDto​

One open connection of a user: where the sign-in behind it came from, and the ID it can be closed by.

NameTypeDescriptionNotes
idInteger (int32)The ID of the sign-in this connection was opened by. Pass it as loginEventId to PUT api/2.0/security/activeconnections/logout/{loginEventId} to end this one connection; the item whose value equals loginEvent is the connection the current request uses.[required] [example: 1]
tenantIdInteger (int32)The portal the sign-in was made on. The operation never crosses portals, so it is the current one on every item.[required] [example: 1]
userIdUUID (uuid)The user the connection belongs to, which is the calling user on every item - the operation cannot report anyone else's connections.[required] [example: 00000000-0000-0000-0000-000000000000]
mobileBooleanWhether the sign-in came from a mobile client. No mobile marker is stored with a connection, so the value is false on every item and tells a caller nothing about the device.[optional] [example: true]
ipStringThe IP address the sign-in came from, with the port stripped off. On the item that matches loginEvent it is taken from the address the current request arrives from instead of the one stored at sign-in.[optional] [example: 192.0.2.1] [nullable]
countryStringThe English name of the country the IP address is located in. It is empty when the address cannot be located, which is the normal outcome for private and loopback addresses.[optional] [example: United States] [nullable]
cityStringThe city the IP address is located in, empty under the same conditions as country.[optional] [example: New York] [nullable]
browserStringThe browser and its version as parsed from the user agent of the sign-in, empty when the client sent no recognisable one. It is refreshed from the current request on the item that matches loginEvent.[optional] [example: Chrome 120.0] [nullable]
platformStringThe operating system as parsed from the user agent of the sign-in, refreshed and left empty under the same conditions as browser.[optional] [example: Windows] [nullable]
dateApiDateTimeWhen the sign-in happened, in the portal time zone rather than in UTC.[optional]
pageStringWhere in the portal the sign-in was made from: the referrer of the request that created it, or that request's own path when it carried no referrer. Long values are cut off at 512 characters.[optional] [example: /rooms/shared] [nullable]

Model ActiveConnectionsWrapper​

The successful API response containing the ActiveConnectionsDto object.

NameTypeDescriptionNotes
responseActiveConnectionsDtoThe ActiveConnectionsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ActiveServiceArrayWrapper​

The successful API response containing the list of ActiveServiceDto objects.

NameTypeDescriptionNotes
responseListThe list of ActiveServiceDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ActiveServiceDto​

One wallet service the portal is running right now, with the allowance it grants where that is counted.

NameTypeDescriptionNotes
serviceStringThe stable key of the service, which is what POST api/2.0/portal/payment/servicestate takes to switch it off again.[optional] [example: disk-storage] [nullable]
serviceUnitStringWhat limit and used count, in the portal language - gigabytes, editor seats, credits.[optional] [example: GB] [nullable]
subscriptionBooleanWhether the service is billed as a standing subscription rather than per unit consumed. Only a subscription can carry limit and used.[optional] [example: true]
titleStringThe service name in the portal language, for printing rather than matching.[optional] [example: Additional disk storage] [nullable]
limitInteger (int32)How much of the service the portal is entitled to. It is empty for a service whose consumption is not counted this way, which is not the same as a service without a limit.[optional] [example: 500] [nullable]
usedInteger (int32)How much of that allowance is in use - the editors currently active for the cloud editors, the units already consumed for disk storage. Empty under the same conditions as limit.[optional] [example: 320] [nullable]

Model AdditionalWhiteLabelSettings​

The additional white label settings.

NameTypeDescriptionNotes
startDocsEnabledBooleanSpecifies if the sample documents are displayed or hidden.[optional] [example: true]
helpCenterEnabledBooleanSpecifies if the Help Center link is available or not.[optional] [example: true]
feedbackAndSupportEnabledBooleanSpecifies if the Feedback & Support link is available or not.[optional] [example: true]
userForumEnabledBooleanSpecifies if the user forum is available or not.[optional] [example: true]
videoGuidesEnabledBooleanSpecifies if the Video Guides link is available or not.[optional] [example: true]
licenseAgreementsEnabledBooleanSpecifies if the License Agreements link is available or not.[optional] [example: true]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model AdditionalWhiteLabelSettingsDto​

Which of the ONLYOFFICE help and community entries the interface may offer, installation-wide.

NameTypeDescriptionNotes
startDocsEnabledBooleanWhether the sample documents that ONLYOFFICE ships may be placed in a new user's Documents. Unlike the link flags below it depends on nothing that has to be configured, so its built-in value is always true.[required] [example: true]
helpCenterEnabledBooleanWhether the interface may offer the Help Center entry. It is false both when the entry was switched off for the installation and when the installation configures no Help Center address at all; the addresses themselves are not part of this answer and arrive in externalResources of GET api/2.0/settings.[required] [example: true]
feedbackAndSupportEnabledBooleanWhether the interface may offer the Feedback and Support entry, false for the same two reasons as helpCenterEnabled.[required] [example: true]
userForumEnabledBooleanWhether the interface may offer the user forum entry, false for the same two reasons as helpCenterEnabled.[required] [example: true]
videoGuidesEnabledBooleanWhether the interface may offer the Video Guides entry, false for the same two reasons as helpCenterEnabled.[required] [example: true]
licenseAgreementsEnabledBooleanWhether the interface may offer the License Agreements entry, false for the same two reasons as helpCenterEnabled.[required] [example: true]
isDefaultBooleanWhether all six flags still hold the values the installation starts out with. It turns false as soon as one of them is saved differently and true again after DELETE api/2.0/settings/rebranding/additional. Because a link flag starts out off when no address is configured for it, true does not mean every entry is on.[required] [example: false]

Model AdditionalWhiteLabelSettingsDtoWrapper​

The successful API response containing the AdditionalWhiteLabelSettingsDto object.

NameTypeDescriptionNotes
responseAdditionalWhiteLabelSettingsDtoThe AdditionalWhiteLabelSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AdditionalWhiteLabelSettingsResponseWrapper​

The successful API response containing the AdditionalWhiteLabelSettings object.

NameTypeDescriptionNotes
responseAdditionalWhiteLabelSettingsThe AdditionalWhiteLabelSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AdditionalWhiteLabelSettingsWrapper​

The additional white label settings wrapper.

NameTypeDescriptionNotes
settingsAdditionalWhiteLabelSettingsThe additional white label settings.[optional]

Model AdminMessageBaseSettingsRequestsDto​

Who is invited to join the portal, and in which language the invitation is written.

NameTypeDescriptionNotes
emailString (email)The address the join link is sent to. It has to be a well-formed ASCII address rather than an internationalized one, must not already belong to a member of the portal, and, where the portal trusts named domains only, has to end with one of them; any of these faults is refused with 400.[required] [example: admin@example.com] [minLength: 0] [maxLength: 255] [nullable]
cultureStringThe language the letter is written in, as a culture name such as en-US. A culture the installation does not have falls back to the portal language rather than failing the call.[optional] [example: en-US] [nullable]

Model AdminMessageSettingsRequestsDto​

The message sent to the portal administrators, with the CAPTCHA proof that a person wrote it.

NameTypeDescriptionNotes
messageStringWhat the sender wants to tell the portal administrators. Markup is stripped before the letter is written, so a body that carries nothing but markup counts as empty and is refused with 400.[required] [example: Hello, this is a test message from the administrator.] [minLength: 0] [maxLength: 255] [nullable]
emailString (email)The address the sender can be answered at, which the letter is signed with. It has to be a well-formed email address.[required] [example: user@example.com] [minLength: 0] [maxLength: 255] [nullable]
cultureStringThe language the letter is written in, as a culture name such as en-US. A culture the installation does not have falls back to the portal language rather than failing the call.[optional] [example: en-US] [nullable]
recaptchaTypeRecaptchaTypeWhich CAPTCHA service the proof in recaptchaResponse came from. It has to match the service the installation is configured with, which GET api/2.0/capabilities reports; the default value means the installation is left to decide.[optional] [enum: 0, 1, 2, 3]
recaptchaResponseStringThe token the CAPTCHA widget produced in the browser, passed on unchanged for the portal to verify with the CAPTCHA service. It is single-use and short-lived, so it cannot be reused for a second message.[optional] [example: 03AGdBq24PBCbwiDRaS...] [nullable]

Model AiChatPriceDto​

What a chat model charges, split by the direction the tokens flow in.

NameTypeDescriptionNotes
promptDouble (double)The cost of one million tokens sent to the model, which includes the conversation history resent with every turn and not just the newest message.[optional] [example: 5.0]
completionDouble (double)The cost of one million tokens the model writes back. It is normally the dearer of the two directions.[optional] [example: 15.0]
promptCacheReadDouble (double)The cost of one million prompt tokens served from the prompt cache. It is absent when the model does not support prompt caching.[optional] [example: 0.2] [nullable]
promptCacheWriteDouble (double)The cost of one million prompt tokens written to the prompt cache with the default lifetime. It is absent when the model does not support prompt caching.[optional] [example: 2.5] [nullable]
promptCacheWrite1HDouble (double)The cost of one million prompt tokens written to the prompt cache with a one-hour lifetime. It is absent when the model offers no such option.[optional] [example: 4.0] [nullable]

Model AiEmbeddingPriceDto​

What an embedding model charges, which has one direction only.

NameTypeDescriptionNotes
promptDouble (double)The cost of one million tokens turned into vectors. Embedding produces no completion, so this single figure is the whole price.[optional] [example: 0.13]

Model AiEntryPricingDtoAiChatPriceDto​

One AI model or service on the price list: how to name it, who provides it, and what it costs.

NameTypeDescriptionNotes
idStringThe model identifier to send to the AI operations. It is the value to branch on, while alias is for display only.[required] [example: gpt-4o] [nullable]
aliasStringThe model name as the vendor writes it, meant to be shown to a person rather than matched on.[required] [example: GPT-4o] [nullable]
providerStringWho runs the model. Two entries can share a provider, and one provider's models can be priced quite differently, so the price always belongs to the entry and never to the provider.[required] [example: openai] [nullable]
imageStringThe absolute URL of the provider's icon, for rendering next to the entry.[required] [example: https://cdn.example.com/providers/openai.png] [nullable]
priceAiChatPriceDtoWhat the entry costs, in the currency the answer names. Amounts per token are normalised per million tokens, so they are not the price of a single call.[required]
linkStringThe provider's own page for the model, for a person to read the model's terms. It is empty when the provider publishes none.[required] [example: https://openai.com/pricing] [nullable]

Model AiEntryPricingDtoAiEmbeddingPriceDto​

One AI model or service on the price list: how to name it, who provides it, and what it costs.

NameTypeDescriptionNotes
idStringThe model identifier to send to the AI operations. It is the value to branch on, while alias is for display only.[required] [example: gpt-4o] [nullable]
aliasStringThe model name as the vendor writes it, meant to be shown to a person rather than matched on.[required] [example: GPT-4o] [nullable]
providerStringWho runs the model. Two entries can share a provider, and one provider's models can be priced quite differently, so the price always belongs to the entry and never to the provider.[required] [example: openai] [nullable]
imageStringThe absolute URL of the provider's icon, for rendering next to the entry.[required] [example: https://cdn.example.com/providers/openai.png] [nullable]
priceAiEmbeddingPriceDtoWhat the entry costs, in the currency the answer names. Amounts per token are normalised per million tokens, so they are not the price of a single call.[required]
linkStringThe provider's own page for the model, for a person to read the model's terms. It is empty when the provider publishes none.[required] [example: https://openai.com/pricing] [nullable]

Model AiEntryPricingDtoAiImagePriceDto​

One AI model or service on the price list: how to name it, who provides it, and what it costs.

NameTypeDescriptionNotes
idStringThe model identifier to send to the AI operations. It is the value to branch on, while alias is for display only.[required] [example: gpt-4o] [nullable]
aliasStringThe model name as the vendor writes it, meant to be shown to a person rather than matched on.[required] [example: GPT-4o] [nullable]
providerStringWho runs the model. Two entries can share a provider, and one provider's models can be priced quite differently, so the price always belongs to the entry and never to the provider.[required] [example: openai] [nullable]
imageStringThe absolute URL of the provider's icon, for rendering next to the entry.[required] [example: https://cdn.example.com/providers/openai.png] [nullable]
priceAiImagePriceDtoWhat the entry costs, in the currency the answer names. Amounts per token are normalised per million tokens, so they are not the price of a single call.[required]
linkStringThe provider's own page for the model, for a person to read the model's terms. It is empty when the provider publishes none.[required] [example: https://openai.com/pricing] [nullable]

Model AiEntryPricingDtoDecimal​

One AI model or service on the price list: how to name it, who provides it, and what it costs.

NameTypeDescriptionNotes
idStringThe model identifier to send to the AI operations. It is the value to branch on, while alias is for display only.[required] [example: gpt-4o] [nullable]
aliasStringThe model name as the vendor writes it, meant to be shown to a person rather than matched on.[required] [example: GPT-4o] [nullable]
providerStringWho runs the model. Two entries can share a provider, and one provider's models can be priced quite differently, so the price always belongs to the entry and never to the provider.[required] [example: openai] [nullable]
imageStringThe absolute URL of the provider's icon, for rendering next to the entry.[required] [example: https://cdn.example.com/providers/openai.png] [nullable]
priceDouble (double)What the entry costs, in the currency the answer names. Amounts per token are normalised per million tokens, so they are not the price of a single call.[required] [example: {prompt=5.0, completion=15.0}]
linkStringThe provider's own page for the model, for a person to read the model's terms. It is empty when the provider publishes none.[required] [example: https://openai.com/pricing] [nullable]

Model AiImagePriceDto​

What an image model charges: the tokens of the request and the images that come out of it.

NameTypeDescriptionNotes
promptDouble (double)The cost of one million tokens sent to the image model, which is the prompt describing the picture.[optional] [example: 8.0]
completionDouble (double)The cost of one million tokens the image model writes back alongside the picture.[optional] [example: 15.0]
imageDouble (double)The cost of one produced image, charged on top of the token amounts above.[optional] [example: 30.0]

Model AiPricesDto​

What the AI features cost out of the portal wallet, grouped by the kind of model, in one currency.

NameTypeDescriptionNotes
chatListThe chat models on offer, each priced per million prompt and completion tokens. A model listed here is one the installation can bill for, not necessarily one this portal may use - GET api/2.0/portal/payment/ai-model/restrictions says which are allowed.[required] [example: [{id=gpt-4o, alias=GPT-4o, provider=openai, image=https://cdn.example.com/providers/openai.png, price={prompt=5.0, completion=15.0}}]] [nullable]
embeddingListThe embedding models on offer, priced per million tokens of input; an embedding model has no completion side, so its price object carries prompt alone.[required] [example: [{id=text-embedding-3-large, alias=Text Embedding 3 Large, provider=openai, image=https://cdn.example.com/providers/openai.png, price={prompt=0.13}}]] [nullable]
imageListThe image models on offer, priced per million prompt and completion tokens plus a price for each image produced.[required] [example: [{id=gpt-5.4-image-2, alias=GPT 5.4 Image 2, provider=OpenRouter, image=https://cdn.example.com/providers/openai.png, price={prompt=8.0, completion=15.0, image=30.0}}]] [nullable]
webSearchListThe web search providers on offer. Their price is a bare number - the cost of one search - rather than an object, because there are no tokens to distinguish.[required] [example: [{id=web-search, alias=Web Search, provider=tavily, image=https://cdn.example.com/providers/tavily.png, price=0.01}]] [nullable]
currencyCurrencyInfoThe currency every price above is expressed in, with its ISO code and symbol. One answer never mixes currencies, so this is the only place to read it.[required]

Model AiPricesWrapper​

The successful API response containing the AiPricesDto object.

NameTypeDescriptionNotes
responseAiPricesDtoThe AiPricesDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AmazonS3RegionArrayWrapper​

The successful API response containing the list of AmazonS3RegionDto objects.

NameTypeDescriptionNotes
responseListThe list of AmazonS3RegionDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AmazonS3RegionDto​

An Amazon S3 region.

NameTypeDescriptionNotes
systemNameStringThe region code to send as the region value when configuring an Amazon S3 storage or backup target. It is the one field of this object that is an argument elsewhere; a code the server does not list here cannot be reached, so pick one from this list rather than typing it.[optional] [example: eu-west-1] [nullable]
displayNameStringThe region name as Amazon writes it, in English regardless of the portal language, for showing in a picker next to systemName.[optional] [example: Europe (Ireland)] [nullable]
partitionNameStringThe Amazon partition the region sits in - the ordinary commercial cloud, the Chinese one, or a government one. Regions of different partitions are not reachable with the same credentials.[optional] [example: aws] [nullable]
partitionDnsSuffixStringThe domain the partition's service host names end in, which differs from partition to partition.[optional] [example: amazonaws.com] [nullable]
partitionRegionRegexStringThe pattern every region code of this partition matches, for validating a code before sending it.[optional] [example: ^(us|eu|ap|sa|ca|me|af|il|mx)\-\w+\-\d+$] [nullable]
hostnameTemplateStringHow a service host name of the partition is assembled, with {service}, {region} and {dnsSuffix} to be filled in. It is reference material - the portal builds its own endpoints from systemName.[optional] [example: {service}.{region}.{dnsSuffix}] [nullable]

Model ApiDateTime​

The API date and time parameters.

NameTypeDescriptionNotes
utcTimeDate (date-time)The time in UTC format.[optional] [example: 2018-01-01T00:00:00.0000000Z]
timeZoneOffsetString (date-span)The time zone offset.[optional] [example: 00:00:00]

Model AppArrayWrapper​

The successful API response containing the list of AppDto objects.

NameTypeDescriptionNotes
responseListThe list of AppDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AppDto​

One feature module of the portal: whether it is switched on here, and the settings stored for it.

NameTypeDescriptionNotes
idStringThe application's stable key, declared in the installation configuration - ai-rooms, docs-cloud and the like. It is what every other operation of this group addresses an application by, and a client maps it to a title and an icon of its own; the portal ships no display name for it.[optional] [example: ai-rooms] [nullable]
enabledBooleanWhether the application is switched on for this portal. It is the portal's own flag where one has been saved, and the default the installation configuration gives the application otherwise.[optional] [example: true]
settingsAppDto_settings[optional]

Model AppDto.settings​

The settings document saved for this portal, stored and returned verbatim - the portal never looks inside it, and only the application knows its shape. It is empty while the portal has saved none, which means the application falls back to its own defaults, and it also survives the application being switched off.

Model AppWrapper​

The successful API response containing the AppDto object.

NameTypeDescriptionNotes
responseAppDtoThe AppDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AuditEventArrayWrapper​

The successful API response containing the list of AuditEventDto objects.

NameTypeDescriptionNotes
responseListThe list of AuditEventDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AuditEventDto​

One entry of the portal audit trail: who changed what, from where, and where it belongs in the product.

NameTypeDescriptionNotes
idInteger (int32)The ID of the recorded entry. Nothing accepts it as an argument - no operation fetches a single audit event - so it serves only to tell two otherwise identical entries apart.[optional] [example: 1]
dateApiDateTimeWhen the action happened, in the portal time zone. The from and to filters are read as UTC instants, so the two do not line up on a portal that is not on UTC.[optional]
userStringThe display name of the user who acted, taken from the account as it stands now rather than as it stood when the entry was written. A localised placeholder stands in when there is no account to read: a portal background job, an anonymous guest, or a user who has since been deleted.[optional] [example: John Doe] [nullable]
userIdUUID (uuid)The ID of the user who acted, which is what the userId filter of this operation matches on. It stays readable after the account is deleted, which is when user falls back to a placeholder.[optional] [example: 00000000-0000-0000-0000-000000000001]
actionStringThe whole event as a readable sentence in the portal language, with the names of the objects involved substituted into it. On the two audit/.../last operations each substituted value is cut to 50 characters; the filtered operations substitute them in full. It is empty when the build has no wording for the action.[optional] [example: User logged in] [nullable]
actionIdMessageActionThe action itself, as the action filter of this operation spells it and as GET api/2.0/security/audit/mappers lists it under messageAction. Use this rather than parsing action, which is prose and changes with the portal language.[optional] [enum: 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5501, 5502, 5503, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 7000, 7001, 7002, 7003, 7004, 7005, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, -1]
ipStringThe IP address the request came from, with the port stripped off. It is empty for an action a portal background job performed, which has no request behind it.[optional] [example: 192.0.2.1] [nullable]
countryStringThe English name of the country the IP address is located in, empty when the address cannot be located - the normal outcome for private and loopback addresses.[optional] [example: United States] [nullable]
cityStringThe city the IP address is located in, empty under the same conditions as country.[optional] [example: New York] [nullable]
browserStringThe browser and its version as parsed from the user agent of the request, empty when the client sent none that could be parsed or when no request was involved.[optional] [example: Chrome 120.0] [nullable]
platformStringThe operating system as parsed from the same user agent, empty under the same conditions as browser.[optional] [example: Windows] [nullable]
pageStringWhere in the portal the action was made from: the referrer of the request, or that request's own path when it carried no referrer. Long values are cut off at 512 characters.[optional] [example: /rooms/shared] [nullable]
actionTypeActionTypeThe kind of change the action stands for, as the actionType filter of this operation spells it. It is derived from actionId, not stored per entry, so it is the same on every entry of one action.[optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
productProductTypeThe product the action belongs to. It cannot be filtered on here; the tree that groups actions by product is GET api/2.0/security/audit/mappers.[optional] [enum: 2, 3, 7, 8]
locationLocationTypeThe location inside that product, as the moduleType filter of this operation spells it. It is also derived from actionId rather than stored per entry.[optional] [enum: 0, 1, 2, 3, 27, 29, 30, 31]
targetListThe objects the action was applied to, as the trail recorded them - a title, an account, an ID - one string each. It is empty for an action that targets nothing, such as a settings change, and the target filter of this operation matches one of these values in full.[optional] [example: [item1, item2]] [nullable]
entriesListThe kinds of object the action applies to, holding at most two entries and none at all for an action that targets nothing. Only the first of them can be filtered on, through entryType.[optional] [example: [File, Folder]] [nullable]
contextStringWhere the action took place, spelled out in the portal language rather than as a code: for a Documents event the room or the root folder it happened in, and for anything else the name of the module. Nothing filters on it.[optional] [example: Security settings updated] [nullable]

Model AuditReportFormat​

Possible values:

  • 0 (Xlsx)
  • 1 (Csv)

Model AuditTrailActionMapperDto​

One audit trail action, with the kind of change it stands for and the kind of object it applies to.

NameTypeDescriptionNotes
messageActionStringThe action name to send as the action filter of GET api/2.0/security/audit/events/filter, and the value that comes back as actionId on an event.[optional] [example: FileCreated] [nullable]
actionTypeStringThe kind of change the action makes, accepted by the actionType filter of the same operation.[optional] [example: Create] [nullable]
entityStringThe kind of object the action applies to, accepted by the entryType filter. It is None for an action that targets no object, such as a settings change, and an action with a second object type reports only the first one here.[optional] [example: File] [nullable]

Model AuditTrailModuleMapperDto​

The audit trail actions of one module.

NameTypeDescriptionNotes
moduleTypeStringThe location inside the product, as the moduleType filter of GET api/2.0/security/audit/events/filter spells it.[optional] [example: Files] [nullable]
actionsListEvery action this module can record. Each action appears under exactly one module, so this tree is where a caller learns which module a given action belongs to.[optional] [nullable]

Model AuditTrailProductMapperArrayWrapper​

The successful API response containing the list of AuditTrailProductMapperDto objects.

NameTypeDescriptionNotes
responseListThe list of AuditTrailProductMapperDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AuditTrailProductMapperDto​

The audit trail actions of one product, grouped by module.

NameTypeDescriptionNotes
productTypeStringThe product this branch of the tree belongs to, as the productType filter of this operation spells it and as GET api/2.0/security/audit/types lists it under productTypes.[optional] [example: Documents] [nullable]
modulesListThe locations inside the product. It is empty when moduleType was passed and this product has no module of that name, which is why a product can come back with nothing under it.[optional] [nullable]

Model AuditTrailTypesDto​

The vocabularies the audit and login-history filters accept, one array of names per dimension of an event.

NameTypeDescriptionNotes
actionsListEvery action name the build can record, spelled as the action filter of GET api/2.0/security/audit/events/filter and GET api/2.0/security/audit/login/filter expects it. It is the whole vocabulary, not the actions this portal has recorded, and only a handful of the names are the sign-in actions the login filter accepts.[optional] [example: [FileCreated]] [nullable]
actionTypesListThe kinds of change an action can stand for, spelled as the actionType filter of GET api/2.0/security/audit/events/filter expects it.[optional] [example: [Create]] [nullable]
productTypesListThe products an action can belong to, spelled as the productType filter of GET api/2.0/security/audit/mappers expects it. The audit trail itself cannot be filtered by product.[optional] [example: [Documents]] [nullable]
moduleTypesListThe locations inside those products, spelled as the moduleType filter of GET api/2.0/security/audit/events/filter and GET api/2.0/security/audit/mappers expects it.[optional] [example: [Files]] [nullable]
entryTypesListThe kinds of object an action can be applied to, spelled as the entryType filter of GET api/2.0/security/audit/events/filter expects it.[optional] [example: [File]] [nullable]

Model AuditTrailTypesWrapper​

The successful API response containing the AuditTrailTypesDto object.

NameTypeDescriptionNotes
responseAuditTrailTypesDtoThe AuditTrailTypesDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AuthKey​

The authorization key parameters.

NameTypeDescriptionNotes
nameStringThe authorization key name.[required] [example: Auth-Key] [nullable]
valueStringThe authorization key value.[required] [example: abc123xyz456] [minLength: 0] [maxLength: 4000] [nullable]
titleStringThe authorization key title.[optional] [example: API key] [nullable]
typeStringThe field type: text, password, select, toggle.[optional] [nullable]
optionsListThe list of options for select type fields.[optional] [nullable]
dependsOnStringThe name of another key this field depends on for visibility.[optional] [nullable]
dependsOnValueStringThe value of ASC.Web.Studio.UserControls.Management.AuthKey.DependsOn key that makes this field visible.[optional] [nullable]

Model AuthRequestsDto​

The credentials a sign-in is attempted with: a portal password, a confirmation key, or a third-party account.

NameTypeDescriptionNotes
userNameStringThe account signing in, given as its email address or its portal user name. It is required for a password sign-in and ignored when the credentials are a confirmation key or a third-party account.[optional] [example: user@example.com] [nullable]
passwordStringThe password in the clear. Send either this or passwordHash, never both; hashing it in the client with the parameters from GET api/2.0/settings?withpassword=true and sending passwordHash instead keeps the plain password off the wire.[optional] [example: SecurePassword123!] [nullable]
passwordHashStringThe password already hashed in the client. It has to be produced with the salt, iteration count and hash size that GET api/2.0/settings?withpassword=true publishes, or the portal cannot recognise it; a value sent here takes the place of password.[optional] [example: 5f4dcc3b5aa765d61d8327deb882cf99] [nullable]
providerStringThe third-party identity provider the account is being signed in through, by its internal key such as google or linkedin. Sending it switches the call to a third-party sign-in, which needs accessToken or serializedProfile and is only allowed on a self-hosted installation or a tariff that includes third-party sign-in.[optional] [example: google] [nullable]
accessTokenStringThe access token the provider named in provider issued for the account, passed on unchanged for the portal to verify with that provider. The portal then matches the address it gets back against its own accounts, so a valid token for an address unknown here is answered as no such user.[optional] [example: ya29.a0AfH6SMBx...] [nullable]
serializedProfileStringThe third-party profile already fetched and serialised by the caller, as an alternative to accessToken for a provider whose profile the client holds. It identifies the account by the address it carries.[optional] [example: {"name":"John Doe","email":"john@example.com"}] [nullable]
codeOAuthStringThe OAuth authorization code obtained from the provider, for a flow that has not been exchanged for an access token yet. It is recorded with the sign-in rather than replacing accessToken.[optional] [example: 4/0AY0e-g7...] [nullable]
sessionBooleanWhether the issued token is tied to the browser session. When it is, the answer carries no expires and the token dies with the session; otherwise it lives for the portal session lifetime.[optional] [example: true]
confirmDataConfirmDataThe confirmation link data, as a third way to identify the account beside a password and a third-party account. Send it when the sign-in comes from a link the portal mailed, in which case userName and the password fields are not read.[optional]
recaptchaTypeRecaptchaTypeWhich CAPTCHA service the proof in recaptchaResponse came from. It has to match the service the installation is configured with, which GET api/2.0/settings publishes together with the site key.[optional] [enum: 0, 1, 2, 3]
recaptchaResponseStringThe token the CAPTCHA widget produced in the browser, passed on unchanged for the portal to verify. It is only demanded once repeated failures have made the portal ask for a challenge, and it is single-use, so a retry needs a freshly solved one.[optional] [example: 03AGdBq25...] [nullable]
cultureStringThe language the sign-in messages and any letter that follows are written in, as a culture name such as en-US. A culture the installation does not have falls back to the portal language.[optional] [example: en-US] [nullable]

Model AuthServiceRequestsArrayWrapper​

The successful API response containing the list of AuthServiceRequestsDto objects.

NameTypeDescriptionNotes
responseListThe list of AuthServiceRequestsDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model AuthServiceRequestsDto​

One third-party authorization or storage provider and the keys the portal connects to it with.

NameTypeDescriptionNotes
nameStringThe provider being configured, by its internal key such as google or box. Take it from the name of GET api/2.0/settings/authservice; it is the only field that selects the provider, and a key this installation does not know is refused the same way a provider that forbids changes is.[optional] [example: google] [nullable]
titleStringThe provider name as it is shown in the interface. It is filled in by the portal when the providers are listed and is ignored when keys are saved.[optional] [example: Google] [nullable]
descriptionStringA sentence about what connecting the provider gives the portal, shown next to it in the interface. It is filled in by the portal and ignored when keys are saved.[optional] [example: Google OAuth authentication] [nullable]
instructionStringThe steps an administrator has to take on the provider side to obtain the keys, shown in the interface. It is filled in by the portal and ignored when keys are saved.[optional] [example: Configure your Google OAuth credentials] [nullable]
canSetBooleanWhether this provider accepts keys through the API at all. A provider whose keys are fixed by the installation reports false, and saving keys for it is refused; the field is reported by the portal and ignored on the way in.[optional] [example: true]
paidBooleanWhether the provider is a paid option. A paid one can only be connected while the portal plan includes third-party storage or the installation is licensed as self-hosted; the field is reported by the portal and ignored on the way in.[optional] [example: false]
propsListThe credentials the portal authenticates to the provider with, as the name and value pairs the provider defines. Send the whole set the provider expects: leaving every value empty disconnects it, and a set that fails the provider validation is cleared rather than stored half-applied. The listing operation reports the values last saved, and a provider that forbids changes reports none at all.[optional] [example: [{name=key, value=value}]] [nullable]

Model AuthWithCodeRequestsDto​

The same credentials as an ordinary sign-in, plus the one-time code that completes it.

NameTypeDescriptionNotes
userNameStringThe account signing in, given as its email address or its portal user name. It is required for a password sign-in and ignored when the credentials are a confirmation key or a third-party account.[optional]
passwordStringThe password in the clear. Send either this or passwordHash, never both; hashing it in the client with the parameters from GET api/2.0/settings?withpassword=true and sending passwordHash instead keeps the plain password off the wire.[optional]
passwordHashStringThe password already hashed in the client. It has to be produced with the salt, iteration count and hash size that GET api/2.0/settings?withpassword=true publishes, or the portal cannot recognise it; a value sent here takes the place of password.[optional]
providerStringThe third-party identity provider the account is being signed in through, by its internal key such as google or linkedin. Sending it switches the call to a third-party sign-in, which needs accessToken or serializedProfile and is only allowed on a self-hosted installation or a tariff that includes third-party sign-in.[optional]
accessTokenStringThe access token the provider named in provider issued for the account, passed on unchanged for the portal to verify with that provider. The portal then matches the address it gets back against its own accounts, so a valid token for an address unknown here is answered as no such user.[optional]
serializedProfileStringThe third-party profile already fetched and serialised by the caller, as an alternative to accessToken for a provider whose profile the client holds. It identifies the account by the address it carries.[optional]
codeOAuthStringThe OAuth authorization code obtained from the provider, for a flow that has not been exchanged for an access token yet. It is recorded with the sign-in rather than replacing accessToken.[optional]
sessionBooleanWhether the issued token is tied to the browser session. When it is, the answer carries no expires and the token dies with the session; otherwise it lives for the portal session lifetime.[optional]
confirmDataConfirmDataThe confirmation link data, as a third way to identify the account beside a password and a third-party account. Send it when the sign-in comes from a link the portal mailed, in which case userName and the password fields are not read.[optional]
recaptchaTypeRecaptchaTypeWhich CAPTCHA service the proof in recaptchaResponse came from. It has to match the service the installation is configured with, which GET api/2.0/settings publishes together with the site key.[optional] [enum: 0, 1, 2, 3]
recaptchaResponseStringThe token the CAPTCHA widget produced in the browser, passed on unchanged for the portal to verify. It is only demanded once repeated failures have made the portal ask for a challenge, and it is single-use, so a retry needs a freshly solved one.[optional]
cultureStringThe language the sign-in messages and any letter that follows are written in, as a culture name such as en-US. A culture the installation does not have falls back to the portal language.[optional]
codeStringThe one-time code from the SMS the portal sent or from the authenticator app, whichever second factor the portal has enabled for this user. It is single-use and expires; a wrong, empty or expired value fails the sign-in and counts against the brute-force limit.[optional] [nullable]

Model AuthenticationTokenDto​

The outcome of a sign-in attempt: either the authentication token, or the second factor still to be passed.

NameTypeDescriptionNotes
tokenStringThe token to put in the Authorization header of later calls. It is empty whenever a second factor is still outstanding, which is what sms or tfa then says; the same token is also set as a portal cookie by the call that issued it, so a browser client does not have to carry it itself.[optional] [example: abcde12345] [nullable]
expiresDate (date-time)When the token stops being accepted. It stays at its zero value when session=true tied the token to the browser session instead of to a fixed moment. On the two operations that only send an SMS it carries a different meaning: there is no token, and this is the moment the code that was just sent expires.[optional] [example: 2024-01-15T10:30:00Z]
smsBooleanWhether an SMS code is the second factor in play. Next to an empty token it means the code has to be sent to POST api/2.0/authentication/{code} before a token is issued; next to a filled token it means the code just accepted was an SMS one.[optional] [example: true]
phoneNoiseStringThe stored phone number with its middle digits masked, filled in only while sms is set and a number is already activated for the user. It is there to be shown to the person signing in, not to be sent back.[optional] [example: +1***1234] [nullable]
tfaBooleanWhether an authenticator app is the second factor in play, with the same two readings as sms.[optional] [example: true]
tfaKeyStringThe secret to enrol in an authenticator app, in the manual-entry form. It is filled in only while tfa is set and the app has not been connected yet, which is the one moment the secret is handed out; once the app is connected it stays empty. GET api/2.0/settings/tfaapp/setup returns the same secret with a QR code.[optional] [example: JBSWY3DPEHPK3PXP] [nullable]
confirmUrlURI (uri)The confirmation link the client has to open to get past the second factor. It points at phone activation while no number is activated, at authenticator-app activation while the app is not connected, and at the plain code prompt once either is in place. It is empty in an answer that already carries a token.[optional] [example: https://example.com/confirm?token=abc123] [nullable]

Model AuthenticationTokenWrapper​

The successful API response containing the AuthenticationTokenDto object.

NameTypeDescriptionNotes
responseAuthenticationTokenDtoThe AuthenticationTokenDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model Balance​

Represents a balance with an account number and a list of sub-accounts.

NameTypeDescriptionNotes
accountNumberInteger (int32)The account number.[optional] [example: 12345]
subAccountNumberInteger (int32)The sub-account number.[optional] [example: 12345]
accountNameStringThe account name.[optional] [example: account name] [nullable]
accountCurrencyStringThe account currency.[optional] [example: "USD"] [nullable]
subAccountsListA list of sub-accounts.[optional] [example: [{currency=USD, amount=1500.75}]] [nullable]
lastCreditTransactionInfoThe most recent credit transaction applied to the account.[optional]

Model BalanceWrapper​

The successful API response containing the Balance object.

NameTypeDescriptionNotes
responseBalanceThe Balance object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model BooleanWrapper​

The successful API response containing the boolean value.

NameTypeDescriptionNotes
responseBooleanThe boolean value returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CapabilitiesDto​

The sign-in methods this portal offers, as a login client needs them before anyone has signed in.

NameTypeDescriptionNotes
ldapEnabledBooleanWhether members may sign in with their directory credentials. It is false both when LDAP sign-in is switched off and when the pricing plan or the installation does not include it, and also when the settings could not be read at all - a false here means the method is not offered, never that it is unknown.[required] [example: false]
ldapDomainStringThe directory domain members authenticate against, to be shown next to the login field. It is empty whenever ldapEnabled is false, and also while the portal has not completed a directory synchronisation.[optional] [example: example.com] [nullable]
providersListThe keys of the external identity providers to offer, ordered for the country the caller's IP address resolves to and reduced to those this installation has credentials for. Pass one of them as provider to POST api/2.0/authentication. An empty list means external sign-in is not on offer.[required] [example: [google, facebook, microsoft]] [nullable]
ssoLabelStringThe caption for the single sign-on button in the portal language, empty whenever ssoUrl is.[required] [example: Enterprise SSO] [nullable]
oauthEnabledBooleanWhether external identity providers may be used on this portal at all. While it is false, providers is empty because the list is not even assembled.[required] [example: true]
ssoUrlURI (uri)The address to send the browser to for SAML single sign-on. It is empty when single sign-on is not on offer, which is the one thing to test - there is no separate flag for it.[required] [example: https://sso.example.com/login] [nullable]
identityServerEnabledBooleanWhether the installation exposes its built-in identity server, which is what the portal's own OAuth applications authenticate against. It concerns third-party applications signing in to the portal, not portal members signing in to an external provider - that is providers.[required] [example: false]

Model CapabilitiesWrapper​

The successful API response containing the CapabilitiesDto object.

NameTypeDescriptionNotes
responseCapabilitiesDtoThe CapabilitiesDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CdnStorageSettings​

The CDN storage settings.

NameTypeDescriptionNotes
moduleStringThe storage name.[optional] [example: LocalStorage] [nullable]
propsMapThe storage properties.[optional] [example: {region=eu-central-1, bucket=tenant-files}]
lastModifiedDate (date-time)The date and time when the storage settings were last modified.[optional] [example: 2025-01-01T12:00:00Z]

Model CdnStorageSettingsWrapper​

The successful API response containing the CdnStorageSettings object.

NameTypeDescriptionNotes
responseCdnStorageSettingsThe CdnStorageSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ChangeWalletServiceStateRequestDto​

Which wallet service is switched, and which way.

NameTypeDescriptionNotes
serviceTenantWalletServiceThe service being switched, given by its catalogue name. Switching it on only makes it available to the portal; its units are still bought with PUT api/2.0/portal/payment/updatewallet.[optional] [enum: -18, -16, -15, -14, -13, -12, -11]
enabledBooleanWhich way the service is switched: true makes it available to the portal, false withdraws it. Setting the state the service already has changes nothing.[optional] [example: true]

Model CompanyWhiteLabelSettings​

The company white label settings.

NameTypeDescriptionNotes
companyNameStringThe company name.[optional] [example: ONLYOFFICE] [minLength: 0] [maxLength: 255] [nullable]
siteURI (uri)The company site.[optional] [example: https://www.onlyoffice.com] [minLength: 0] [maxLength: 255] [nullable]
emailString (email)The company email address.[optional] [example: support@onlyoffice.com] [minLength: 0] [maxLength: 255] [nullable]
addressStringThe company address.[optional] [example: Lubanas st. 125a-25] [minLength: 0] [maxLength: 255] [nullable]
phoneString (tel)The company phone number.[optional] [example: +7 843 2271372] [minLength: 0] [maxLength: 255] [nullable]
IsLicensorBooleanSpecifies if a company is a licensor or not.[optional] [example: true]
hideAboutBooleanSpecifies if the About page is visible or not[optional] [example: false]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model CompanyWhiteLabelSettingsArrayWrapper​

The successful API response containing the list of CompanyWhiteLabelSettings objects.

NameTypeDescriptionNotes
responseListThe list of CompanyWhiteLabelSettings objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CompanyWhiteLabelSettingsDto​

The vendor details the About page and the notification letters print, shared by the whole installation.

NameTypeDescriptionNotes
companyNameStringThe vendor name the About page shows and the letters sign off with. Until details are saved it holds whatever the installation ships as its built-in vendor, and it is empty on an installation that ships none.[required] [example: My Own Corporation] [nullable]
siteStringThe address the vendor name links to, as an absolute URL with its scheme. Empty under the same conditions as companyName.[required] [example: https://www.example.com] [nullable]
emailString (email)The mailbox the About page offers for reaching the vendor. It is not the portal's own support address, and it is empty under the same conditions as companyName.[required] [example: contact@example.com] [nullable]
addressStringThe postal address of the vendor as one free-form line, in the shape it was saved in - no structure is imposed on it.[required] [example: 123 Business St, New York, NY 10001] [nullable]
phoneStringThe telephone number of the vendor in the shape it was saved in, with no dialling format enforced.[required] [example: +1-800-555-0123] [nullable]
isLicensorBooleanWhether these details are those of the licensor of the product itself rather than of a reseller. Saving through POST api/2.0/settings/rebranding/company always clears it, so only details that came with the installation can report true.[required] [example: false]
hideAboutBooleanWhether the About page is hidden from the interface. A plan that does not include branding cannot switch it on: the value is stored as false in that case, so it can come back different from what was saved.[required] [example: false]
isDefaultBooleanWhether every field above still matches the installation's built-in vendor details. It turns false as soon as one of them is saved differently and true again after DELETE api/2.0/settings/rebranding/company.[required] [example: true]

Model CompanyWhiteLabelSettingsDtoWrapper​

The successful API response containing the CompanyWhiteLabelSettingsDto object.

NameTypeDescriptionNotes
responseCompanyWhiteLabelSettingsDtoThe CompanyWhiteLabelSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CompanyWhiteLabelSettingsResponseWrapper​

The successful API response containing the CompanyWhiteLabelSettings object.

NameTypeDescriptionNotes
responseCompanyWhiteLabelSettingsThe CompanyWhiteLabelSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CompanyWhiteLabelSettingsWrapper​

The company white label settings wrapper.

NameTypeDescriptionNotes
settingsCompanyWhiteLabelSettingsThe company white label settings.[optional]

Model ConfirmData​

The confirmation link a sign-in is authorised with, in place of a password.

NameTypeDescriptionNotes
emailString (email)The address the confirmation link was issued for. It has to be the same address the key was signed with, and a value that is not an email address fails the request with 400.[optional] [example: user@example.com] [nullable]
firstBooleanWhether the link is being followed for the first time, taken from the first parameter of the confirmation URL. It is part of what the key was signed over, so passing a different value invalidates the key rather than changing behaviour.[optional] [example: true] [nullable]
keyStringThe key parameter of the confirmation URL, copied verbatim. It is bound to the address and to the moment it was issued, so it stops being accepted once the portal email key lifetime has passed.[optional] [example: abc123def456] [nullable]

Model ConfirmDto​

Whether a confirmation link may still be used, and what it leads to when it invites into a room.

NameTypeDescriptionNotes
resultValidationResultThe outcome of the check. Only Ok means the action behind the link may be carried out: Invalid and Expired fault the key itself, while UserExisted, UserExcluded, TariffLimit and QuotaFailed mean the key is sound but the invitation behind it cannot be accepted as it stands.[required] [enum: 0, 1, 2, 3, 4, 5, 6]
roomIdStringThe room the invitation leads into - a numeric folder ID for a room of the portal, a provider-specific string for a third-party one. It is empty for an invitation to the portal as a whole, for a room that has been removed or that the invited account may not see, and whenever result is neither Ok nor UserExisted.[optional] [example: 1] [nullable]
titleStringThe title of that room, present exactly when roomId is and meant to be shown on the confirmation page.[optional] [example: Conference Room] [nullable]
emailStringThe address the link was issued for, echoed back only when result is Ok so that a sign-up form can be prefilled with it. Every other outcome leaves it empty, UserExisted included.[optional] [example: user@example.com] [nullable]
isAgentBooleanWhether the room behind the link is an AI room rather than an ordinary one, which decides where the invited person is taken. It is false whenever roomId is empty.[optional] [example: true]

Model ConfirmType​

Possible values:

  • EmpInvite — Emp invite
  • LinkInvite — Link invite
  • PortalSuspend — Portal suspend
  • PortalContinue — Portal continue
  • PortalRemove — Portal remove
  • DnsChange — Dns change
  • PortalOwnerChange — Portal owner change
  • Activation — Activation
  • EmailChange — Email change
  • EmailActivation — Email activation
  • PasswordChange — Password change
  • ProfileRemove — Profile remove
  • PhoneActivation — Phone activation
  • PhoneAuth — Phone auth
  • Auth — Auth
  • TfaActivation — Tfa activation
  • TfaAuth — Tfa auth
  • Wizard — Wizard
  • GuestShareLink — Guest share link

Model ConfirmWrapper​

The successful API response containing the ConfirmDto object.

NameTypeDescriptionNotes
responseConfirmDtoThe ConfirmDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ConnectionTestResult​

The outcome of a connection test against an external database.

NameTypeDescriptionNotes
successBooleanSpecifies whether the connection to the database succeeded.[optional]
errorStringThe reason the connection failed, or null when it succeeded.[optional] [nullable]

Model ConnectionTestResultWrapper​

The successful API response containing the ConnectionTestResult object.

NameTypeDescriptionNotes
responseConnectionTestResultThe ConnectionTestResult object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CookieSettingsDto​

How long an authentication session of the portal stays valid, and whether that limit is applied.

NameTypeDescriptionNotes
lifeTimeInteger (int32)How long, in minutes, a session issued from now on remains valid. It is 1440 on a portal that has never stored a limit, and that stored number is reported whether or not enabled puts it to use.[required] [example: 1440]
enabledBooleanWhether the stored lifetime is applied at all. While it is false the number above is ignored and an issued session is honoured for a year.[required] [example: true]

Model CookieSettingsRequestsDto​

How long an authentication session of the portal stays valid, and whether that limit is applied.

NameTypeDescriptionNotes
lifeTimeInteger (int32)How long, in minutes, a session issued from now on remains valid. A value above 9999 is clamped to 9999 rather than refused, and 0 or less clears the number, which together with enabled leaves sessions that never expire on their own. Any positive value invalidates every session issued before this call, the caller's included, so the client has to keep the fresh cookie the response carries.[optional] [example: 525600]
enabledBooleanWhether the stored lifetime is applied at all. While it is false the number is ignored and an issued session is honoured for a year; while it is true the connections behind expired sessions are dropped as well.[optional] [example: true]

Model CookieSettingsWrapper​

The successful API response containing the CookieSettingsDto object.

NameTypeDescriptionNotes
responseCookieSettingsDtoThe CookieSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CreateWebhooksConfigRequestsDto​

The target a webhook subscription calls, the events it listens for, and the secret it signs with.

NameTypeDescriptionNotes
nameStringThe label the subscription is listed under. It is for the administrator reading the list and is never sent to the target; it does not have to be unique.[required] [example: Production Webhook] [minLength: 0] [maxLength: 50]
uriStringThe address the portal posts the event payload to. It has to be an absolute http or https address outside the installation own network, and it is probed before anything is stored: it must answer a HEAD request with a success code, and a redirect does not count as one.[required] [example: https://example.com/webhook] [minLength: 1]
secretKeyStringThe shared secret the payload signature is computed with, so the receiver can tell a genuine call from a forged one. It has to satisfy the portal password rules published by GET api/2.0/settings/security/password, and it is never echoed back by any operation. On an update an empty value keeps the secret already stored.[optional] [example: my-secret-key-123] [minLength: 0] [maxLength: 50] [nullable]
enabledBooleanWhether the subscription delivers at all. While it is off the matching events are dropped rather than queued, so nothing from that period arrives once it is switched on again.[optional] [example: true]
sslBooleanWhether the target certificate is verified. Setting it demands an https target with a valid certificate; leaving it off delivers without checking the certificate at all.[optional] [example: true]
triggersWebhookTriggerThe events the subscription listens for, as a bitmask combining the flags; 0 subscribes to all of them. Take the flags the caller role is allowed to use from GET api/2.0/settings/webhook/triggers, since a flag beyond that set is refused with 400. A subscription still only fires for events its creator may see.[optional] [enum: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
targetIdStringThe single entity the subscription is narrowed to, by its identifier - a room or a file, for instance. Leaving it out delivers events about every entity the subscribed triggers cover.[optional] [example: 00000000-0000-0000-0000-000000000001] [minLength: 0] [maxLength: 255] [nullable]

Model CspDto​

The Content Security Policy of the portal: the domains an administrator allowed, and the header built from them.

NameTypeDescriptionNotes
domainsListThe external hosts an administrator has allowed, each in the form it was saved in - a bare host, a host with a scheme, or a wildcard such as *.example.com. An empty list means nobody has added one, not that the portal serves no policy.[required] [example: [https://example.com, https://cdn.example.com]] [nullable]
headerStringThe complete policy value the portal sends to browsers, assembled from domains together with the portal's own sources and the integrations it has switched on. It is therefore wider than domains alone, and is filled in even while that list is empty.[required] [example: default-src 'self'; script-src 'self' https://example.com] [nullable]

Model CspRequestsDto​

The external sources the portal Content Security Policy is to trust.

NameTypeDescriptionNotes
domainsListThe domains the policy trusts, as the complete list that is to hold afterwards rather than a list of additions: send the domains already trusted together with the new one to add one, leave one out to withdraw it, and send an empty list to fall back to the portal built-in policy. An entry may be a bare host, a host with a scheme, or a wildcard host such as *.example.com; it has to form a valid absolute address and may contain ASCII characters only. Every entry becomes an allowed source for scripts, styles, images, fonts, frames, media and connections at once - the directives cannot be set apart here.[optional] [example: [example.com, trusted-site.com]] [nullable]

Model CspWrapper​

The successful API response containing the CspDto object.

NameTypeDescriptionNotes
responseCspDtoThe CspDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CultureSpecificExternalResource​

The external resource parameters.

NameTypeDescriptionNotes
domainStringThe external resource domain.[optional] [example: example.com] [nullable]
entriesMapThe external resource entries.[optional] [example: {welcomeMessage=Welcome, logoutButton=Log out}]

Model CultureSpecificExternalResources​

The external resources settings.

NameTypeDescriptionNotes
adminPanelCultureSpecificExternalResourceThe link to the administration panel. It is returned only to the full administrators of a licensed (Enterprise) server (standalone) portal.[optional]
apiCultureSpecificExternalResourceThe link to the product API.[optional]
commonCultureSpecificExternalResourceThe link to the common product information.[optional]
forumCultureSpecificExternalResourceThe link to the forum.[optional]
helpcenterCultureSpecificExternalResourceThe link to the Help Center.[optional]
integrationsCultureSpecificExternalResourceThe link to the product integrations.[optional]
siteCultureSpecificExternalResourceThe link to the product website.[optional]
socialNetworksCultureSpecificExternalResourceThe link to the product social nerworks.[optional]
supportCultureSpecificExternalResourceThe link to the product support.[optional]
videoguidesCultureSpecificExternalResourceThe link to the video guides.[optional]

Model CurrenciesArrayWrapper​

The successful API response containing the list of CurrenciesDto objects.

NameTypeDescriptionNotes
responseListThe list of CurrenciesDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CurrenciesDto​

One currency the portal's subscription prices can be quoted in, with the region it belongs to.

NameTypeDescriptionNotes
isoCountryCodeStringThe two-letter ISO code of the country the currency is that of, which is the region the price list was picked for rather than the country of the caller.[optional] [example: US] [nullable]
isoCurrencySymbolStringThe three-letter ISO 4217 code of the currency. On the first item of the answer it is the currency the amounts from GET api/2.0/portal/payment/prices are expressed in.[optional] [example: USD] [nullable]
currencyNativeNameStringThe currency name in the language of its own region - not in the portal language, and not a symbol.[optional] [example: US Dollar] [nullable]

Model CurrencyAmount​

An amount of money together with its currency.

NameTypeDescriptionNotes
currencyStringThe three-character ISO 4217 currency symbol.[optional]
amountDouble (double)The amount in the specified currency.[optional]

Model CurrencyCode​

The currency an amount is expressed in.

NameTypeDescriptionNotes
currencyStringThe three-character ISO 4217 currency symbol.[optional] [example: "USD"] [nullable]

Model CurrencyInfo​

The currency the AI prices are quoted in.

NameTypeDescriptionNotes
codeStringThe ISO 4217 code of the currency the prices are quoted in.[required] [example: USD] [nullable]
symbolStringThe display symbol of the currency.[required] [example: $] [nullable]

Model CurrentLicenseInfo​

The two facts about the subscription in force that a payment page needs.

NameTypeDescriptionNotes
trialBooleanWhether the portal is on a trial rather than a paid subscription. A trial expires at dueDate and is not extended by paying - a plan has to be bought instead.[required] [example: false]
dueDateDate (date-time)The day the subscription runs out, with the time of day cut off. The largest value a date can hold means it never runs out, which is how a free or unlimited plan is expressed.[required] [example: 2025-06-15T10:30:00.0000000Z]

Model CustomColorThemesSettingsColorItem​

The custom color theme color parameters.

NameTypeDescriptionNotes
accentStringThe accent color.[optional] [example: #4781D1] [nullable]
buttonsStringThe button color.[optional] [example: #5299E0] [nullable]

Model CustomColorThemesSettingsDto​

The colour themes the portal offers, which of them is applied, and how many the plan allows.

NameTypeDescriptionNotes
themesListEvery theme the portal can apply, ordered by ID, with the built-in ones first because they were created first. It is never empty - the built-in themes cannot be deleted - and a custom theme is one whose ID is higher than the built-in ones.[optional] [example: [{id=1, name=Custom Theme}]] [nullable]
selectedInteger (int32)The ID of the theme in themes that is currently applied to the whole portal. Deleting the applied theme moves it to the lowest remaining ID, so it can change without anyone having chosen a new one.[optional] [example: 1]
limitInteger (int32)How many entries themes may hold in total, built-in ones included; 0 means the plan caps nothing. Once the cap is reached PUT api/2.0/settings/colortheme drops a new theme silently instead of failing, so compare this with the length of themes to tell whether a save took effect.[optional] [example: 1]

Model CustomColorThemesSettingsItem​

The custom color theme settings.

NameTypeDescriptionNotes
idInteger (int32)The custom color theme ID.[optional] [example: 1]
nameStringThe custom color theme name.[optional] [example: blue] [nullable]
mainCustomColorThemesSettingsColorItemThe custom color theme main colors.[optional]
textCustomColorThemesSettingsColorItemThe custom color theme text colors.[optional]

Model CustomColorThemesSettingsRequestsDto​

The custom colour theme being saved, the theme being selected, or both.

NameTypeDescriptionNotes
themeCustomColorThemesSettingsItemThe theme to store, with its accent and button colours for the interface and for the text on it. An id that matches a stored custom theme replaces it, an unknown id appends a new one, and an id belonging to a built-in theme is treated as a request for a new custom theme rather than overwriting the built-in one. Once the plan limit on custom themes is reached a new theme is silently not added, so compare the returned themes against limit instead of assuming it was saved. Leave it out to change only the selection.[optional]
selectedInteger (int32)The theme the whole portal switches to, by theme ID. An ID matching no stored theme is ignored rather than refused, and leaving it out keeps the selection as it is.[optional] [example: 1] [nullable]

Model CustomColorThemesSettingsWrapper​

The successful API response containing the CustomColorThemesSettingsDto object.

NameTypeDescriptionNotes
responseCustomColorThemesSettingsDtoThe CustomColorThemesSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CustomerInfoDto​

The billing customer behind the portal, and which portal member pays for it.

NameTypeDescriptionNotes
portalIdStringThe portal's identifier in the billing system, which is what support and invoices refer to. It is not the portal alias.[optional] [example: portal-001] [nullable]
paymentMethodStatusPaymentMethodStatusWhether a payment method is stored for the account and usable. Without one the portal can hold a wallet balance but cannot be charged automatically.[optional] [enum: 0, 1, 2]
paymentMethodTypeStringThe customer's payment method type.[optional] [example: card] [nullable]
isDelayedPaymentMethodBooleanIndicates whether the customer's payment method is delayed, i.e. the money reaches the wallet only after the transfer settles rather than immediately.[optional] [example: false]
emailStringThe address the billing account is registered to, lower-cased. It need not belong to a portal member, which is exactly when payer stays empty.[optional] [example: user@example.com] [nullable]
payerEmployeeDtoThe portal member whose account is behind the billing address. It is empty when email matches no member of this portal, and while it is empty every operation of this group that only the payer may call is out of reach for everybody.[optional]

Model CustomerInfoWrapper​

The successful API response containing the CustomerInfoDto object.

NameTypeDescriptionNotes
responseCustomerInfoDtoThe CustomerInfoDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CustomerMonthlyUsageArrayWrapper​

The successful API response containing the list of CustomerMonthlyUsageDto objects.

NameTypeDescriptionNotes
responseListThe list of CustomerMonthlyUsageDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model CustomerMonthlyUsageDto​

What the portal spent from its wallet in one calendar month, added up across every service.

NameTypeDescriptionNotes
yearInteger (int32)The year the month belongs to. Months are cut in the portal time zone, so a movement at the edge of a month falls where the portal sees it and not where UTC does.[optional] [example: 2025]
monthInteger (int32)The month itself, January being 1. Only months that had spending appear at all, so a gap in the list is a month with nothing in it rather than missing data.[optional] [example: 1]
currencyStringThe currency totalAmount is expressed in, as a three-letter ISO 4217 code - the accounting currency of the wallet.[optional] [example: USD] [nullable]
totalAmountDouble (double)What the month came to across every service, as a positive amount spent rather than a signed balance.[optional] [example: 199.98]
operationCountInteger (int32)How many separate movements that total was added up from, for a client that wants to show the weight behind a figure. The movements themselves are in GET api/2.0/portal/payment/customer/operations.[optional] [example: 3]

Model CustomerMonthlyUsageReportRequestDto​

The period covered by the monthly wallet spending report.

NameTypeDescriptionNotes
startDateDate (date-time)The beginning of the reported period, inclusive. The months are cut in the portal time zone rather than in UTC, so spending at the turn of a month falls where the portal sees it; defaults to the portal creation date.[optional] [example: 2025-01-01T00:00:00Z] [nullable]
endDateDate (date-time)The end of the reported period, inclusive. Cut in the portal time zone in the same way as startDate, and defaults to the moment the call is made.[optional] [example: 2025-12-31T23:59:59Z] [nullable]

Model CustomerOperationsReportRequestDto​

The filters that select which wallet movements are reported: the services, the period, the participant, the direction and the outcome of the movement, and the ordering.

NameTypeDescriptionNotes
serviceNameListThe wallet services whose movements are kept, named the way the billing catalogue names them - backup, ai-tools, ai-search, disk-storage, docscloud. Take the values from the serviceName field of GET api/2.0/portal/payment/walletservices; the match ignores case, a name this installation does not sell fails the call with 404, and an omitted list keeps every service. A bare string is accepted in place of an array for backward compatibility.[optional] [example: [backup]] [nullable]
startDateDate (date-time)The beginning of the reported period, inclusive. Read in the portal time zone rather than in UTC, so a movement at the edge of the period falls where the portal sees it; defaults to the portal creation date.[optional] [example: 2024-01-01T00:00:00Z] [nullable]
endDateDate (date-time)The end of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the moment the call is made.[optional] [example: 2024-01-31T23:59:59Z] [nullable]
participantNameStringThe participant whose movements are kept - the account the accounting service records as the cause of a movement. A movement caused by a portal user carries that user ID here, and one caused by the portal itself carries the customer name; surrounding whitespace is trimmed, and an omitted value keeps every participant.[optional] [example: My Own Corporation] [nullable]
creditBooleanWhether movements that add money to the wallet - top-ups, refunds and corrections in the portal's favour - are kept. Both directions are reported when neither this nor debit is given.[optional] [example: true] [nullable]
debitBooleanWhether movements that take money out of the wallet - the charges of the wallet services - are kept. Both directions are reported when neither this nor credit is given.[optional] [example: false] [nullable]
typeOperationTypeThe kind of movement to keep, which says what caused the money to move rather than how it ended. Every kind is reported when it is omitted.[optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
statusOperationStatusThe outcome to keep. A movement that is still being settled is reported as pending and may change later, while the other outcomes are final; every outcome is reported when this is omitted.[optional] [enum: 0, 1, 2, 3]
orderByStringThe name of the field the movements are sorted by, spelled as the accounting service names it, such as StartDate or ServiceName. Surrounding whitespace is trimmed, and the accounting service applies its own ordering when this is omitted.[optional] [example: StartDate] [nullable]
orderTypeOperationOrderTypeThe direction the field named in orderBy is sorted in. Newest or largest first is what the accounting service does by default, so leaving this out sorts the same way as asking for descending explicitly.[optional] [enum: 0, 1]

Model CustomerServiceUsageDto​

What one wallet service was consumed and cost over the requested period, added up rather than listed.

NameTypeDescriptionNotes
serviceStringThe stable key of the service, which is what the serviceName filter of this operation matches on and what GET api/2.0/portal/payment/walletservice looks a service up by.[optional] [example: disk-storage] [nullable]
titleStringThe service name in the portal language, for printing rather than matching.[optional] [example: Additional disk storage] [nullable]
serviceUnitStringWhat totalQuantity counts, in the portal language. AI consumption is reported in tokens here rather than in the AI credits the service is sold in, so it does not line up with the price list.[optional] [example: GB] [nullable]
currencyStringThe currency totalAmount and price are expressed in, as a three-letter ISO 4217 code.[optional] [example: USD] [nullable]
totalQuantityInteger (int32)How many units of the service were consumed over the period, in the unit named by serviceUnit.[optional] [example: 100]
totalAmountDouble (double)What that consumption cost over the period. It is what was actually charged, so it can differ from price times totalQuantity when the price changed inside the period.[optional] [example: 49.99]
operationCountInteger (int32)How many separate charges the total was added up from. The charges themselves are in GET api/2.0/portal/payment/customer/operations.[optional] [example: 2]
priceDouble (double)What one unit of the service costs today, not what it cost during the period. It is 0 when the service is no longer on the installation's price list.[optional] [example: 0.14]
subscriptionBooleanWhether the service is billed as a standing subscription rather than per unit consumed. It is derived from today's price list, so it describes the service as it is sold now.[optional] [example: true]

Model CustomerServiceUsageReportDto​

One page of the per-service consumption totals, with the paging figures needed to walk the rest.

NameTypeDescriptionNotes
collectionListThe services on this page, one entry per service rather than per charge. It is empty for a period in which nothing was consumed as well as for a page past the end of the report.[optional] [example: [{service=backup, totalAmount=49.99}]] [nullable]
offsetInteger (int32)How many entries were skipped before this page, echoed from the request.[optional] [example: 0]
limitInteger (int32)How many entries one page may hold, echoed from the request; it is 25 unless another value was asked for.[optional] [example: 25]
totalQuantityLong (int64)How many services match the filters in total, across every page - services, not charges.[optional] [example: 1]
totalPageInteger (int32)How many pages those entries come to at the current limit.[optional] [example: 1]
currentPageInteger (int32)Which of those pages this one is, as the billing service numbers them. Page through by advancing offset rather than this value, which nothing accepts as an argument.[optional] [example: 1]

Model CustomerServiceUsageReportRequestDto​

The filters that select which wallet service consumption is reported: the services, the period, the participant, the outcome, the usage metadata and the ordering.

NameTypeDescriptionNotes
serviceNameListThe wallet services whose consumption is reported, named the way the billing catalogue names them - backup, ai-tools, ai-search, disk-storage, docscloud. Take the values from the serviceName field of GET api/2.0/portal/payment/walletservices; the match ignores case, a name this installation does not sell fails the call with 404, and an omitted list reports every service. A bare string is accepted in place of an array for backward compatibility.[optional] [example: [backup]] [nullable]
startDateDate (date-time)The beginning of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the portal creation date.[optional] [example: 2024-01-01T00:00:00Z] [nullable]
endDateDate (date-time)The end of the reported period, inclusive. Read in the portal time zone rather than in UTC, and defaults to the moment the call is made.[optional] [example: 2024-01-31T23:59:59Z] [nullable]
participantNameStringThe participant whose consumption is reported - the account the accounting service records as the consumer. Consumption caused by a portal user carries that user ID here; surrounding whitespace is trimmed, and an omitted value reports every participant.[optional] [example: My Own Corporation] [nullable]
statusOperationStatusThe outcome to keep. Consumption that is still being settled is reported as pending and may change later, while the other outcomes are final; every outcome is reported when this is omitted.[optional] [enum: 0, 1, 2, 3]
metadataMapThe usage annotations a wallet service records alongside its consumption, as the key and value pairs that must all match for a record to be reported. The keys are chosen by the service that writes them, so read them off the metadata of the records returned by GET api/2.0/portal/payment/customer/usage rather than guessing; an omitted map reports every record.[optional] [example: {key1=value1, key2=value2}]
orderByStringThe name of the field the per-service totals are sorted by, spelled as the accounting service names it, such as ServiceName or StartDate. Surrounding whitespace is trimmed, and the accounting service applies its own ordering when this is omitted.[optional] [example: ServiceName] [nullable]
orderTypeOperationOrderTypeThe direction the field named in orderBy is sorted in. Newest or largest first is what the accounting service does by default, so leaving this out sorts the same way as asking for descending explicitly.[optional] [enum: 0, 1]

Model CustomerServiceUsageReportWrapper​

The successful API response containing the CustomerServiceUsageReportDto object.

NameTypeDescriptionNotes
responseCustomerServiceUsageReportDtoThe CustomerServiceUsageReportDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DbTenant​

The database tenant parameters.

NameTypeDescriptionNotes
idInteger (int32)The tenant ID.[optional] [example: 1]
nameStringThe tenant name.[optional] [example: Tenant] [maxLength: 255] [nullable]
aliasStringThe tenant alias.[optional] [example: tenant] [maxLength: 100] [nullable]
mappedDomainStringMapped domain[optional] [example: tenant.example.com] [maxLength: 100] [nullable]
versionInteger (int32)The tenant version.[optional] [example: 5]
version_ChangedDate (date-time)The Version_changed field.[optional] [example: 2025-01-01T10:00:00Z] [nullable]
versionChangedDate (date-time)The date and time when the version was changed.[optional] [example: 2025-01-01T10:00:00Z]
languageStringThe tenant language.[optional] [example: en-US] [maxLength: 10] [nullable]
timeZoneStringThe tenant time zone.[optional] [example: UTC] [maxLength: 50] [nullable]
trustedDomainsRawStringThe tenant trusted domains raw.[optional] [example: tenant.exapmle.com, example.com] [maxLength: 1024] [nullable]
trustedDomainsEnabledTenantTrustedDomainsTypeThe type of the tenant trusted domains.[optional] [enum: 0, 1, 2]
statusTenantStatusThe tenant status.[optional] [enum: 0, 1, 2, 3, 4, 5, 6]
statusChangedDate (date-time)The date and time when the tenant status was changed.[optional] [example: 2025-01-01T12:00:00Z] [nullable]
statusChangedHackDate (date-time)The hacked date and time when the tenant status was changed.[optional] [example: 2025-01-01T12:00:00Z]
creationDateTimeDate (date-time)The tenant creation date.[optional] [example: 2025-01-01T12:00:00Z]
ownerIdUUID (uuid)The tenant owner ID.[optional] [example: 00000000-0000-0000-0000-000000000000] [nullable]
paymentIdStringThe tenant payment ID.[optional] [example: pay_1234567890] [maxLength: 38] [nullable]
industryTenantIndustryThe tenant industry.[optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
lastModifiedDate (date-time)The date and time when the tenant was last modified.[optional] [example: 2025-02-01T08:30:00Z]
callsBooleanSpecifies if the calls are available for the current tenant or not.[optional] [example: true]
partnerDbTenantPartnerThe database tenant partner parameters.[optional]

Model DbTenantPartner​

The database tenant partner parameters.

NameTypeDescriptionNotes
tenantIdInteger (int32)The tenant ID.[optional] [example: 1]
partnerIdStringThe partner ID.[optional] [example: partner_123] [maxLength: 36] [nullable]
affiliateIdStringThe affiliate ID.[optional] [example: artifact_123] [maxLength: 50] [nullable]
campaignStringThe tenant partner campaign.[optional] [example: campaigh] [maxLength: 50] [nullable]

Model DeepLinkConfigurationRequestsDto​

How the portal opens its links on a mobile device.

NameTypeDescriptionNotes
deepLinkSettingsTenantDeepLinkSettingsThe deep link configuration to store. Only its handlingMode is read - whether a link always opens in the browser, always in the native application, or asks the user each time - and a mode outside the defined set is refused with 400 before anything is stored.[optional]

Model DeepLinkDto​

What a mobile client needs to hand a portal link to the installed application instead of the browser.

NameTypeDescriptionNotes
androidPackageNameStringThe package name to look for on Android, and to build a store link from when the application is missing. All three fields are empty strings on an installation that ships no mobile application, which is the signal to keep opening links in the browser.[required] [example: com.example.docspace] [nullable]
urlStringThe address the client redirects a portal link through so that the application can claim it. It is the installation's own deep-link host, not a link to any particular document.[required] [example: https://example.com/deeplink] [nullable]
iosPackageIdStringThe bundle identifier to look for on iOS, used the same way as androidPackageName.[required] [example: com.example.docspace] [nullable]

Model DeepLinkHandlingMode​

Possible values:

  • 0 — Provide choice (ProvideChoice)
  • 1 — Web (Web)
  • 2 — App (App)

Model DefaultProductRequestDto​

The section the calling user's account opens into after signing in.

NameTypeDescriptionNotes
defaultFolderTypeFolderTypeThe section to land on. Only the folder types the client offers as a landing page are accepted - the rooms list, My documents, shared with me, favorites, recent, forms and the AI agents folder - and anything else is refused. My documents is refused for a guest as well, since a guest has no personal storage.[required] [enum: 0, 1, 2, 3, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]

Model DiscountCategory​

Represents a discount category applied to the price.

NameTypeDescriptionNotes
idInteger (int32)The discount category unique identifier.[optional] [example: 12345]
valueDiscountDouble (double)The discount value.[optional] [example: 10.5]
descriptionStringThe discount category description.[optional] [example: Annual subscription discount] [nullable]
createdDate (date-time)The date and time when the discount category was created.[optional] [example: 2024-01-15T10:30:00Z]

Model DistributedTaskStatus​

Possible values:

  • 0 — Created (Created)
  • 1 — Running (Running)
  • 2 — Completed (Completed)
  • 3 — Canceled (Canceled)
  • 4 — Failted (Failted)

Model DnsSettingsRequestsDto​

The custom domain the portal answers on, and whether that mapping is in force.

NameTypeDescriptionNotes
dnsNameStringThe domain the portal is to be reachable under, as a bare hostname without a scheme. It must not collide with the reserved base domain of the installation, and a name that fails validation is refused without disturbing the mapping in force. It is read only while enable is true.[optional] [example: example.com] [nullable]
enableBooleanWhether the custom domain is put in force. Setting it false clears the mapping and ignores dnsName; setting it true also stops the previous domain from answering and rewrites any Content Security Policy entry that named it.[optional] [example: true]

Model DocsCloudConfig​

Represents the configuration of a Docs Connect tenant.

NameTypeDescriptionNotes
tenantNameStringThe tenant name.[optional] [example: My Portal] [minLength: 0] [maxLength: 255] [nullable]
securityDocsCloudSecurityConfigThe security configuration.[optional]
serverDocsCloudServerConfigThe server configuration.[optional]
wopiDocsCloudWopiConfigThe WOPI configuration.[optional]
ipFilterDocsCloudIpFilterConfigThe IP filter configuration.[optional]

Model DocsCloudConfigWrapper​

The successful API response containing the DocsCloudConfig object.

NameTypeDescriptionNotes
responseDocsCloudConfigThe DocsCloudConfig object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DocsCloudDevPackRequestDto​

The request parameters for switching the Docs Connect subscription to Docs Connect Dev Pack, or for calculating the cost of that switch.

NameTypeDescriptionNotes
quantityInteger (int32)The number of users to subscribe to Docs Connect Dev Pack for. It must be at least the number of users of the currently purchased Docs Connect subscription, and at least the Docs Connect Dev Pack minimum configured for the installation, which is 10 users by default; a smaller value is rejected with 400.[optional] [example: 10] [min: 1] [max: 2147483647]

Model DocsCloudIpFilterConfig​

Represents the IP filter configuration of a Docs Connect tenant.

NameTypeDescriptionNotes
rulesListThe IP filter rules.[optional] [example: [{address=127.0.0.1, allowed=true}]] [nullable]

Model DocsCloudIpFilterRule​

Represents the IP filter rule of a Docs Connect tenant.

NameTypeDescriptionNotes
addressStringThe IP address.[optional] [example: 127.0.0.1] [minLength: 0] [maxLength: 255] [nullable]
allowedBooleanWhether the IP address is allowed.[optional] [example: true]

Model DocsCloudLicenseInfo​

Represents the license information of a Docs Connect tenant.

NameTypeDescriptionNotes
validDate (date-time)The date and time until which the license is valid.[optional] [example: 2024-01-15T10:30:00Z]
trialBooleanWhether the license is a trial.[optional] [example: false]
buildDateDate (date-time)The license build date.[optional] [example: 2024-01-15T10:30:00Z]

Model DocsCloudPayment​

Represents the payment information of a Docs Connect tenant.

NameTypeDescriptionNotes
cartIdStringThe cart ID.[optional] [example: CartId] [nullable]
productIdInteger (int32)The product ID.[optional] [example: 12345]
statusInteger (int32)The payment status.[optional] [example: 1]
intervalUnitInteger (int32)The interval unit.[optional] [example: 1]
isYearBooleanWhether the payment interval is yearly.[optional] [example: false]
isPrepaidBooleanWhether the payment is prepaid.[optional] [example: false]
quantityInteger (int32)The quantity.[optional] [example: 10]
currencyStringThe three-character ISO 4217 currency symbol of the payment.[optional] [example: USD] [nullable]

Model DocsCloudQuota​

Represents the current user quota of a Docs Connect tenant.

NameTypeDescriptionNotes
usersListThe editor users.[optional] [example: [{userid=00000000-0000-0000-0000-000000000000, expire=2024-01-15T10:30:00Z}]] [nullable]
usersViewListThe viewer users.[optional] [example: [{userid=00000000-0000-0000-0000-000000000000, expire=2024-01-15T10:30:00Z}]] [nullable]

Model DocsCloudQuotaUser​

Represents a single user entry of a Docs Connect quota.

NameTypeDescriptionNotes
userIdStringThe user ID.[optional] [example: 00000000-0000-0000-0000-000000000000] [nullable]
expireStringThe expiration date of the user.[optional] [example: 2024-01-15T10:30:00Z] [nullable]

Model DocsCloudQuotaWrapper​

The successful API response containing the DocsCloudQuota object.

NameTypeDescriptionNotes
responseDocsCloudQuotaThe DocsCloudQuota object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DocsCloudSecurityConfig​

Represents the security configuration of a Docs Connect tenant.

NameTypeDescriptionNotes
secretStringThe security secret.[optional] [example: abc123] [minLength: 0] [maxLength: 255] [nullable]
headerStringThe security header name.[optional] [example: Authorization] [minLength: 0] [maxLength: 255] [nullable]

Model DocsCloudServerConfig​

Represents the server configuration of a Docs Connect tenant.

NameTypeDescriptionNotes
isAnonymousSupportBooleanWhether anonymous access is supported.[optional] [example: false]
fileSizeLimitLong (int64)The maximum file size in bytes.[optional] [example: 104857600] [min: 0] [max: 209715200]

Model DocsCloudServerInfo​

Represents the Docs Connect server information.

NameTypeDescriptionNotes
versionStringThe server version.[optional] [example: 8.0.0] [nullable]
packageTypeStringThe server package type (Open Source, Enterprise Edition or Developer Edition).[optional] [example: Enterprise Edition] [nullable]
dateDate (date-time)The server build date.[optional] [example: 2024-01-15T10:30:00Z]

Model DocsCloudStats​

Represents the usage statistics of a Docs Connect tenant for the current period.

NameTypeDescriptionNotes
periodDayInteger (int32)The length of the statistics period in days.[optional] [example: 30]
editorDocsCloudUserStatsThe statistics for editor users.[optional]
viewerDocsCloudUserStatsThe statistics for viewer users.[optional]

Model DocsCloudTenant​

Represents a Docs Connect tenant of a portal.

NameTypeDescriptionNotes
dedicatedResourceExIdInteger (int32)The external ID of the dedicated resource the tenant is hosted on.[optional] [example: 12345]
aliasStringThe tenant alias.[optional] [example: my-portal] [nullable]
nameStringThe tenant name.[optional] [example: My Portal] [nullable]
modifiedDateDate (date-time)The date and time when the tenant was last modified.[optional] [example: 2024-01-15T10:30:00Z]
customerIdStringThe customer ID.[optional] [example: CustomerId] [nullable]
customerNameStringThe customer name.[optional] [example: CustomerName] [nullable]
endDateDate (date-time)The date and time when the tenant subscription ends.[optional] [example: 2024-01-15T10:30:00Z]
resourceTypeInteger (int32)The resource type.[optional] [example: 1]
isActiveBooleanWhether the tenant is active (the end date is in the future).[optional] [example: false]
addressStringThe tenant address.[optional] [example: https://my-portal.onlyoffice.com] [nullable]
paymentDocsCloudPaymentThe tenant payment information.[optional]

Model DocsCloudTenantInfo​

Represents the license and server information of a Docs Connect tenant, with usage statistics for the current period.

NameTypeDescriptionNotes
licenseDocsCloudLicenseInfoThe license information.[optional]
serverDocsCloudServerInfoThe Docs Connect server information.[optional]
usersLimitDocsCloudUsersLimitThe user limits of the license.[optional]
statsDocsCloudStatsThe usage statistics for the current period.[optional]

Model DocsCloudTenantInfoWrapper​

The successful API response containing the DocsCloudTenantInfo object.

NameTypeDescriptionNotes
responseDocsCloudTenantInfoThe DocsCloudTenantInfo object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DocsCloudTenantWrapper​

The successful API response containing the DocsCloudTenant object.

NameTypeDescriptionNotes
responseDocsCloudTenantThe DocsCloudTenant object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DocsCloudUsage​

Represents the usage statistics of a Docs Connect tenant.

NameTypeDescriptionNotes
sinceDate (date-time)The date and time the usage statistics are counted from.[optional] [example: 2024-01-15T10:30:00Z]
activeCountInteger (int32)The number of active users.[optional] [example: 10]

Model DocsCloudUsageWrapper​

The successful API response containing the DocsCloudUsage object.

NameTypeDescriptionNotes
responseDocsCloudUsageThe DocsCloudUsage object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DocsCloudUserStats​

Represents the usage statistics of a single Docs Connect user category (editor or viewer).

NameTypeDescriptionNotes
activeInteger (int32)The number of active users.[optional] [example: 10]
internalInteger (int32)The number of internal users.[optional] [example: 8]
externalInteger (int32)The number of external users.[optional] [example: 2]
remainingInteger (int32)The number of remaining users before the limit is reached.[optional] [example: 90]
criticalRemainingBooleanWhether the number of remaining users is critically low.[optional] [example: false]

Model DocsCloudUsersLimit​

Represents the user limits of a Docs Connect license.

NameTypeDescriptionNotes
editInteger (int32)The maximum number of users who can edit documents.[optional] [example: 100]
viewInteger (int32)The maximum number of users who can view documents.[optional] [example: 100]

Model DocsCloudWopiConfig​

Represents the WOPI configuration of a Docs Connect tenant.

NameTypeDescriptionNotes
enableBooleanWhether WOPI is enabled.[optional] [example: false]

Model DocumentBuilderTaskDto​

The state of a background document building task: how far it has got, how it ended, and the file it produced.

NameTypeDescriptionNotes
idStringThe identifier of the task. It is derived from the portal, the account and the kind of report, so starting the same report again while it runs returns this same value, which is how a resumed poll is told from a newly queued build.[required] [example: DocumentBuilderTask_1_c2b0e3a4-1f6c-4c2e-9c4f-3a5d8b7e1c22] [nullable]
errorStringThe message of the failure that stopped the build. It is filled in only for a task that ended in the failed state, and stays empty while the task runs and after it succeeds.[required] [example: The document service is unavailable] [nullable]
percentageInteger (int32)How far the build has got, from 0 to 100. It advances in a few coarse steps rather than smoothly, so it is a progress hint and not a measure of the time left; wait on the completion flag instead.[required] [example: 60]
isCompletedBooleanTrue once the task has stopped for any reason, a failure and a cancellation included. It is the field to poll on, and the status tells those outcomes apart.[required] [example: false]
statusDistributedTaskStatusHow the task ended, or that it has not started yet. Read it together with the completion flag: a stopped task can be a finished build, a cancelled one or a failure, and only this field separates them.[required] [enum: 0, 1, 2, 3, 4]
resultFileIdoas_any_type_not_mapped[required] [nullable]
resultFileNameStringThe name the produced file was saved with, extension included. The name is built from the subject of the report and is not unique: a second build adds another file instead of replacing the first.[required] [example: usage_report.xlsx] [nullable]
resultFileUrlStringThe address of the produced file in the document editor, relative to the portal root, so prefix it with the portal address to open it. It stays empty until the build succeeds.[required] [example: /doceditor?fileid=1234] [nullable]

Model DocumentBuilderTaskWrapper​

The successful API response containing the DocumentBuilderTaskDto object.

NameTypeDescriptionNotes
responseDocumentBuilderTaskDtoThe DocumentBuilderTaskDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DoubleNullableWrapper​

The successful API response containing the double value.

NameTypeDescriptionNotes
responseBigDecimalThe double value returned by the operation.[optional] [nullable]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model DoubleWrapper​

The successful API response containing the double value.

NameTypeDescriptionNotes
responseBigDecimalThe double value returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model EmailActivationSettings​

The email activation settings.

NameTypeDescriptionNotes
showBooleanSpecifies whether the email activation settings are shown or hidden.[optional] [example: true]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model EmailActivationSettingsWrapper​

The successful API response containing the EmailActivationSettings object.

NameTypeDescriptionNotes
responseEmailActivationSettingsThe EmailActivationSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model EmailValidationKeyModel​

The confirmation email parameters.

NameTypeDescriptionNotes
keyStringThe email validation key.[optional] [example: abcdef123456] [nullable]
emplTypeEmployeeTypeThe user type.[optional] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]
emailString (email)The email address.[optional] [example: user@example.com] [nullable]
encEmailStringThe encrypted email address.[optional] [example: user%40example.com] [nullable]
uiDUUID (uuid)The user ID.[optional] [example: 00000000-0000-0000-0000-000000000000] [nullable]
typeConfirmTypeThe confirmation email type.[optional] [enum: EmpInvite, LinkInvite, PortalSuspend, PortalContinue, PortalRemove, DnsChange, PortalOwnerChange, Activation, EmailChange, EmailActivation, PasswordChange, ProfileRemove, PhoneActivation, PhoneAuth, Auth, TfaActivation, TfaAuth, Wizard, GuestShareLink]
firstStringSpecifies whether it is the first time account access or not.[optional] [example: false] [nullable]
roomIdStringThe room ID.[optional] [example: 1] [nullable]

Model EmployeeActivationStatus​

Possible values:

  • 0 — Not activated (NotActivated)
  • 1 — Activated (Activated)
  • 2 — Pending (Pending)
  • 4 — Auto generated (AutoGenerated)

Model EmployeeArrayWrapper​

The successful API response containing the list of EmployeeDto objects.

NameTypeDescriptionNotes
responseListThe list of EmployeeDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model EmployeeDto​

The user parameters.

NameTypeDescriptionNotes
idUUID (uuid)The user ID.[optional] [example: 00000000-0000-0000-0000-000000000000]
displayNameStringThe HTML-encoded user's display name formatted according to the default format for the current culture.[optional] [example: Mike Zanyatski] [nullable]
avatarStringThe user avatar.[optional] [example: https://example.com/avatar.jpg] [nullable]
avatarOriginalStringThe user original size avatar.[optional] [example: https://example.com/avatar_original.jpg] [nullable]
avatarMaxStringThe user maximum size avatar.[optional] [example: https://example.com/avatar_max.jpg] [nullable]
avatarMediumStringThe user medium size avatar.[optional] [example: https://example.com/avatar_medium.jpg] [nullable]
avatarSmallStringThe user small size avatar.[optional] [example: https://example.com/avatar_small.jpg] [nullable]
profileUrlStringThe user profile URL.[optional] [example: https://example.com/profile/user123] [nullable]
hasAvatarBooleanSpecifies if the user has an avatar or not.[optional] [example: true]
isAnonimBooleanSpecifies if the user is anonymous or not.[optional] [example: false]

Model EmployeeStatus​

Possible values:

  • 1 — Active (Active)
  • 2 — Terminated (Terminated)
  • 4 — Pending (Pending)
  • 5 — Default (Default)
  • 7 — All (All)

Model EmployeeType​

Possible values:

  • All — All
  • RoomAdmin — Room admin
  • Guest — Guest
  • DocSpaceAdmin — DocSpace admin
  • User — User

Model EnabledModuleArrayWrapper​

The successful API response containing the list of EnabledModuleDto objects.

NameTypeDescriptionNotes
responseListThe list of EnabledModuleDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model EnabledModuleDto​

One portal module the calling user may open.

NameTypeDescriptionNotes
idStringThe module's product class name, HTML-escaped. It is a display-oriented identifier and not the GUID the access-settings operations work with, so it must not be passed to GET api/2.0/settings/security/{id}.[optional] [example: ASC.Web.Files.Configuration.FilesSpaceUsageStatManager] [nullable]
titleStringThe module name in the portal language, HTML-escaped and ready to be rendered as text.[optional] [example: Documents] [nullable]

Model EncryprtionStatus​

Possible values:

  • 0 — Decrypted (Decrypted)
  • 1 — Encryption started (EncryptionStarted)
  • 2 — Encrypted (Encrypted)
  • 3 — Decryption started (DecryptionStarted)

Model EncryptionSettings​

The encryption settings.

NameTypeDescriptionNotes
passwordStringThe encryption password.[optional] [example: password] [nullable]
statusEncryprtionStatusThe encryption status.[optional] [enum: 0, 1, 2, 3]
notifyUsersBooleanSpecifies if the users will be notified about the encryption operation or not.[optional] [example: true]

Model EncryptionSettingsWrapper​

The successful API response containing the EncryptionSettings object.

NameTypeDescriptionNotes
responseEncryptionSettingsThe EncryptionSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model EntryType​

Possible values:

  • 0 — None (None)
  • 1 — File (File)
  • 2 — Folder (Folder)
  • 23 — User (User)
  • 24 — Group (Group)
  • 25 — Room (Room)
  • 26 — Tag (Tag)
  • 27 — Agent (Agent)

Model ErrorApiResponse​

The error body returned with every failed request.

NameTypeDescriptionNotes
statusInteger (int32)The response status flag. Always 1 on an error, as opposed to 0 on success.[optional]
statusCodeInteger (int32)The HTTP status code of the response, repeated in the body.[optional]
errorErrorApiResponse_error[optional]

Model ErrorApiResponse.error​

What went wrong.

NameTypeDescriptionNotes
messageStringThe human-readable error message.[optional]
typeStringThe .NET type of the underlying exception. Only sent when stack traces are enabled.[optional]
stackStringThe stack trace of the underlying exception. Only sent when stack traces are enabled.[optional]
hresultInteger (int32)The HRESULT of the underlying exception. Only sent when stack traces are enabled.[optional]

Model ExternalDatabaseSettings​

The connection parameters of an external database.

NameTypeDescriptionNotes
databaseTypeStringThe engine of the external database.[optional] [example: mysql] [nullable]
databaseTypeEnumExternalDatabaseTypeThe engine of an external database.[optional] [enum: 0, 1]
dbHostStringThe host name or the IP address of the database server.[optional] [example: localhost] [nullable]
dbPortInteger (int32)The port the database server listens on.[optional] [example: 3306]
dbNameStringThe name of the database to connect to.[optional] [example: docspace] [nullable]
dbUserStringThe user name to connect with.[optional] [example: root] [nullable]
dbPasswordStringThe password to connect with.[optional] [example: my-secret-password] [nullable]
dbSslBooleanSpecifies whether the connection to the database is secured with SSL.[optional] [example: false]
sqliteFilePathStringThe path to the database file, used by the SQLite engine only.[optional] [example: /var/lib/docspace/external.db] [nullable]

Model ExternalDatabaseType​

Possible values:

  • 0 (MySql)
  • 1 (Sqlite)

Model FeatureUsedDto​

How much of one quota feature the portal has already consumed.

NameTypeDescriptionNotes
valueoas_any_type_not_mapped[required] [nullable]
titleStringThe same figure as a sentence in the portal language, ready to print. It is empty when this build ships no wording for the feature.[optional] [example: 50 GB used] [nullable]

Model FieldError​

Field specific validation error

NameTypeDescriptionNotes
fieldStringThe name of the field that failed validation[optional] [example: policy_url]
codeStringError code for localization purposes[optional] [example: InvalidPolicyUrl]
messageStringHuman readable error message[optional] [example: policy url is expected to be passed as url]

Model FinishDto​

Whether the finished import mails the imported people their activation links before it is cleared away.

NameTypeDescriptionNotes
isSendWelcomeEmailBooleanWhether every imported account that has not been activated yet is mailed its activation link. Setting it requires the finished job to still be in the queue, so the import must not have been cleared first; the letters go out again on each call, and already active accounts are skipped either way. Setting it false ends the import quietly and leaves inviting those people for later.[required] [example: true]

Model FireBaseUser​

The Firebase user parameters.

NameTypeDescriptionNotes
idInteger (int32)The Firebase user ID.[optional] [example: 1]
userIdUUID (uuid)The user ID.[optional] [example: 00000000-0000-0000-0000-000000000000]
tenantIdInteger (int32)The tenant ID.[optional] [example: 1]
firebaseDeviceTokenStringThe Firebase device token.[optional] [example: token123] [maxLength: 255] [nullable]
applicationStringThe Firebase application.[optional] [example: web] [maxLength: 20] [nullable]
isSubscribedBooleanSpecifies if the user is subscribed to the push notifications or not.[optional] [example: true] [nullable]
tenantDbTenantThe database tenant parameters.[optional]

Model FireBaseUserWrapper​

The successful API response containing the FireBaseUser object.

NameTypeDescriptionNotes
responseFireBaseUserThe FireBaseUser object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model FirebaseDto​

The Firebase project a client initialises its SDK with to receive push notifications from this portal.

NameTypeDescriptionNotes
apiKeyStringThe web API key of the project. Every field of this object is an empty string on an installation that configures no Firebase project, and an empty projectId is the cheapest thing to test for before initialising an SDK. None of these values is a secret - they are meant to be embedded in a client.[required] [example: AIzaSyDxK9L3j4H8mN2pQ5rS6tU7vW8xY9zA1bC] [nullable]
authDomainStringThe host the Firebase SDK performs its own authentication against.[required] [example: myapp-12345.firebaseapp.com] [nullable]
projectIdStringThe identifier of the Firebase project itself, which ties all the other fields together.[required] [example: myapp-12345] [nullable]
storageBucketStringThe Cloud Storage bucket of the project. The portal does not store portal files there; it is part of the SDK configuration.[required] [example: myapp-12345.appspot.com] [nullable]
messagingSenderIdStringThe sender ID that push messages of this project arrive under, which a client checks an incoming message against.[required] [example: 123456789012] [nullable]
appIdStringThe identifier of the Firebase application registration this client is to use.[required] [example: 1:123456789012:web:a1b2c3d4e5f6g7h8] [nullable]
measurementIdStringThe Google Analytics measurement ID of the project, empty when the project reports no analytics.[required] [example: G-ABCD123456] [nullable]
databaseURLStringThe Realtime Database endpoint of the project, empty when the project has no such database.[required] [example: https://myapp-12345.firebaseio.com] [nullable]

Model FirebaseRequestsDto​

Which mobile device receives the Documents push notifications, and whether it is subscribed.

NameTypeDescriptionNotes
firebaseDeviceTokenStringThe registration token Firebase issued to the mobile client for this device, obtained on the device itself. It is kept as an opaque string of up to 255 characters and is never verified here; it identifies the device and is matched but never changed, and a token belonging to another member or another portal matches nothing.[optional] [example: dGhpc2lzYXRva2Vu...] [nullable]
isSubscribedBooleanWhether the device is to receive the room activity messages - an invitation, a role change, an archived room, a new document. On a first registration it is stored as given; on a registration that already exists it is ignored, because registering does not update, and the subscription is changed with PUT api/2.0/settings/push/docsubscribe instead.[optional] [example: true]

Model FolderType​

Possible values:

  • 0 — Default (DEFAULT)
  • 1 — Coomon (COMMON)
  • 2 — Bunch (BUNCH)
  • 3 — Trash (TRASH)
  • 5 — User (USER)
  • 6 — Share (SHARE)
  • 8 — Projects (Projects)
  • 10 — Favourites (Favorites)
  • 11 — Recent (Recent)
  • 12 — Templates (Templates)
  • 13 — Privacy (Privacy)
  • 14 — Virtual rooms (VirtualRooms)
  • 15 — Filling forms room (FillingFormsRoom)
  • 16 — Editing room (EditingRoom)
  • 19 — Custom room (CustomRoom)
  • 20 — Archive (Archive)
  • 21 — Thirdparty backup (ThirdpartyBackup)
  • 22 — Public room (PublicRoom)
  • 25 — Ready form folder (ReadyFormFolder)
  • 26 — In process form folder (InProcessFormFolder)
  • 27 — Form filling folder done (FormFillingFolderDone)
  • 28 — Form filling folder in progress (FormFillingFolderInProgress)
  • 29 — Virtual Data Room (VirtualDataRoom)
  • 30 — Room templates folder (RoomTemplates)
  • 31 — AI Room (AiRoom)
  • 32 — Knowledge (Knowledge)
  • 33 — Result storage (ResultStorage)
  • 34 — AI Agents (AiAgents)
  • 35 — Default Templates (DefaultTemplates)
  • 36 — Forms (Forms)

Model FormGalleryDto​

Where the ready-made form templates are served from, for browsing them and for submitting new ones.

NameTypeDescriptionNotes
pathStringThe path under domain that the gallery's own listing API is reached at. It is joined to domain by the client; the portal only relays the values from its configuration.[required] [example: /forms/templates] [nullable]
domainStringThe address of the gallery service, which is a service of the vendor rather than part of the portal. Every field of this object is empty on an installation that configures no gallery, and a client should then not offer the gallery at all.[required] [example: https://forms.example.com] [nullable]
extStringThe file extension to ask the gallery for, which decides which rendition of a template is downloaded when several are published.[required] [example: .docxf] [nullable]
uploadPathStringThe path used for submitting a form of one's own to the gallery, the counterpart of path for the upload side. The four upload fields are empty when the installation allows browsing but not submitting.[required] [example: /forms/upload] [nullable]
uploadDomainStringThe address the submission is sent to, which may differ from domain.[required] [example: https://upload.forms.example.com] [nullable]
uploadExtStringThe file extension a submitted form has to carry.[required] [example: .docxf] [nullable]
uploadDashboardStringThe page a person is sent to in order to follow up on a submission, joined to uploadDomain the same way as uploadPath.[required] [example: /dashboard/forms] [nullable]

Model GreetingSettingsRequestsDto​

The greeting caption the portal shows its users.

NameTypeDescriptionNotes
titleStringThe caption to store, which is kept as the portal name. An empty value clears the greeting and returns the portal to the built-in default caption. On a cloud portal with a free or trial plan the text is also matched against the character rule configured for the installation and a text that breaks it is refused, while a paid cloud plan and a self-hosted installation apply no such check.[required] [example: Welcome to Our Portal] [minLength: 0] [maxLength: 255] [nullable]

Model GroupSummaryDto​

The group summary parameters.

NameTypeDescriptionNotes
idUUID (uuid)The group ID.[required] [example: 00000000-0000-0000-0000-000000000000]
nameStringThe group name.[required] [example: Group Name] [nullable]
managerStringThe group manager.[optional] [example: Jake.Zazhitski] [nullable]
isSystemBooleanIndicates whether the group is a system group.[optional] [example: false] [nullable]

Model IPRestriction​

The IP restiction parameters.

NameTypeDescriptionNotes
ipStringThe IP address.[required]
forAdminBooleanSpecifies if the IP address is for administrator users only or not.[optional]
idInteger (int32)The IP restiction ID.[optional]
tenantIdInteger (int32)The tenant ID.[optional]

Model IPRestrictionArrayWrapper​

The successful API response containing the list of IPRestriction objects.

NameTypeDescriptionNotes
responseListThe list of IPRestriction objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model IPRestrictionsSettings​

The IP restriction settings.

NameTypeDescriptionNotes
enableBooleanSpecifies if the IP restrictions are enabled or not.[optional] [example: true]
lastModifiedDate (date-time)The date and time when the settings were last modified.[optional] [example: 2024-01-01T00:00:00Z]

Model IPRestrictionsSettingsWrapper​

The successful API response containing the IPRestrictionsSettings object.

NameTypeDescriptionNotes
responseIPRestrictionsSettingsThe IPRestrictionsSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ImportableApiEntity​

The parameters of an importable API entity.

NameTypeDescriptionNotes
shouldImportBooleanSpecifies whether the API entity should be imported.[optional] [example: true]

Model Int64Wrapper​

The successful API response containing the int64 value.

NameTypeDescriptionNotes
responseIntegerThe int64 value returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model InvitationLinkCreateRequestDto​

The role a new invitation link grants, and the limits placed on it.

NameTypeDescriptionNotes
employeeTypeEmployeeTypeThe role whoever follows the link joins with. Only DocSpaceAdmin, RoomAdmin and User are accepted, and the role cannot be changed afterwards - delete the link and create one for the other role instead.[required] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]
expirationDate (date-time)When the link stops letting anyone in, read in the portal time zone. It has to lie in the future; leaving it out creates a link with no deadline at all.[optional] [example: 2025-06-15T10:30:00.0000000Z] [nullable]
maxUseCountInteger (int32)How many accounts may join through the link in total. Leaving it out creates a link with no use limit; the uses spent so far are reported as currentUseCount.[optional] [example: 1] [min: 1] [max: 1000] [nullable]

Model InvitationLinkDeleteRequestDto​

Which invitation link is withdrawn.

NameTypeDescriptionNotes
idUUID (uuid)The link to delete, by the id that creating or reading it returned. A link recreated for the same role afterwards gets a new id, a new URL and a use count starting from zero.[required] [example: 00000000-0000-0000-0000-000000000000]

Model InvitationLinkDto​

The portal's standing invitation link for one role: what it grants, how long it lasts, how often it was used.

NameTypeDescriptionNotes
idUUID (uuid)The identifier to address the link by in PUT api/2.0/portal/users/invitationlink and DELETE api/2.0/portal/users/invitationlink. It survives a change of deadline or use limit, so it is worth storing rather than re-reading.[optional] [example: 00000000-0000-0000-0000-000000000000]
employeeTypeEmployeeTypeThe role an account gets by joining through this link. A portal keeps at most one link per role, and the role of an existing link cannot be changed - the link has to be deleted and created again.[required] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]
expirationApiDateTimeWhen the link stops working, in the portal time zone. It is empty for a link that never expires, which is what omitting the deadline on create or update leaves behind.[optional]
isExpiredBooleanWhether that deadline has already passed. A link without a deadline always reports false, and an expired link is still returned rather than treated as gone - it can be revived by moving expiration.[optional] [example: true]
maxUseCountInteger (int32)How many accounts may join through the link in total. It is empty for a link with no use limit, and an update may not lower it below currentUseCount.[optional] [example: 1] [nullable]
currentUseCountInteger (int32)How many accounts have already joined through the link. It only ever grows, and reaching maxUseCount retires the link as surely as a passed deadline.[optional] [example: 1]
urlStringThe shortened address to hand to the people being invited. It is signed for the account that read it, so two administrators are given two different URLs for one and the same link and both of them work; the id above, not this string, is what identifies the link.[optional] [example: https://example.com] [nullable]

Model InvitationLinkUpdateRequestDto​

The invitation link being changed, with the deadline and use limit it is to have afterwards.

NameTypeDescriptionNotes
idUUID (uuid)The link to change, by the id that creating or reading it returned. The role behind that id cannot be changed here.[required] [example: 00000000-0000-0000-0000-000000000000]
expirationDate (date-time)The new deadline, read in the portal time zone. The body is applied as a whole, so leaving it out clears the deadline rather than keeping the current one; a moment in the past is refused.[optional] [example: 2024-01-15T10:30:00Z] [nullable]
maxUseCountInteger (int32)The new total number of accounts that may join through the link. It may not be lower than the uses already spent, which the link reports as currentUseCount, and leaving it out removes the limit rather than keeping the current one.[optional] [example: 1] [min: 1] [max: 1000] [nullable]

The successful API response containing the InvitationLinkDto object.

NameTypeDescriptionNotes
responseInvitationLinkDtoThe InvitationLinkDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model IpRestrictionBase​

The IP restiction base parameters.

NameTypeDescriptionNotes
ipStringThe IP address.[required] [example: 192.0.2.1] [nullable]
forAdminBooleanSpecifies if the IP address is for administrator users only or not.[optional] [example: false]

Model IpRestrictionsDto​

The addresses allowed to reach the portal, and whether the restriction is enforced.

NameTypeDescriptionNotes
ipRestrictionsListThe allowed addresses, each entry pairing a single IPv4 or IPv6 address with the flag that limits it to administrators. This is the whole list that is to hold afterwards: entries not repeated here are deleted. Ranges written as from-to and CIDR blocks are refused with 400, even though the portal matches such forms when they are already stored. Enforcement spares only the portal owner and the installation own networks, so a list without the caller address locks the remaining administrators out.[required] [example: [{ip=192.0.2.1, forAdmin=false}]] [nullable]
enableBooleanWhether the list is enforced. Leaving it out follows the list - on when addresses are sent, off when the list is empty - and sending true with an empty list is refused with 400, since that would admit nobody.[optional] [example: true] [nullable]

Model IpRestrictionsWrapper​

The successful API response containing the IpRestrictionsDto object.

NameTypeDescriptionNotes
responseIpRestrictionsDtoThe IpRestrictionsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model IsDefaultWhiteLabelLogosArrayWrapper​

The successful API response containing the list of IsDefaultWhiteLabelLogosDto objects.

NameTypeDescriptionNotes
responseListThe list of IsDefaultWhiteLabelLogosDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model IsDefaultWhiteLabelLogosDto​

Whether one branding slot still holds the built-in image or wordmark.

NameTypeDescriptionNotes
nameStringThe stable name of the slot, matching the name of the same slot in GET api/2.0/settings/whitelabel/logos - LightSmall, LoginPage, Favicon, DocsEditor and the rest, plus Notification, which that list leaves out. The wordmark check reports the fixed name logotext instead of a slot.[required] [example: LightSmall] [nullable]
defaultBooleanWhether the slot has never been written for this portal, in which case the built-in image is what gets rendered. It turns false once an image has been stored, for either the light or the dark theme, and back to true after the matching restore operation. For logotext it stays true when the built-in wordmark itself is saved, because saving that value counts as clearing the setting.[required] [example: true]

Model IsDefaultWhiteLabelLogosWrapper​

The successful API response containing the IsDefaultWhiteLabelLogosDto object.

NameTypeDescriptionNotes
responseIsDefaultWhiteLabelLogosDtoThe IsDefaultWhiteLabelLogosDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ItemKeyValuePairStringBoolean​

One entry of a keyed collection, carried as an explicit pair of key and value fields instead of as a member of a JSON object, so that the key is not restricted to a string and the entries keep the order they are sent in.

NameTypeDescriptionNotes
keyStringThe left half of the pair. Where the pair configures something, this is the identifier the value belongs to - a setting name, a module id, a logo slot; where the pair reports the result of a call, this is the result itself, such as the flag telling whether the call succeeded. Which of the two it is, and which keys are accepted, is stated by the operation that sends or returns the pair.[optional] [nullable]
valueBooleanThe right half of the pair: what is assigned to the key next to it, or what is reported for it. Its meaning and its accepted values follow from the key, so read them from the operation that sends or returns the pair.[optional]

Model ItemKeyValuePairStringLogoRequestsDto​

One entry of a keyed collection, carried as an explicit pair of key and value fields instead of as a member of a JSON object, so that the key is not restricted to a string and the entries keep the order they are sent in.

NameTypeDescriptionNotes
keyStringThe left half of the pair. Where the pair configures something, this is the identifier the value belongs to - a setting name, a module id, a logo slot; where the pair reports the result of a call, this is the result itself, such as the flag telling whether the call succeeded. Which of the two it is, and which keys are accepted, is stated by the operation that sends or returns the pair.[optional] [nullable]
valueLogoRequestsDtoThe right half of the pair: what is assigned to the key next to it, or what is reported for it. Its meaning and its accepted values follow from the key, so read them from the operation that sends or returns the pair.[optional]

Model ItemKeyValuePairStringString​

One entry of a keyed collection, carried as an explicit pair of key and value fields instead of as a member of a JSON object, so that the key is not restricted to a string and the entries keep the order they are sent in.

NameTypeDescriptionNotes
keyStringThe left half of the pair. Where the pair configures something, this is the identifier the value belongs to - a setting name, a module id, a logo slot; where the pair reports the result of a call, this is the result itself, such as the flag telling whether the call succeeded. Which of the two it is, and which keys are accepted, is stated by the operation that sends or returns the pair.[optional] [nullable]
valueStringThe right half of the pair: what is assigned to the key next to it, or what is reported for it. Its meaning and its accepted values follow from the key, so read them from the operation that sends or returns the pair.[optional] [nullable]

Model LocationType​

Possible values:

  • 0 — None (None)
  • 1 — Files (Files)
  • 2 — Folders (Folders)
  • 3 — Documents settings (DocumentsSettings)
  • 27 — Rooms (Rooms)
  • 29 — Settings (Settings)
  • 30 — Contacts (Contacts)
  • 31 — Agents (Agents)

Model LoginEventArrayWrapper​

The successful API response containing the list of LoginEventDto objects.

NameTypeDescriptionNotes
responseListThe list of LoginEventDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model LoginEventDto​

One entry of the portal login history: a sign-in, a sign-out or a failed attempt, and where it came from.

NameTypeDescriptionNotes
idInteger (int32)The ID of the recorded sign-in. When the entry is a successful sign-in that is still open, this is also the value GET api/2.0/security/activeconnections reports as the connection's id.[optional] [example: 1]
dateApiDateTimeWhen the attempt was made, in the portal time zone. The from and to filters are read as UTC instants, so the two do not line up on a portal that is not on UTC.[optional]
userStringThe display name of the account the attempt was made against, taken from the account as it stands now rather than as it stood at the time. A localised placeholder stands in when there is no account to read, which is the usual case for a failed attempt on an address nobody owns.[optional] [example: John Doe] [nullable]
userIdUUID (uuid)The ID of that account, which is what the userId filter of this operation matches on. It is the empty GUID when the attempt could not be tied to an account.[optional] [example: 00000000-0000-0000-0000-000000000001]
loginStringThe login string as it was typed - normally the email address. It is the only field that survives a failed attempt against an unknown account, which makes it the one to read when user is a placeholder.[optional] [example: user@example.com] [nullable]
actionStringThe event as a readable sentence in the portal language. On GET api/2.0/security/audit/login/last each substituted value is cut to 50 characters; the filtered operation substitutes them in full.[optional] [example: User logged in] [nullable]
actionIdMessageActionWhat happened, as the action filter of this operation spells it: a successful sign-in, a failed one, a sign-out. Use this rather than parsing action, which is prose and changes with the portal language.[optional] [enum: 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5501, 5502, 5503, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 7000, 7001, 7002, 7003, 7004, 7005, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, -1]
ipStringThe IP address the attempt came from, with the port stripped off.[optional] [example: 192.0.2.1] [nullable]
countryStringThe English name of the country the IP address is located in, empty when the address cannot be located - the normal outcome for private and loopback addresses.[optional] [example: United States] [nullable]
cityStringThe city the IP address is located in, empty under the same conditions as country.[optional] [example: New York] [nullable]
browserStringThe browser and its version as parsed from the user agent of the attempt, empty when the client sent none that could be parsed.[optional] [example: Chrome 120.0] [nullable]
platformStringThe operating system as parsed from the same user agent, empty under the same conditions as browser.[optional] [example: Windows] [nullable]
pageStringWhere in the portal the attempt was made from: the referrer of the request, or that request's own path when it carried no referrer. Long values are cut off at 512 characters.[optional] [example: /login] [nullable]

Model LoginProvider​

Possible values:

  • 0 — Facebook (Facebook)
  • 1 — Google (Google)
  • 2 — Dropbox (Dropbox)
  • 3 — Docusign (Docusign)
  • 4 — Box (Box)
  • 5 — OneDrive (OneDrive)
  • 6 — GosUslugi (GosUslugi)
  • 7 — LinkedIn (LinkedIn)
  • 8 — MailRu (MailRu)
  • 9 — VK (VK)
  • 10 — Wordpress (Wordpress)
  • 11 — Yahoo (Yahoo)
  • 12 — Yandex (Yandex)
  • 13 — Github (Github)
  • 14 — Nextcloud (Nextcloud)

Model LoginSettingsDto​

The brute-force protection of the sign-in form: how many failures, over how long, cost how long a block.

NameTypeDescriptionNotes
attemptCountInteger (int32)How many failed attempts inside one window are tolerated before the offender is blocked. Attempts are counted per user name and client address together, so one member being blocked leaves the rest of the portal signing in normally.[required] [example: 5]
blockTimeInteger (int32)How long, in seconds, a blocked user name and address pair stays refused. While the block lasts the sign-in is refused even once the password is correct.[required] [example: 15]
checkPeriodInteger (int32)The length, in seconds, of the rolling window the failures are counted over. It is not a request timeout: a wider window makes the same attemptCount stricter, because failures further apart still add up.[required] [example: 60]
isDefaultBooleanWhether the three numbers above still match the ones the installation ships with. It turns false as soon as any of them is saved differently, and true again after DELETE api/2.0/settings/security/loginsettings.[required] [example: false]

Model LoginSettingsRequestDto​

The brute-force protection of the sign-in form: how many failures, over how long, cost how long a block.

NameTypeDescriptionNotes
attemptCountInteger (int32)How many failed sign-in attempts inside one window are tolerated before the offender is blocked. Attempts are counted per user name and client address together, so one member being blocked leaves the rest of the portal signing in normally.[optional] [example: 1] [min: 1] [max: 9999]
blockTimeInteger (int32)How long, in seconds, a blocked user name and address pair stays refused. While the block lasts the sign-in is refused even when the password is finally correct.[optional] [example: 1] [min: 1] [max: 9999]
checkPeriodInteger (int32)The length, in seconds, of the rolling window the failed attempts are counted over. A wider window makes the same attemptCount stricter, because failures further apart still add up.[optional] [example: 1] [min: 1] [max: 9999]

Model LoginSettingsWrapper​

The successful API response containing the LoginSettingsDto object.

NameTypeDescriptionNotes
responseLoginSettingsDtoThe LoginSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model LogoRequestsDto​

The two theme variants of one branding logo.

NameTypeDescriptionNotes
lightStringThe image used on a light background, either as a data:image/png;base64,... payload - png, jpg and svg are accepted - or as the name of a file already put in the temporary store.[optional] [example: data:image/png;base64,iVBORw0KGgoAAAANS...] [nullable]
darkStringThe image used on a dark background, in the same two forms as light. It is only stored for the slots that have a dark variant and is ignored for the favicon and the editor logos.[optional] [example: data:image/png;base64,iVBORw0KGgoAAAANS...] [nullable]

Model MailDomainSettingsRequestsDto​

Which email domains the portal treats as already verified, and how their users join.

NameTypeDescriptionNotes
typeTenantTrustedDomainsTypeHow trusted domains are decided: no domain is trusted, every domain is, or only the ones listed in domains. Only the custom mode reads domains; under the other two the list is ignored rather than refused.[required] [enum: 0, 1, 2]
domainsListThe trusted domains, as bare hostnames such as example.com without a scheme or an @. This is the whole list that is to hold afterwards and not a list of additions. Each entry is lowercased before it is stored, and one entry that is not a valid hostname - or an empty list in the custom mode - fails the whole call without saving anything.[required] [example: [example.com, company.com]] [nullable]
inviteUsersAsVisitorsBooleanWhat a user joining through a trusted domain becomes: true admits them as a guest, false as a full member. It applies to joins made from now on and does not change anybody who has already joined.[required] [example: false]

Model MessageAction​

[1000 - Login success, 1001 - Login success via social account, 1002 - Login fail invalid combination, 1003 - Login fail social account not found, 1004 - Login fail disabled profile, 1005 - Login fail, 1006 - Logout, 1007 - Login success via sms, 1008 - Login fail via sms, 1009 - Login fail ip security, 1010 - Login success via api, 1011 - Login success via social app, 1012 - Login success via api sms, 1013 - Login fail via api, 1014 - Login fail via api sms, 1015 - Login success via SSO, 1016 - Session started, 1017 - Session completed, 1018 - Login fail via SSO, 1019 - Login success via api social account, 1020 - Login fail via api social account, 1021 - Login succes via tfa app, 1022 - Login fail via Tfa app, 1023 - Login fail brute force, 1024 - Login success via api tfa, 1025 - Login fail via api tfa, 1026 - Login fail recaptcha, 1027 - Authorization link activated, 1028 - Login success via OAuth 2.0, 1029 - Login success via login and password, 4000 - User created, 4001 - Guest created, 4002 - User created via invite, 4003 - Guest created via invite, 4004 - User activated, 4005 - Guest activated, 4006 - User updated, 4007 - User updated language, 4008 - User added avatar, 4009 - User deleted avatar, 4010 - User updated avatar thumbnails, 4011 - User linked social account, 4012 - User unlinked social account, 4013 - User sent activation instructions, 4014 - User sent email change instructions, 4015 - User sent password change instructions, 4016 - User sent delete instructions, 4017 - User updated password, 4018 - User deleted, 4019 - Users updated type, 4020 - Users updated status, 4021 - Users sent activation instructions, 4022 - Users deleted, 4023 - Sent invite instructions, 4024 - User imported, 4025 - Guest imported, 4026 - Group created, 4027 - Group updated, 4028 - Group deleted, 4029 - User updated mobile number, 4030 - User data reassigns, 4031 - User data removing, 4032 - User connected tfa app, 4033 - User disconnected tfa app, 4034 - User logout active connections, 4035 - User logout active connection, 4036 - User logout active connections for user, 4037 - Send join invite, 5000 - File created, 5001 - File renamed, 5002 - File updated, 5003 - File created version, 5004 - File deleted version, 5005 - File updated revision comment, 5006 - File locked, 5007 - File unlocked, 5008 - File updated access, 5009 - File downloaded, 5010 - File downloaded as, 5011 - File uploaded, 5012 - File imported, 5013 - File copied, 5014 - File copied with overwriting, 5015 - File moved, 5016 - File moved with overwriting, 5017 - File moved to trash, 5018 - File deleted, 5019 - Folder created, 5020 - Folder renamed, 5021 - Folder updated access, 5022 - Folder copied, 5023 - Folder copied with overwriting, 5024 - Folder moved, 5025 - Folder moved with overwriting, 5026 - Folder moved to trash, 5027 - Folder deleted, 5028 - ThirdParty created, 5029 - ThirdParty updated, 5030 - ThirdParty deleted, 5031 - Documents ThirdParty settings updated, 5032 - Documents overwriting settings updated, 5033 - Documents uploading formats settings updated, 5034 - User file updated, 5035 - File converted, 5036 - File send access link, 5037 - Document service location setting, 5038 - Authorization keys setting, 5039 - Full text search setting, 5040 - Start transfer setting, 5041 - Backup started, 5042 - License key uploaded, 5043 - File change owner, 5044 - File restore version, 5045 - Document send to sign, 5046 - Document sign complete, 5047 - User updated email, 5048 - Documents store forcesave, 5049 - Documents forcesave, 5050 - Start storage encryption, 5053 - Start storage decryption, 5054 - File opened for change, 5055 - File marked as favorite, 5056 - File removed from favorite, 5057 - Folder downloaded, 5058 - File removed from list, 5059 - Folder removed from list, 5060 - File external link access updated, 5061 - Trash emptied, 5062 - File revision downloaded, 5063 - File marked as read, 5064 - File readed, 5065 - Folder marked as read, 5066 - Folder updated access for, 5068 - File updated access for, 5069 - Documents external share settings updated, 5070 - Room created, 5071 - Room renamed, 5072 - Room archived, 5073 - Room unarchived, 5074 - Room deleted, 5075 - Room update access for user, 5076 - Tag created, 5077 - Tags deleted, 5078 - Added room tags, 5079 - Deleted room tags, 5080 - Room logo created, 5081 - Room logo deleted, 5082 - Room invitation link updated, 5083 - Documents keep new file name settings updated, 5084 - Room remove user, 5085 - Room create user, 5086 - Room invitation link created, 5087 - Room invitation link deleted, 5088 - Room external link created, 5089 - Room external link updated, 5090 - Room external link deleted, 5091 - File external link created, 5092 - File external link updated, 5093 - File external link deleted, 5094 - Room group added, 5095 - Room update access for group, 5096 - Room group remove, 5097 - Room external link revoked, 5098 - Room external link renamed, 5099 - File uploaded with overwriting, 5100 - Room copied, 5101 - Documents display file extension updated, 5102 - Room color changed, 5103 - Room cover changed, 5104 - Room indexing changed, 5105 - Room deny download changed, 5106 - Room index export saved, 5107 - Folder index changed, 5108 - Folder index reordered, 5109 - Room deny download enabled, 5110 - Room deny download disabled, 5111 - File index changed, 5112 - Room watermark set, 5113 - Room watermark disabled, 5114 - Room index export saved, 5115 - Room indexing disabled, 5116 - Room life time set, 5117 - Room life time disabled, 5118 - Room invite resend, 5119 - File version deleted, 5120 - File custom filter enabled, 5121 - File custom filter disabled, 5122 - Folder external link created, 5123 - Folder external link updated, 5124 - Folder external link deleted, 5125 - Backup completed, 5126 - Backup failed, 5127 - Scheduled backup started, 5128 - Scheduled backup completed, 5129 - Scheduled backup failed, 5130 - Scheduled backup deleted, 5131 - Backup cancelled, 5132 - Restore started, 5133 - Restore cancelled, 5150 - Form started to fill, 5151 - Form partially filled, 5152 - Form completely filled, 5153 - Form stopped, 5154 - AI agent created, 5155 - AI agent renamed, 5156 - AI agent deleted, 5157 - MCP server added to AI agent, 5158 - MCP server deleted from AI agent, 5159 - Room change owner, 5160 - Documents default templates settings updated, 5161 - Private room encryption key created, 5162 - Private room encryption key updated, 5163 - Private room encryption key deleted, 5201 - File saved, user quota exceeded, 5202 - File not saved due to user quota exceeded, 5203 - File saved, room quota exceeded, 5204 - File not saved due to room quota exceeded, 5205 - File saved, tenant quota exceeded, 5206 - File not saved due to tenant quota exceeded, 5207 - Documents show quick actions updated, 5501 - Ldap enabled, 5502 - Ldap disabled, 5503 - LDAP synchronization completed, 6000 - Language settings updated, 6001 - Time zone settings updated, 6002 - Dns settings updated, 6003 - Trusted mail domain settings updated, 6004 - Password strength settings updated, 6005 - Two factor authentication settings updated, 6006 - Administrator message settings updated, 6007 - Default start page settings updated, 6008 - Products list updated, 6009 - Administrator added, 6010 - Administrator opened full access, 6011 - Administrator deleted, 6012 - Users opened product access, 6013 - Groups opened product access, 6014 - Product access opened, 6015 - Product access restricted, 6016 - Product added administrator, 6017 - Product deleted administrator, 6018 - Greeting settings updated, 6019 - Team template changed, 6020 - Color theme changed, 6021 - Owner sent change owner instructions, 6022 - Owner updated, 6023 - Owner sent portal deactivation instructions, 6024 - Owner sent portal delete instructions, 6025 - Portal deactivated, 6026 - Portal deleted, 6027 - Login history report downloaded, 6028 - Audit trail report downloaded, 6029 - SSO enabled, 6030 - SSO disabled, 6031 - Portal access settings updated, 6032 - Cookie settings updated, 6033 - Mail service settings updated, 6034 - Custom navigation settings updated, 6035 - Audit settings updated, 6036 - Two factor authentication disabled, 6037 - Two factor authentication enabled by sms, 6038 - Two factor authentication enabled by tfa app, 6039 - Portal renamed, 6040 - Quota per room changed, 6041 - Quota per room disabled, 6042 - Quota per user changed, 6043 - Quota per user disabled, 6044 - Quota per portal changed, 6045 - Quota per portal disabled, 6046 - Form submit, 6047 - Form opened for filling, 6048 - Custom quota per room default, 6049 - Custom quota per room changed, 6050 - Custom quota per room disabled, 6051 - Custom quota per user default, 6052 - Custom quota per user changed, 6053 - Custom quota per user disabled, 6054 - DevTools access settings changed, 6055 - Webhook created, 6056 - Webhook updated, 6057 - Webhook deleted, 6058 - Created api key, 6059 - Update api key, 6060 - Deleted User api key, 6061 - Customer wallet topped up, 6062 - Customer operation performed, 6063 - Customer operations report downloaded, 6064 - Customer wallet top up settings updated, 6065 - Customer subscription updated, 6066 - Promotional banners visibility settings changed, 6067 - Customer wallet services settings updated, 6068 - Quota per AI agent changed, 6069 - Quota per AI agent disabled, 6070 - Custom quota per AI agent default, 6071 - Custom quota per AI agent changed, 6072 - Custom quota per AI agent disabled, 6073 - AI provider created, 6074 - AI provider updated, 6075 - AI provider deleted, 6076 - MCP server created, 6077 - MCP server updated, 6078 - MCP server enabled, 6079 - MCP server disabled, 6080 - MCP server deleted, 6081 - WebSearch settings configured, 6082 - WebSearch settings reset, 6083 - Vectorization settings configured, 6084 - Vectorization settings reset, 6085 - Webplugin uploaded, 6086 - Webplugin updated, 6087 - Webplugin deleted, 6088 - Whitelabel settings logo text updated, 6089 - Whitelabel settings logos updated, 6090 - Whitelabel company settings updated, 6091 - Whitelabel additional settings updated, 6092 - Whitelabel mail settings updated, 6093 - Invitation settings updated, 6094 - IP restrictions settings updated, 6095 - Login settings updated, 6096 - AI default provider set, 6097 - AI access enabled, 6098 - AI access disabled, 6099 - User AI settings updated, 6100 - Subscription balance moved to wallet, 6101 - Docs Cloud config updated, 6102 - Docs Cloud quota report downloaded, 6103 - AI model profile created, 6104 - AI model profile updated, 6105 - AI model profile deleted, 6106 - AI model profile assigned to action, 6107 - AI model profile unassigned from action, 6108 - AI model profile assigned to AI agent action, 6109 - MCP server of AI agent updated, 7000 - Contact admin mail sent, 7001 - Room invite link used, 7002 - User created and added to room, 7003 - Guest created and added to room, 7004 - Contact sales mail sent, 7005 - Suspicious login detected, 9901 - Create client, 9902 - Update client, 9903 - Regenerate secret, 9904 - Delete client, 9905 - Change client activation, 9906 - Change client visibility, 9907 - Revoke user client, 9908 - Generate authorization code token, 9909 - Generate personal access token, -1 - None]

Possible values:

  • 1000 (LoginSuccess)
  • 1001 (LoginSuccessViaSocialAccount)
  • 1002 (LoginFailInvalidCombination)
  • 1003 (LoginFailSocialAccountNotFound)
  • 1004 (LoginFailDisabledProfile)
  • 1005 (LoginFail)
  • 1006 (Logout)
  • 1007 (LoginSuccessViaSms)
  • 1008 (LoginFailViaSms)
  • 1009 (LoginFailIpSecurity)
  • 1010 (LoginSuccessViaApi)
  • 1011 (LoginSuccessViaSocialApp)
  • 1012 (LoginSuccessViaApiSms)
  • 1013 (LoginFailViaApi)
  • 1014 (LoginFailViaApiSms)
  • 1015 (LoginSuccessViaSSO)
  • 1016 (SessionStarted)
  • 1017 (SessionCompleted)
  • 1018 (LoginFailViaSSO)
  • 1019 (LoginSuccessViaApiSocialAccount)
  • 1020 (LoginFailViaApiSocialAccount)
  • 1021 (LoginSuccesViaTfaApp)
  • 1022 (LoginFailViaTfaApp)
  • 1023 (LoginFailBruteForce)
  • 1024 (LoginSuccessViaApiTfa)
  • 1025 (LoginFailViaApiTfa)
  • 1026 (LoginFailRecaptcha)
  • 1027 (AuthLinkActivated)
  • 1028 (LoginSuccessViaOAuth)
  • 1029 (LoginSuccessViaPassword)
  • 4000 (UserCreated)
  • 4001 (GuestCreated)
  • 4002 (UserCreatedViaInvite)
  • 4003 (GuestCreatedViaInvite)
  • 4004 (UserActivated)
  • 4005 (GuestActivated)
  • 4006 (UserUpdated)
  • 4007 (UserUpdatedLanguage)
  • 4008 (UserAddedAvatar)
  • 4009 (UserDeletedAvatar)
  • 4010 (UserUpdatedAvatarThumbnails)
  • 4011 (UserLinkedSocialAccount)
  • 4012 (UserUnlinkedSocialAccount)
  • 4013 (UserSentActivationInstructions)
  • 4014 (UserSentEmailChangeInstructions)
  • 4015 (UserSentPasswordChangeInstructions)
  • 4016 (UserSentDeleteInstructions)
  • 4017 (UserUpdatedPassword)
  • 4018 (UserDeleted)
  • 4019 (UsersUpdatedType)
  • 4020 (UsersUpdatedStatus)
  • 4021 (UsersSentActivationInstructions)
  • 4022 (UsersDeleted)
  • 4023 (SentInviteInstructions)
  • 4024 (UserImported)
  • 4025 (GuestImported)
  • 4026 (GroupCreated)
  • 4027 (GroupUpdated)
  • 4028 (GroupDeleted)
  • 4029 (UserUpdatedMobileNumber)
  • 4030 (UserDataReassigns)
  • 4031 (UserDataRemoving)
  • 4032 (UserConnectedTfaApp)
  • 4033 (UserDisconnectedTfaApp)
  • 4034 (UserLogoutActiveConnections)
  • 4035 (UserLogoutActiveConnection)
  • 4036 (UserLogoutActiveConnectionsForUser)
  • 4037 (SendJoinInvite)
  • 5000 (FileCreated)
  • 5001 (FileRenamed)
  • 5002 (FileUpdated)
  • 5003 (FileCreatedVersion)
  • 5004 (FileDeletedVersion)
  • 5005 (FileUpdatedRevisionComment)
  • 5006 (FileLocked)
  • 5007 (FileUnlocked)
  • 5008 (FileUpdatedAccess)
  • 5009 (FileDownloaded)
  • 5010 (FileDownloadedAs)
  • 5011 (FileUploaded)
  • 5012 (FileImported)
  • 5013 (FileCopied)
  • 5014 (FileCopiedWithOverwriting)
  • 5015 (FileMoved)
  • 5016 (FileMovedWithOverwriting)
  • 5017 (FileMovedToTrash)
  • 5018 (FileDeleted)
  • 5019 (FolderCreated)
  • 5020 (FolderRenamed)
  • 5021 (FolderUpdatedAccess)
  • 5022 (FolderCopied)
  • 5023 (FolderCopiedWithOverwriting)
  • 5024 (FolderMoved)
  • 5025 (FolderMovedWithOverwriting)
  • 5026 (FolderMovedToTrash)
  • 5027 (FolderDeleted)
  • 5028 (ThirdPartyCreated)
  • 5029 (ThirdPartyUpdated)
  • 5030 (ThirdPartyDeleted)
  • 5031 (DocumentsThirdPartySettingsUpdated)
  • 5032 (DocumentsOverwritingSettingsUpdated)
  • 5033 (DocumentsUploadingFormatsSettingsUpdated)
  • 5034 (UserFileUpdated)
  • 5035 (FileConverted)
  • 5036 (FileSendAccessLink)
  • 5037 (DocumentServiceLocationSetting)
  • 5038 (AuthorizationKeysSetting)
  • 5039 (FullTextSearchSetting)
  • 5040 (StartTransferSetting)
  • 5041 (BackupStarted)
  • 5042 (LicenseKeyUploaded)
  • 5043 (FileChangeOwner)
  • 5044 (FileRestoreVersion)
  • 5045 (DocumentSendToSign)
  • 5046 (DocumentSignComplete)
  • 5047 (UserUpdatedEmail)
  • 5048 (DocumentsStoreForcesave)
  • 5049 (DocumentsForcesave)
  • 5050 (StartStorageEncryption)
  • 5053 (StartStorageDecryption)
  • 5054 (FileOpenedForChange)
  • 5055 (FileMarkedAsFavorite)
  • 5056 (FileRemovedFromFavorite)
  • 5057 (FolderDownloaded)
  • 5058 (FileRemovedFromList)
  • 5059 (FolderRemovedFromList)
  • 5060 (FileExternalLinkAccessUpdated)
  • 5061 (TrashEmptied)
  • 5062 (FileRevisionDownloaded)
  • 5063 (FileMarkedAsRead)
  • 5064 (FileReaded)
  • 5065 (FolderMarkedAsRead)
  • 5066 (FolderUpdatedAccessFor)
  • 5068 (FileUpdatedAccessFor)
  • 5069 (DocumentsExternalShareSettingsUpdated)
  • 5070 (RoomCreated)
  • 5071 (RoomRenamed)
  • 5072 (RoomArchived)
  • 5073 (RoomUnarchived)
  • 5074 (RoomDeleted)
  • 5075 (RoomUpdateAccessForUser)
  • 5076 (TagCreated)
  • 5077 (TagsDeleted)
  • 5078 (AddedRoomTags)
  • 5079 (DeletedRoomTags)
  • 5080 (RoomLogoCreated)
  • 5081 (RoomLogoDeleted)
  • 5082 (RoomInvitationLinkUpdated)
  • 5083 (DocumentsKeepNewFileNameSettingsUpdated)
  • 5084 (RoomRemoveUser)
  • 5085 (RoomCreateUser)
  • 5086 (RoomInvitationLinkCreated)
  • 5087 (RoomInvitationLinkDeleted)
  • 5088 (RoomExternalLinkCreated)
  • 5089 (RoomExternalLinkUpdated)
  • 5090 (RoomExternalLinkDeleted)
  • 5091 (FileExternalLinkCreated)
  • 5092 (FileExternalLinkUpdated)
  • 5093 (FileExternalLinkDeleted)
  • 5094 (RoomGroupAdded)
  • 5095 (RoomUpdateAccessForGroup)
  • 5096 (RoomGroupRemove)
  • 5097 (RoomExternalLinkRevoked)
  • 5098 (RoomExternalLinkRenamed)
  • 5099 (FileUploadedWithOverwriting)
  • 5100 (RoomCopied)
  • 5101 (DocumentsDisplayFileExtensionUpdated)
  • 5102 (RoomColorChanged)
  • 5103 (RoomCoverChanged)
  • 5104 (RoomIndexingChanged)
  • 5105 (RoomDenyDownloadChanged)
  • 5106 (RoomIndexExportSaved)
  • 5107 (FolderIndexChanged)
  • 5108 (FolderIndexReordered)
  • 5109 (RoomDenyDownloadEnabled)
  • 5110 (RoomDenyDownloadDisabled)
  • 5111 (FileIndexChanged)
  • 5112 (RoomWatermarkSet)
  • 5113 (RoomWatermarkDisabled)
  • 5114 (RoomIndexingEnabled)
  • 5115 (RoomIndexingDisabled)
  • 5116 (RoomLifeTimeSet)
  • 5117 (RoomLifeTimeDisabled)
  • 5118 (RoomInviteResend)
  • 5119 (FileVersionRemoved)
  • 5120 (FileCustomFilterEnabled)
  • 5121 (FileCustomFilterDisabled)
  • 5122 (FolderExternalLinkCreated)
  • 5123 (FolderExternalLinkUpdated)
  • 5124 (FolderExternalLinkDeleted)
  • 5125 (BackupCompleted)
  • 5126 (BackupFailed)
  • 5127 (ScheduledBackupStarted)
  • 5128 (ScheduledBackupCompleted)
  • 5129 (ScheduledBackupFailed)
  • 5130 (ScheduledBackupDeleted)
  • 5131 (BackupCancelled)
  • 5132 (RestoreStarted)
  • 5133 (RestoreCancelled)
  • 5150 (FormStartedToFill)
  • 5151 (FormPartiallyFilled)
  • 5152 (FormCompletelyFilled)
  • 5153 (FormStopped)
  • 5154 (AgentCreated)
  • 5155 (AgentRenamed)
  • 5156 (AgentDeleted)
  • 5157 (AddedServerToAgent)
  • 5158 (DeletedServerFromAgent)
  • 5159 (RoomChangeOwner)
  • 5160 (DocumentsDefaultTemplatesSettingsUpdated)
  • 5161 (PrivacyRoomKeyCreated)
  • 5162 (PrivacyRoomKeyUpdated)
  • 5163 (PrivacyRoomKeyDeleted)
  • 5201 (FileSavedButUserQuotaExceeded)
  • 5202 (FileNotSavedDueToUserQuota)
  • 5203 (FileSavedButRoomQuotaExceeded)
  • 5204 (FileNotSavedDueToRoomQuota)
  • 5205 (FileSavedButTenantQuotaExceeded)
  • 5206 (FileNotSavedDueToTenantQuota)
  • 5207 (DocumentsShowQuickActionsUpdated)
  • 5501 (LdapEnabled)
  • 5502 (LdapDisabled)
  • 5503 (LdapSync)
  • 6000 (LanguageSettingsUpdated)
  • 6001 (TimeZoneSettingsUpdated)
  • 6002 (DnsSettingsUpdated)
  • 6003 (TrustedMailDomainSettingsUpdated)
  • 6004 (PasswordStrengthSettingsUpdated)
  • 6005 (TwoFactorAuthenticationSettingsUpdated)
  • 6006 (AdministratorMessageSettingsUpdated)
  • 6007 (DefaultStartPageSettingsUpdated)
  • 6008 (ProductsListUpdated)
  • 6009 (AdministratorAdded)
  • 6010 (AdministratorOpenedFullAccess)
  • 6011 (AdministratorDeleted)
  • 6012 (UsersOpenedProductAccess)
  • 6013 (GroupsOpenedProductAccess)
  • 6014 (ProductAccessOpened)
  • 6015 (ProductAccessRestricted)
  • 6016 (ProductAddedAdministrator)
  • 6017 (ProductDeletedAdministrator)
  • 6018 (GreetingSettingsUpdated)
  • 6019 (TeamTemplateChanged)
  • 6020 (ColorThemeChanged)
  • 6021 (OwnerSentChangeOwnerInstructions)
  • 6022 (OwnerUpdated)
  • 6023 (OwnerSentPortalDeactivationInstructions)
  • 6024 (OwnerSentPortalDeleteInstructions)
  • 6025 (PortalDeactivated)
  • 6026 (PortalDeleted)
  • 6027 (LoginHistoryReportDownloaded)
  • 6028 (AuditTrailReportDownloaded)
  • 6029 (SSOEnabled)
  • 6030 (SSODisabled)
  • 6031 (PortalAccessSettingsUpdated)
  • 6032 (CookieSettingsUpdated)
  • 6033 (MailServiceSettingsUpdated)
  • 6034 (CustomNavigationSettingsUpdated)
  • 6035 (AuditSettingsUpdated)
  • 6036 (TwoFactorAuthenticationDisabled)
  • 6037 (TwoFactorAuthenticationEnabledBySms)
  • 6038 (TwoFactorAuthenticationEnabledByTfaApp)
  • 6039 (PortalRenamed)
  • 6040 (QuotaPerRoomChanged)
  • 6041 (QuotaPerRoomDisabled)
  • 6042 (QuotaPerUserChanged)
  • 6043 (QuotaPerUserDisabled)
  • 6044 (QuotaPerPortalChanged)
  • 6045 (QuotaPerPortalDisabled)
  • 6046 (FormSubmit)
  • 6047 (FormOpenedForFilling)
  • 6048 (CustomQuotaPerRoomDefault)
  • 6049 (CustomQuotaPerRoomChanged)
  • 6050 (CustomQuotaPerRoomDisabled)
  • 6051 (CustomQuotaPerUserDefault)
  • 6052 (CustomQuotaPerUserChanged)
  • 6053 (CustomQuotaPerUserDisabled)
  • 6054 (DevToolsAccessSettingsChanged)
  • 6055 (WebhookCreated)
  • 6056 (WebhookUpdated)
  • 6057 (WebhookDeleted)
  • 6058 (ApiKeyCreated)
  • 6059 (ApiKeyUpdated)
  • 6060 (ApiKeyDeleted)
  • 6061 (CustomerWalletToppedUp)
  • 6062 (CustomerOperationPerformed)
  • 6063 (CustomerOperationsReportDownloaded)
  • 6064 (CustomerWalletTopUpSettingsUpdated)
  • 6065 (CustomerSubscriptionUpdated)
  • 6066 (BannerSettingsChanged)
  • 6067 (CustomerWalletServicesSettingsUpdated)
  • 6068 (QuotaPerAiAgentChanged)
  • 6069 (QuotaPerAiAgentDisabled)
  • 6070 (CustomQuotaPerAiAgentDefault)
  • 6071 (CustomQuotaPerAiAgentChanged)
  • 6072 (CustomQuotaPerAiAgentDisabled)
  • 6073 (AIProviderCreated)
  • 6074 (AIProviderUpdated)
  • 6075 (AIProviderDeleted)
  • 6076 (ServerCreated)
  • 6077 (ServerUpdated)
  • 6078 (ServerEnabled)
  • 6079 (ServerDisabled)
  • 6080 (ServerDeleted)
  • 6081 (SetWebSearchSettings)
  • 6082 (ResetWebSearchSettings)
  • 6083 (SetVectorizationSettings)
  • 6084 (ResetVectorizationSettings)
  • 6085 (WebpluginUploaded)
  • 6086 (WebpluginUpdated)
  • 6087 (WebpluginDeleted)
  • 6088 (WhiteLabelSettingsLogoTextUpdated)
  • 6089 (WhiteLabelSettingsLogosUpdated)
  • 6090 (WhiteLabelCompanySettingsUpdated)
  • 6091 (WhiteLabelAdditionalSettingsUpdated)
  • 6092 (WhiteLabelMailSettingsUpdated)
  • 6093 (InvitationSettingsUpdated)
  • 6094 (IPRestrictionsSettingsUpdated)
  • 6095 (LoginSettingsUpdated)
  • 6096 (AIDefaultProviderSet)
  • 6097 (AIAccessEnabled)
  • 6098 (AIAccessDisabled)
  • 6099 (UserUpdatedAiSettings)
  • 6100 (SubscriptionBalanceMovedToWallet)
  • 6101 (DocsCloudConfigUpdated)
  • 6102 (DocsCloudQuotaReportDownloaded)
  • 6103 (AiProfileCreated)
  • 6104 (AiProfileUpdated)
  • 6105 (AiProfileDeleted)
  • 6106 (AiProfileAssigned)
  • 6107 (AiProfileUnassigned)
  • 6108 (AiAgentProfileAssigned)
  • 6109 (UpdatedServerOfAgent)
  • 7000 (ContactAdminMailSent)
  • 7001 (RoomInviteLinkUsed)
  • 7002 (UserCreatedAndAddedToRoom)
  • 7003 (GuestCreatedAndAddedToRoom)
  • 7004 (ContactSalesMailSent)
  • 7005 (SuspiciousLoginDetected)
  • 9901 (CreateClient)
  • 9902 (UpdateClient)
  • 9903 (RegenerateSecret)
  • 9904 (DeleteClient)
  • 9905 (ChangeClientActivation)
  • 9906 (ChangeClientVisibility)
  • 9907 (RevokeUserClient)
  • 9908 (GenerateAuthorizationCodeToken)
  • 9909 (GeneratePersonalAccessToken)
  • -1 (None)

Model MigratingApiFiles​

The parameters of the migrating files.

NameTypeDescriptionNotes
foldersCountInteger (int32)The number of folders.[optional] [example: 12]
filesCountInteger (int32)The number of files.[optional] [example: 48]
bytesTotalLong (int64)The total number of bytes.[optional] [example: 104857600]

Model MigratingApiGroup​

The migrating group parameters.

NameTypeDescriptionNotes
shouldImportBooleanSpecifies whether the API entity should be imported.[optional]
groupNameStringThe group name.[optional] [nullable]
moduleNameStringThe group module name.[optional] [nullable]
userUidListListThe list of group user UIDs.[optional] [nullable]

Model MigratingApiUser​

The migrating user parameters.

NameTypeDescriptionNotes
shouldImportBooleanSpecifies whether the API entity should be imported.[optional]
keyStringThe user key.[optional] [nullable]
emailString (email)The user email.[optional] [nullable]
displayNameStringThe user display name.[optional] [nullable]
firstNameStringThe user first name.[optional] [nullable]
lastNameStringThe user last name.[optional] [nullable]
userTypeEmployeeTypeThe user type.[optional] [enum: All, RoomAdmin, Guest, DocSpaceAdmin, User]
migratingFilesMigratingApiFilesThe user's migrating files.[optional]

Model MigrationApiInfo​

The migration API information.

NameTypeDescriptionNotes
migratorNameStringThe migrator name.[optional] [example: Nextcloud] [nullable]
operationStringThe migration operation.[optional] [example: parse] [nullable]
failedArchivesListThe list of failed archives.[optional] [example: [archive1.zip, archive2.zip]] [nullable]
usersListThe list of migrating users.[optional] [example: [{id=9924256B-447C-4F19-9dbd-8ad8c39e8ff5, email=user@example.com, shouldImport=true}]] [nullable]
withoutEmailUsersListThe list of migrating users without email.[optional] [example: [{id=9924256B-447C-4F19-9dbd-8ad8c39e8ff5, shouldImport=false}]] [nullable]
existUsersListThe list of existing migrating users.[optional] [example: [{id=9924256B-447C-4F19-9dbd-8ad8c39e8ff5, email=existing@example.com, shouldImport=true}]] [nullable]
groupsListThe list of migrating groups.[optional] [example: [{id=1, name=Group1, shouldImport=true}]] [nullable]
importPersonalFilesBooleanSpecifies whether to import personal files or not.[optional] [example: true]
importSharedFilesBooleanSpecifies whether to import shared files or not.[optional] [example: true]
importSharedFoldersBooleanSpecifies whether to import shared folders or not.[optional] [example: true]
importCommonFilesBooleanSpecifies whether to import common files or not.[optional] [example: true]
importProjectFilesBooleanSpecifies whether to import project files or not.[optional] [example: false]
importGroupsBooleanSpecifies whether to import groups or not.[optional] [example: true]
successedUsersInteger (int32)The number of successfully migrated users.[optional] [example: 50]
failedUsersInteger (int32)The number of unsuccessfully migrated users.[optional] [example: 2]
filesListThe list of migrated files.[optional] [example: [document.docx, spreadsheet.xlsx]] [nullable]
errorsListThe list of migration errors.[optional] [example: [User not found, File access denied]] [nullable]

Model MigrationStatusDto​

How far the parse or the import queued for this portal has got, and what it produced once it stopped.

NameTypeDescriptionNotes
progressDouble (double)The share of the job that is done, from 0 to 100. It advances unevenly, since the stages differ in length, so poll isCompleted rather than waiting for this to reach 100.[optional] [example: 99.99]
errorStringThe message that ended the job, in the portal language. It stays empty while nothing has gone wrong, so once isCompleted is true this field is what tells success from failure.[optional] [example: Connection failed] [nullable]
parseResultMigrationApiInfoWhat the migrator has read so far. After a parse pass it holds the users, the groups and the archives it could not read, which is the body to edit and post to POST api/2.0/migration/migrate; during an import it also carries the accounts that were created and the ones that failed. Its own operation field, parse or migration, is what tells the two stages apart.[optional]
isCompletedBooleanWhether the job has stopped, successfully or not. It is the field to poll on; the whole body comes back empty instead when the portal has no job at all, which is not an error.[optional] [example: true]

Model MigrationStatusWrapper​

The successful API response containing the MigrationStatusDto object.

NameTypeDescriptionNotes
responseMigrationStatusDtoThe MigrationStatusDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model MobilePhoneActivationStatus​

Possible values:

  • 0 — Not activated (NotActivated)
  • 1 — Activated (Activated)

Model MobileRequestsDto​

The phone number a user going through phone activation registers for SMS codes.

NameTypeDescriptionNotes
mobilePhoneStringThe number the SMS codes are sent to, in international form with the leading + and no spaces. It is stored as not yet activated and only becomes the confirmed number once a code sent to it is accepted; an already activated number is not replaced this way and has to be erased first.[optional] [example: +1234567890] [nullable]

Model NotificationChannelDto​

One delivery channel of the installation, with the state it is in for this portal.

NameTypeDescriptionNotes
nameStringThe internal name of the channel as the notification service knows it - email.sender for letters, telegram.sender for Telegram messages. It is a key to match on, not a label to print.[required] [example: email.sender] [nullable]
isEnabledBooleanWhether the channel can deliver for this portal. Letters are enabled whenever the channel is listed at all, while Telegram is enabled only while the portal has a bot name and token stored. It says nothing about the caller, who also has to connect their own Telegram account through GET api/2.0/settings/telegram/link.[required] [example: true]

Model NotificationChannelStatusDto​

The ways this installation can deliver a notification, and whether each of them is usable.

NameTypeDescriptionNotes
channelsListThe channels the running installation is configured with. A channel appears only when the notification service names a sender for it, so the list can be shorter than the channels this build implements, and an empty list means the configuration names none of them.[optional] [example: [{name=email.sender, isEnabled=true}]] [nullable]

Model NotificationChannelStatusWrapper​

The successful API response containing the NotificationChannelStatusDto object.

NameTypeDescriptionNotes
responseNotificationChannelStatusDtoThe NotificationChannelStatusDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model NotificationSettingsDto​

Whether one kind of notification is switched on for the calling user.

NameTypeDescriptionNotes
typeNotificationTypeWhich kind of notification the flag belongs to, echoed from the request. It is published as a number: badges, room activity, the daily feed, and the tips.[optional] [enum: 0, 1, 2, 3]
isEnabledBooleanWhether the caller receives that kind of notification. It describes the caller's own account and nobody else's; a fresh account has the badges on and the other three off, because those are subscriptions that only POST api/2.0/settings/notification creates.[optional] [example: true]

Model NotificationSettingsRequestsDto​

Which kind of notification the calling user switches, and which way.

NameTypeDescriptionNotes
typeNotificationTypeThe kind of notification being switched. A value outside the defined set is echoed back while nothing is stored, so confirm the result with GET api/2.0/settings/notification/{type} rather than trusting the answer.[required] [enum: 0, 1, 2, 3]
isEnabledBooleanWhether that kind reaches the calling account. It applies to the caller own account alone and to every room at once; a single room is silenced with POST api/2.0/settings/notification/rooms instead.[optional] [example: true]

Model NotificationSettingsWrapper​

The successful API response containing the NotificationSettingsDto object.

NameTypeDescriptionNotes
responseNotificationSettingsDtoThe NotificationSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model NotificationType​

Possible values:

  • 0 — Badges (Badges)
  • 1 — Rooms activity (RoomsActivity)
  • 2 — Daily feed (DailyFeed)
  • 3 — Usefull tips (UsefullTips)

Model OperationDto​

One movement on the portal wallet: what it was for, who caused it, and how much money it moved.

NameTypeDescriptionNotes
dateApiDateTimeWhen the movement was booked, in the portal time zone - the same zone the startDate and endDate filters are read in, so the two do line up here.[optional]
serviceStringThe wallet service the movement belongs to, by its stable key. It is what the serviceName filter matches on, and it is empty for a movement that belongs to no service, such as a top-up.[optional] [example: disk-storage] [nullable]
descriptionStringA one-line summary of the movement in the portal language, already composed from the service and the quantity - meant to be printed as it is rather than parsed.[optional] [example: Storage quota increase] [nullable]
detailsStringThe longer explanation of the same movement, where the service recorded one. It is empty for a movement that has nothing to add to description.[optional] [example: Increased storage from 50GB to 100GB] [nullable]
serviceUnitStringWhat quantity counts for this service, in the portal language. AI consumption is reported in tokens here rather than in the AI credits the service is sold in.[optional] [example: GB] [nullable]
quantityInteger (int32)How many units the movement covers, in the unit named by serviceUnit. It is 0 for a movement that moves money without consuming a service.[optional] [example: 1]
currencyStringThe currency credit and debit are expressed in, as a three-letter ISO 4217 code. It is the accounting currency of the wallet, which need not be the currency the subscription is priced in.[optional] [example: USD] [nullable]
creditDouble (double)The amount that went into the wallet. It is 0 on a movement that only took money out, so the pair of credit and debit is what shows which way the money went; the credit and debit filters of the operation select the two directions by exactly this.[optional] [example: 99.99]
debitDouble (double)The amount that was taken out of the wallet, 0 on a movement that put money in.[optional] [example: 99.99]
participantNameStringWho caused the movement, as the billing service records them - an internal name, which is what the participantName filter matches on. Show participantDisplayName instead.[optional] [example: john.doe@example.com] [nullable]
participantDisplayNameStringThe same person as their portal display name. It falls back to participantName when the name belongs to no portal account, so it is never empty while participantName is filled.[optional] [example: John Doe] [nullable]
sourceTypeStringWhat kind of thing an AI operation was run on - an agent, a file, a folder, a room or a form. It is empty on any movement that is not an AI charge.[optional] [example: Agent] [nullable]
sourceTitleStringThe title that thing had when the operation ran, kept as recorded, so it does not follow a later rename. Empty under the same conditions as sourceType.[optional] [example: My AI Agent] [nullable]
sourceIdStringThe identifier of that thing, to look it up in the module it belongs to. Empty under the same conditions as sourceType.[optional] [example: 123] [nullable]
typeOperationTypeWhat kind of movement this is - a payment, a charge, a refund, a correction. It is what the type filter matches on, and Unknown covers a movement the billing service reported under a kind this build does not recognise.[optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

Model OperationOrderType​

Possible values:

  • 0 — Descending (Descending)
  • 1 — Ascending (Ascending)

Model OperationStatus​

Possible values:

  • 0 — Pending (Pending)
  • 1 — Completed (Completed)
  • 2 — Rejected (Rejected)
  • 3 — Canceled (Canceled)

Model OperationType​

Possible values:

  • 0 — Unknown (Unknown)
  • 1 — ServicePayment (ServicePayment)
  • 2 — PackagePayment (PackagePayment)
  • 3 — AiServicePayment (AiServicePayment)
  • 4 — Deposit (Deposit)
  • 5 — ReceiveProviderInvoice (ReceiveProviderInvoice)
  • 6 — ProcessProviderInvoice (ProcessProviderInvoice)
  • 7 — WriteOffServiceProfit (WriteOffServiceProfit)
  • 8 — Profit (Profit)
  • 9 — PartnerAccrual (PartnerAccrual)
  • 10 — ProviderPayment (ProviderPayment)
  • 11 — PartnerPayment (PartnerPayment)
  • 12 — Refund (Refund)
  • 13 — BankDeposit (BankDeposit)
  • 14 — BankWithdrawal (BankWithdrawal)
  • 15 — GoodwillCredit (GoodwillCredit)
  • 16 — WriteOffProfit (WriteOffProfit)
  • 17 — WriteOffDifferenceCurrency (WriteOffDifferenceCurrency)
  • 18 — AiDebit (AiDebit)
  • 19 — AiCredit (AiCredit)

Model OwnerChangeInstructionsDto​

The outcome of asking for the portal-ownership transfer letter to be sent.

NameTypeDescriptionNotes
statusInteger (int32)Whether the letter was sent: 1 that it was, 0 that the request was turned down. A refusal comes back with HTTP 200, so this field and not the status code is what says whether anything happened - the request is turned down when the caller is not the portal owner and when the named member is unknown or inactive.[optional] [example: 1]
messageStringThe outcome spelled out in the portal language. On success it names the address the letter went to, and it carries an HTML mailto: anchor rather than plain text, so it has to be rendered as markup or stripped; on a refusal it is the localised reason.[optional] [example: Ownership transferred successfully] [nullable]

Model OwnerChangeInstructionsWrapper​

The successful API response containing the OwnerChangeInstructionsDto object.

NameTypeDescriptionNotes
responseOwnerChangeInstructionsDtoThe OwnerChangeInstructionsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model OwnerIdSettingsRequestDto​

The portal member named as the new owner of the portal.

NameTypeDescriptionNotes
ownerIdUUID (uuid)The member who is to become the portal owner, by user ID. They have to be an active member of this portal and not a guest; a member who is not a DocSpace administrator yet is promoted to one as part of the transfer, so the portal needs a paid seat for them.[required] [example: 00000000-0000-0000-0000-000000000001]

Model PasswordHasher​

The password hash parameters.

NameTypeDescriptionNotes
sizeInteger (int32)The password hash size.[optional] [example: 32]
iterationsInteger (int32)The number of iterations to generate the ppassword hash.[optional] [example: 1000]
saltStringThe salt to generate the ppassword hash.[optional] [example: random_salt_value] [nullable]

Model PasswordSettingsDto​

The password policy of the portal, with the expressions a client can check a password against.

NameTypeDescriptionNotes
minLengthInteger (int32)The shortest password the portal accepts, 8 characters on a portal nobody has configured. Whatever the policy says, a password longer than 30 characters is refused as well, and that ceiling is not reported here.[required] [example: 8]
upperCaseBooleanWhether at least one uppercase letter is demanded. While it is false an uppercase letter is still allowed - the flag adds a requirement rather than permission.[required] [example: true]
digitsBooleanWhether at least one digit is demanded, read the same way as upperCase.[required] [example: true]
specSymbolsBooleanWhether at least one special symbol is demanded, read the same way as upperCase. Which symbols count is spelled out by specSymbolsRegexStr.[required] [example: false]
allowedCharactersRegexStrStringThe expression the whole password has to match, which is what defines the alphabet the portal accepts at all. It comes from the installation's configuration rather than from the portal policy, so it is the same for every portal of an installation and unaffected by the flags above.[required] [example: ^[a-zA-Z0-9!@#$%^&*()]+$] [nullable]
digitsRegexStrStringThe look-ahead expression that tests the digit requirement, meant to be applied only while digits is true. It is always filled in, so its presence is not itself a requirement.[required] [example: (?=.*\\d)] [nullable]
upperCaseRegexStrStringThe look-ahead expression that tests the uppercase requirement, to be applied while upperCase is true.[required] [example: (?=.*[A-Z])] [nullable]
specSymbolsRegexStrStringThe look-ahead expression that tests the special-symbol requirement, to be applied while specSymbols is true. It also enumerates the symbols the portal treats as special.[required] [example: (?=.*[!@#$%^&*()])] [nullable]

Model PasswordSettingsRequestsDto​

The four values that make up the portal password policy, replaced together.

NameTypeDescriptionNotes
minLengthInteger (int32)The shortest password the portal will accept. It has to sit between the floor the installation is configured with, 8 characters unless it was changed, and the ceiling of 30; a value outside that is refused with 400.[required] [example: 8]
upperCaseBooleanWhether a password must contain at least one uppercase letter. There is no partial update on this body, so leaving the flag out stores it as false and drops the requirement.[optional] [example: true]
digitsBooleanWhether a password must contain at least one digit. Leaving the flag out stores it as false and drops the requirement.[optional] [example: true]
specSymbolsBooleanWhether a password must contain at least one special symbol. Leaving the flag out stores it as false and drops the requirement.[optional] [example: true]

Model PasswordSettingsWrapper​

The successful API response containing the PasswordSettingsDto object.

NameTypeDescriptionNotes
responsePasswordSettingsDtoThe PasswordSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model PaymentCalculation​

The parameters of the calculated payment amount.

NameTypeDescriptionNotes
operationIdLong (int64)The operation unique identifier.[optional] [example: 123456789]
amountDouble (double)The calculated payment amount.[optional] [example: 10.0]
currencyStringThe three-character ISO 4217 currency symbol used for the payment calculation.[optional] [example: USD] [nullable]
quantityInteger (int32)The quantity associated with the payment calculation.[optional] [example: 1]

Model PaymentCalculationWrapper​

The successful API response containing the PaymentCalculation object.

NameTypeDescriptionNotes
responsePaymentCalculationThe PaymentCalculation object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model PaymentMethodStatus​

Possible values:

  • 0 — None (None)
  • 1 — Set (Set)
  • 2 — Expired (Expired)

Model PaymentSettingsDto​

Where to buy or extend the portal's subscription, and what the subscription in force looks like.

NameTypeDescriptionNotes
salesEmailStringThe vendor mailbox to write to about buying, extending or changing the subscription, picked for the portal language. It is not the portal's own support address.[required] [example: sales@example.com] [nullable]
feedbackAndSupportUrlStringNot populated: nothing fills this field in, so it always comes back empty. The help and support addresses live in externalResources of GET api/2.0/settings instead.[optional] [example: https://example.com] [nullable]
buyUrlStringThe vendor page for buying or extending the subscription, chosen for the licence kind the installation was built for and for the portal language. It is a page for a person to open, not an API to call.[required] [example: https://example.com/buy] [nullable]
standaloneBooleanWhether this is a server installation someone administers themselves rather than a portal in the cloud, which decides whether payment means uploading a licence file or a subscription in the vendor's store.[required] [example: false]
currentLicenseCurrentLicenseInfoThe subscription in force, reduced to the two facts a payment page needs.[required]
maxInteger (int32)The largest quantity of a paid item - members, storage - that may be bought in one go, 999 unless the installation configures another cap. It bounds a single purchase, not the total a portal may hold.[required] [example: 999]

Model PaymentSettingsWrapper​

The successful API response containing the PaymentSettingsDto object.

NameTypeDescriptionNotes
responsePaymentSettingsDtoThe PaymentSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model PaymentUrlRequestDto​

The plan being bought and the two pages the hosted checkout returns the buyer to.

NameTypeDescriptionNotes
backUrlURI (uri)The absolute address the hosted checkout page sends the buyer back to when the purchase is abandoned. It has to be a well-formed URL and is carried into the checkout page as it is given, so it must be reachable by the buyer rather than by the portal.[required] [example: https://example.com/payment/back] [minLength: 0] [maxLength: 255]
successUrlURI (uri)The absolute address the hosted checkout page sends the buyer to once the payment provider accepts the purchase. Reaching it says the provider took the money, not that the portal has already been switched to the new plan, so a client that lands here reads the plan back rather than assuming it.[required] [example: https://example.com/payment/success] [minLength: 0] [maxLength: 255]
quantityMap (int32)The plan being bought, as a single pair of the plan name and the number of units of it. The key is the name of a monthly, non-wallet quota from GET api/2.0/portal/payment/quotas, and the value is how many administrators the plan is to cover, which has to be greater than zero. Exactly one pair is accepted; yearly and wallet products are refused with 400, and wallet services are bought through PUT api/2.0/portal/payment/updatewallet instead.[required] [example: {admin=1}]

Model PluginsDto​

What the installation allows to be done with web plugins.

NameTypeDescriptionNotes
enabledBooleanWhether web plugins run on this portal at all. While it is false the operations under api/2.0/settings/webplugins are of no use, whatever the other two flags say. All three are false unless the installation switched plugins on in its configuration.[optional] [example: true]
uploadBooleanWhether an administrator may add a plugin of their own through POST api/2.0/settings/webplugins. While it is false only the plugins that ship with the installation are available.[optional] [example: true]
deleteBooleanWhether an added plugin may be removed again through DELETE api/2.0/settings/webplugins/{name}. The plugins that ship with the installation cannot be removed regardless of this flag.[optional] [example: true]

Model PriceDto​

What a quota costs, and the currency that amount is in.

NameTypeDescriptionNotes
valueDouble (double)The amount for one billing period, per unit for a quota sold by the unit. It is empty for a quota that is not sold for money - the free, trial and non-profit ones - and for a quota this installation has no price list entry for.[optional] [example: 99.99] [nullable]
currencySymbolStringThe symbol to print in front of value, such as $. It is chosen for the currency, not for the portal language, so it is not a localised format.[optional] [example: $] [nullable]
isoCurrencySymbolStringThe currency as a three-letter ISO 4217 code, which is the value to compare on when currencySymbol is ambiguous between currencies that share a sign.[optional] [example: USD] [nullable]

Model PriceStatus​

Possible values:

  • 0 — Draft (Draft)
  • 1 — Approved (Approved)
  • 2 — Rejected (Rejected)

Model PriceTimeUnit​

Possible values:

  • 0 — None (None)
  • 1 — Hour (Hour)
  • 2 — Day (Day)
  • 3 — Week (Week)
  • 4 — Month (Month)
  • 5 — Year (Year)
  • 6 — ThreeYears (ThreeYears)

Model ProblemDetail​

RFC 7807 problem details returned by the registration API for failed requests.

NameTypeDescriptionNotes
typeURI (uri)A URI reference that identifies the problem type. This service sets it to the DocSpace API getting-started page.[optional]
titleStringA short, human-readable summary of the problem type, typically the HTTP status reason phrase.[optional]
statusInteger (int32)The HTTP status code for this occurrence of the problem.[optional]
detailStringA human-readable explanation specific to this occurrence of the problem.[optional]
instanceURI (uri)A URI reference that identifies the specific occurrence, set to the request path.[optional]
propertiesMapExtension members carried on the problem. Usually empty; validation failures also surface as the top-level errors array.[optional]
errorsListField-specific validation errors. Present when the request body or parameters failed validation, or when a named scope is not in the tenant catalogue.[optional]

Model ProductAdministratorDto​

Whether one user administers one portal module, echoing back the pair that was asked about.

NameTypeDescriptionNotes
productIdUUID (uuid)The module the verdict is about, echoed from the request. The all-zero GUID stands for the portal as a whole rather than for any single module.[required] [example: 00000000-0000-0000-0000-000000000000]
userIdUUID (uuid)The user the verdict is about, echoed from the request unchanged - it is not checked for existing.[required] [example: 00000000-0000-0000-0000-000000000000]
administratorBooleanWhether that user administers that module. It is true for a DocSpace administrator whatever the module, since the portal-wide role covers every one of them. A false can also mean the identifiers name no user or no module at all, so it is not proof that the user exists, and it says nothing about whether the module is enabled for the portal - GET api/2.0/settings/security/{id} reports that.[required] [example: true]

Model ProductAdministratorWrapper​

The successful API response containing the ProductAdministratorDto object.

NameTypeDescriptionNotes
responseProductAdministratorDtoThe ProductAdministratorDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ProductQuantityType​

Possible values:

  • 0 — Set (Set)
  • 1 — Add (Add)
  • 2 — Sub (Sub)
  • 3 — Renew (Renew)

Model ProductType​

Possible values:

  • 2 — Documents (Documents)
  • 3 — Login (Login)
  • 7 — Settings (Settings)
  • 8 — Contacts (Contacts)

Model QuantityRequestDto​

The new size of the portal subscription.

NameTypeDescriptionNotes
quantityMap (int32)The plan and the number of units it is to cover, as a single pair. While the portal is on a priced plan the key has to be the name of that same plan, which GET api/2.0/portal/payment/quota reports, because the subscription is resized rather than swapped; the value is the total the subscription is to have afterwards, not the difference. Exactly one pair is accepted, and a value that is already in effect is refused with 400.[required] [example: {admin=1}]

Model QuotaArrayWrapper​

The successful API response containing the list of QuotaDto objects.

NameTypeDescriptionNotes
responseListThe list of QuotaDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model QuotaDto​

A quota - a plan, an add-on or a wallet service - with its price, the features it switches on and their limits.

NameTypeDescriptionNotes
idInteger (int32)The identifier of the quota, which is what the tariff reports as a quota id and what a purchase names. A negative value belongs to a built-in quota rather than one on the price list.[required] [example: 1]
titleStringThe quota name in the portal language, for printing rather than matching. It is empty when this build ships no wording for the quota, which is normal for a quota that is not on the public price list.[optional] [example: Basic Plan] [nullable]
pricePriceDtoWhat the quota costs, in the currency resolved for the request. Its value is empty for a quota that is not sold for money, which is what free, trial and nonProfit describe.[required]
nonProfitBooleanWhether this is the non-profit quota, which is granted rather than bought. A portal on it cannot buy any other plan, so a catalogue asked for plans returns this one alone.[required] [example: false]
freeBooleanWhether this is the free quota a portal falls back to when nothing is paid for. It has no end date and the tightest limits of any quota.[required] [example: true]
trialBooleanWhether this is the trial quota, which grants the paid limits for a while and then expires. A trial is not extended by paying - a plan has to be bought instead.[required] [example: false]
featuresListThe features the quota switches on, each with the limit it grants and, on the quota the portal is actually on, how much of that limit is already used. A feature that is absent is off, so the list is the whole truth about what the quota includes.[required] [example: [{id=00000000-0000-0000-0000-000000000001, title=Premium Storage}]] [nullable]
usersQuotaTenantEntityQuotaSettingsThe per-member storage allowance an administrator has set on top of the quota, and whether it is applied at all. It describes the live portal rather than this quota, so every entry of a catalogue listing repeats the same values, and it is empty unless the portal is a server installation or its plan includes statistics.[optional]
roomsQuotaTenantEntityQuotaSettingsThe same kind of per-room storage override, filled in and read the same way as usersQuota.[optional]
aiAgentsQuotaTenantEntityQuotaSettingsThe same kind of per-agent storage override for AI agents, filled in and read the same way as usersQuota.[optional]
tenantCustomQuotaTenantQuotaSettingsThe storage allowance an administrator has set for the portal as a whole, which caps it below what the quota grants. Filled in under the same conditions as usersQuota.[optional]
dueDateDate (date-time)When the quota runs out, in UTC. It is empty on a quota from the catalogue, which has no date until it is bought, and on a quota that never expires.[optional] [example: 2024-01-15T10:30:00Z] [nullable]

Model QuotaSettingsRequestsDto​

The default storage limit given to newly created users, rooms or AI agents, and whether it is enforced.

NameTypeDescriptionNotes
enableQuotaBooleanWhether the limit is enforced at all. While it is false the size is ignored and nothing created afterwards carries a limit; objects that already have one keep it either way.[optional] [example: true]
defaultQuotaQuotaSettingsRequestsDto_defaultQuota[required]

Model QuotaSettingsRequestsDto.defaultQuota​

The starting limit, in bytes, written as a JSON number. It has to parse as a whole number and may not exceed the portal total storage quota, nor, on a self-hosted installation with a portal-wide quota switched on, that quota; anything larger is refused with 400. It is applied to objects created from now on and leaves the limits of existing ones as they are.

Model QuotaState​

Possible values:

  • 0 — Active (Active)
  • 1 — Overdue (Overdue)

Model QuotaWrapper​

The successful API response containing the QuotaDto object.

NameTypeDescriptionNotes
responseQuotaDtoThe QuotaDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model RecaptchaType​

Possible values:

  • 0 — Default (Default)
  • 1 — AndroidV2 (AndroidV2)
  • 2 — iOSV2 (iOSV2)
  • 3 — hCaptcha (hCaptcha)

Model RegStatus​

Possible values:

  • 0 (unlinked)
  • 1 (linked)
  • 2 (linking)

Model ReportDto​

One page of the portal wallet's money movements, with the paging figures needed to walk the rest.

NameTypeDescriptionNotes
collectionListThe movements on this page - top-ups, charges, refunds and corrections alike, newest first. It is empty for a page past the end of the report as well as for a period in which nothing happened.[optional] [example: [{service=disk-storage, debit=14.0}]] [nullable]
offsetInteger (int32)How many movements were skipped before this page, echoed from the request so a client need not remember what it asked for.[optional] [example: 0]
limitInteger (int32)How many movements one page may hold, echoed from the request; it is 25 unless another value was asked for. A full page is not proof that more exist - compare currentPage with totalPage.[optional] [example: 25]
totalQuantityLong (int64)How many movements match the filters in total, across every page.[optional] [example: 137]
totalPageInteger (int32)How many pages those movements come to at the current limit.[optional] [example: 6]
currentPageInteger (int32)Which of those pages this one is, as the billing service numbers them. Page through by advancing offset rather than this value, which nothing accepts as an argument.[optional] [example: 1]

Model ReportWrapper​

The successful API response containing the ReportDto object.

NameTypeDescriptionNotes
responseReportDtoThe ReportDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model RestrictedModelsResponse​

The AI models the portal is not allowed to use.

NameTypeDescriptionNotes
modelsListThe identifiers of the models the portal is not allowed to use.[required] [example: [gpt-4o, claude-3-opus]] [nullable]

Model RestrictedModelsResponseWrapper​

The successful API response containing the RestrictedModelsResponse object.

NameTypeDescriptionNotes
responseRestrictedModelsResponseThe RestrictedModelsResponse object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model RoomsNotificationSettingsDto​

The rooms the calling user has silenced.

NameTypeDescriptionNotes
disabledRoomsListThe identifiers of the silenced rooms, in the order they were added, and belonging to the caller's own account alone. They are kept as opaque values, so a numeric identifier of a portal room and a string identifier of a room on a connected third-party account both appear here, and an identifier stays on the list after its room is deleted. An empty list means nothing is silenced.[optional] [example: [1, 2, 3]] [nullable]

Model RoomsNotificationSettingsWrapper​

The successful API response containing the RoomsNotificationSettingsDto object.

NameTypeDescriptionNotes
responseRoomsNotificationSettingsDtoThe RoomsNotificationSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model RoomsNotificationsSettingsRequestDto​

Which single room the calling user silences, and which way.

NameTypeDescriptionNotes
roomsIdoas_any_type_not_mapped[optional] [nullable]
muteBooleanWhich way the room goes: true adds it to the caller silenced list, false takes it off again. While a room is silenced its activity is left out of the hourly and daily digests, the letters it would send at once are not sent, and its new-item counters are hidden.[optional] [example: true]

Model STRINGArrayWrapper​

The successful API response.

NameTypeDescriptionNotes
responseListThe response payload.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SalesRequestsDto​

Who is writing to the ONLYOFFICE sales team, and what about.

NameTypeDescriptionNotes
userNameStringThe name the sales team should address the reply to. It is sent as written and is not matched against any portal account; an empty value fails the request with 400.[required] [example: John Doe] [minLength: 1] [maxLength: 255]
emailStringThe address the answer is sent to. It has to be a well-formed email address and need not be the caller portal address; an empty or malformed value fails the request with 400.[required] [example: user@example.com] [minLength: 1] [maxLength: 64]
messageStringWhat is being asked of the sales team - a quote, an invoice, or a plan that cannot be bought online. An empty value fails the request with 400.[required] [example: I would like to inquire about pricing] [minLength: 1] [maxLength: 255]

Model SecurityArrayWrapper​

The successful API response containing the list of SecurityDto objects.

NameTypeDescriptionNotes
responseListThe list of SecurityDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SecurityDto​

How access to one portal module is configured: whether it is restricted, and who is let in.

NameTypeDescriptionNotes
webItemIdStringThe module this entry is about, echoed from the identifier that was asked about. When several identifiers are asked about at once, entries come back one per identifier and in the order they were sent, so they can also be matched by position.[optional] [example: 00000000-0000-0000-0000-000000000000] [nullable]
usersListThe individual members the rule was stored for. Members the caller is not allowed to see are left out, so the same module can come back with different lists for different callers and an empty list does not prove that nobody was granted access.[optional] [example: [{displayName=John Doe}]] [nullable]
groupsListThe groups the rule was stored for, listed in full - unlike users, nothing is filtered out of it.[optional] [example: [{id=00000000-0000-0000-0000-000000000000, name=Administrators}]] [nullable]
enabledBooleanWhether access to the module is restricted to the subjects listed here. It is false for a module nobody has ever configured, in which case the two lists say nothing about who may open it.[optional] [example: true]
isSubItemBooleanWhether the module hangs under another one rather than standing on its own. A sub-module is never returned by GET api/2.0/settings/security/modules, which lists top-level modules only.[optional] [example: true]

Model SecurityRequestsDto​

Which member is granted or denied the administrator role of which portal module.

NameTypeDescriptionNotes
productIdUUID (uuid)The module the role applies to, given by its GUID. The all-zero GUID stands for the portal itself and grants or revokes the DocSpace administrator role, which covers every module at once; a GUID that names no module group is stored without effect rather than refused.[required] [example: 00000000-0000-0000-0000-000000000000]
userIdUUID (uuid)The portal member the role is given to or taken from, by user ID. The member has to exist already - nobody is created here - and promoting a guest or a plain member turns them into a paid one.[required] [example: 00000000-0000-0000-0000-000000000000]
administratorBooleanWhich way the role goes: true adds the member to the module administrator group, false removes them from it. Taking away the portal-wide role also drops the member from every product group.[optional] [example: true]

Model ServicePriceInfo​

Represents a price of the service.

NameTypeDescriptionNotes
idInteger (int32)The price unique identifier.[optional] [example: 12345]
accountNumberInteger (int32)The account number.[optional] [example: 1010]
serviceIdInteger (int32)The service ID.[optional] [example: 12345]
timeUnitPriceTimeUnitThe time unit the price is bound to.[optional] [enum: 0, 1, 2, 3, 4, 5, 6]
costPriceDouble (double)The cost price.[optional] [example: 1500.75]
extraChargeDouble (double)The extra charge added to the cost price.[optional] [example: 1500.75]
servicePriceDouble (double)The resulting service price.[optional] [example: 1500.75]
quotaDouble (double)The quota the price is set for.[optional] [example: 100] [nullable]
timeBoundTimeBoundThe period the price is effective in.[optional]
statusPriceStatusThe price status.[optional] [enum: 0, 1, 2]
createdDate (date-time)The date and time when the price was created.[optional] [example: 2024-01-15T10:30:00Z]
discountCategoryIdInteger (int32)The discount category ID.[optional] [example: 12345] [nullable]
discountCategoryDiscountCategoryThe discount category.[optional]

Model ServicePriceInfoArrayWrapper​

The successful API response containing the list of ServicePriceInfo objects.

NameTypeDescriptionNotes
responseListThe list of ServicePriceInfo objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SetAppEnabledBody​

Whether a portal application is switched on.

NameTypeDescriptionNotes
enabledBooleanWhether the application is available in this portal. Switching it off leaves its settings document stored, so switching it back on restores the configuration it had; connected clients are told of the new state without a reload.[optional] [example: true]

Model SetAppSettingsBody​

The configuration document a portal application keeps.

NameTypeDescriptionNotes
settingsSetAppSettingsBody_settings[optional]

Model SetAppSettingsBody.settings​

The configuration the application reads, as any valid JSON value. Its shape is defined by the application and is neither validated nor interpreted by the portal, which stores it verbatim. It replaces the whole stored document rather than merging into it, and null drops it so the application falls back to its own defaults.

Model SetRestrictedAiModelsRequestDto​

The complete set of AI chat models that are to be barred on the portal.

NameTypeDescriptionNotes
modelsSetThe identifiers of the models no user of the portal may pick, taken from GET api/2.0/portal/payment/ai-prices. This is the whole set that is to hold afterwards and not a list of additions: send the models already barred together with the new one to add a restriction, leave one out to lift it, and send an empty set to lift them all.[required] [example: [model1, model2]]

Model SettingsDto​

The general configuration of the current portal, as the client shell needs it before and after sign-in.

NameTypeDescriptionNotes
timezoneStringThe portal time zone as an IANA identifier, which is the zone every date this API returns in portal time is expressed in. Filled in for a signed-in caller only.[optional] [example: UTC] [nullable]
trustedDomainsListThe mail domains a new member may register or be invited from without confirming the address. It is filled in for a signed-in caller, and for an anonymous one only while enabledJoin is true; it is empty whenever trustedDomainsType is not Custom.[optional] [example: [mydomain.com, mydomain1.com]] [nullable]
trustedDomainsTypeTenantTrustedDomainsTypeHow the mail domains above are applied: no domain trusted, every domain trusted, or only the listed ones. Filled in under the same conditions as trustedDomains.[optional] [enum: 0, 1, 2]
cultureStringThe default language of the portal as a culture name, which is what unauthenticated pages are rendered in. A signed-in member may have a language of their own, and that one is not reported here.[required] [example: en-US] [nullable]
utcOffsetString (date-span)The portal's offset from UTC as a time span, positive east of UTC. Filled in for a signed-in caller only, and taken at the moment of the call, so it already reflects daylight saving time.[optional] [example: -08:30:00]
utcHoursOffsetDouble (double)The same offset in hours, fractional for a zone that is not on a whole hour. It is there so a client does not have to parse utcOffset.[optional] [example: -8.5]
greetingSettingsStringThe portal title shown on the login page and in letters. It falls back to the product name in the portal language while the portal has been given no title of its own.[optional] [example: Web Office Applications] [nullable]
ownerIdUUID (uuid)The portal owner, the one account that cannot be removed or demoted. Filled in for a signed-in caller only, and the empty GUID for an anonymous one.[optional] [example: 00000000-0000-0000-0000-000000000000]
nameSchemaIdStringThe naming scheme the portal uses for its own vocabulary - what a member, a group or a room is called in the interface. GET api/2.0/settings/customschemas/{id} spells that vocabulary out. Filled in for a signed-in caller only.[optional] [example: default] [nullable]
enabledJoinBooleanWhether someone who is not invited may still register, which is the case when the portal trusts every mail domain or a list of them. It is computed for an anonymous caller only and left out entirely for a signed-in one, so a missing value is not a false.[optional] [example: true] [nullable]
enableAdmMessBooleanWhether the login page may offer the form for writing to the portal administrators. It is also true while the portal's payment has lapsed, whatever the setting says, so it can be set on a portal where an administrator switched the form off.[optional] [example: true] [nullable]
thirdpartyEnableBooleanWhether the login page may offer sign-in through an external identity provider. It is computed for an anonymous caller only; GET api/2.0/capabilities reports the same thing with the list of providers.[optional] [example: true] [nullable]
docSpaceBooleanAlways true in this product. It exists so a client that also talks to older ONLYOFFICE portals can tell them apart, and is not a feature switch.[optional] [example: true]
standaloneBooleanWhether this is a server installation someone administers themselves rather than a portal in the cloud. Several fields below and a number of operations behave differently in the two, so a client that has to branch on the deployment reads it here.[optional] [example: true]
isAmiBooleanWhether the installation runs from an Amazon machine image, which is a server installation that can read its own instance metadata. It is false on every cloud portal.[optional] [example: true]
baseDomainStringThe domain new portals of this installation are created under, which is what a portal name is checked against and appended to. It is empty on an installation that serves a single portal on a fixed address.[required] [example: example.com] [nullable]
wizardTokenStringThe token that authorizes the first-run setup wizard. It is handed out to anonymous callers only, and only while the wizard has not been completed; once it has, the field stays empty for good.[optional] [example: dGhpc2lzYXRva2Vu...] [nullable]
passwordHashPasswordHasherThe parameters for hashing a password in the client before it is sent - the salt, the iteration count and the hash size. It is filled in for an anonymous caller and, for a signed-in one, only when withPassword=true is asked for. Hash with exactly these parameters and send the result as passwordHash, since the portal cannot reproduce the hash from a different set.[optional]
firebaseFirebaseDtoThe Firebase project a mobile or web client sends push registrations to. Filled in for a signed-in caller only, and its own fields are empty strings on an installation that configures no Firebase project.[optional]
versionStringThe product version of the portal, empty when the installation does not publish one. It is the version of the server, not of this API, whose own version is fixed at 2.0.[optional] [example: 12.5.0] [nullable]
recaptchaTypeRecaptchaTypeWhich CAPTCHA the login form has to render, decided by the installation's configuration. Computed for an anonymous caller only.[optional] [enum: 0, 1, 2, 3]
recaptchaPublicKeyStringThe site key for the CAPTCHA named by recaptchaType, safe to embed in a page. It is empty when the installation configures no CAPTCHA, in which case the login form asks for none.[optional] [example: abc123def456] [nullable]
debugInfoBooleanWhether the client may collect and send diagnostic information. Filled in for a signed-in caller only, and false unless the installation switched it on.[optional] [example: true]
socketUrlStringThe address of the socket service that pushes live updates to a client. It is filled in for a signed-in caller and for an anonymous one who arrives with an external sharing link, and is empty when the installation runs no socket service - a client then has to poll.[optional] [example: https://example.com] [nullable]
tenantStatusTenantStatusThe lifecycle state of the portal. Anything other than active means most operations are refused for the moment, because the portal is being transferred, restored, encrypted or removed.[optional] [enum: 0, 1, 2, 3, 4, 5, 6]
tenantAliasStringThe portal's own name within the installation, which together with baseDomain forms the address it is reached at. PUT api/2.0/portal/portalrename changes it.[optional] [example: mycompany] [nullable]
displayAboutBooleanWhether the interface may show the About page. A cloud portal always may; a server installation may unless its plan includes branding and the vendor details hide the page.[optional] [example: true]
domainValidatorTenantDomainValidatorThe rules a portal name is checked against - its length limits and the pattern it has to match - so a client can validate a rename before sending it. Filled in for a signed-in caller only.[optional]
zendeskKeyStringThe key that lets the client open the vendor's support chat, empty when the installation configures none. Filled in for a signed-in caller only.[optional] [example: abc123def456] [nullable]
tagManagerIdStringThe Google Tag Manager container the client should load, empty when the installation configures none. Filled in for a signed-in caller only.[optional] [example: GTM-XXXXXX] [nullable]
cookieSettingsEnabledBooleanWhether the portal limits how long an authentication session stays valid. The limit itself is read with GET api/2.0/settings/cookiesettings; while this is false a session is honoured for a year.[required] [example: true]
limitedAccessSpaceBooleanWhether the space-management section is restricted to the portal owner. Filled in for a signed-in caller only.[optional] [example: true]
limitedAccessDevToolsForUsersBooleanWhether the Developer Tools section is hidden from members who are not administrators. Filled in for a signed-in caller only.[optional] [example: true]
displayBannersBooleanWhether the interface may show the vendor's promotional banners. A cloud portal always reports true; on a server installation it follows the banner setting. Filled in for a signed-in caller only.[optional] [example: true]
aiEnabledBooleanWhether the AI features - chat, agents and vectorisation - may be used on this portal. While it is false the AI Agents folder is hidden and the AI operations are refused. Filled in for a signed-in caller only.[optional] [example: true]
walletLowBalanceBooleanWhether the portal wallet has already dropped below its low-balance threshold, so a client can warn about AI operations being cut off. It is reported to DocSpace administrators only and left empty for everyone else, which is not the same as a healthy balance.[optional] [example: false] [nullable]
userNameRegexStringThe pattern a member's first and last name has to match, so a client can validate a name before sending it. It is a .NET regular expression and is applied to each name part separately.[optional] [example: ^[a-zA-Z0-9_]{3,20}$] [nullable]
invitationLimitInteger (int32)How many invitations the portal may still send in the current window. Filled in for a signed-in caller only, and set to the maximum value of a 32-bit integer on an installation that limits nothing.[optional] [example: 10] [nullable]
pluginsPluginsDtoWhat the installation allows to be done with web plugins. Filled in for a signed-in caller only, with all three flags false unless the installation switched plugins on.[optional]
deepLinkDeepLinkDtoWhat a mobile client needs to hand a document link over to the installed application instead of opening it in the browser. Its fields are empty strings when the installation configures no application.[required]
formGalleryFormGalleryDtoWhere the ready-made form templates are served from and which extension they carry. Filled in for a signed-in caller only.[optional]
maxImageUploadSizeLong (int64)The largest image the portal accepts as a logo or an avatar, in bytes. Filled in for a signed-in caller only, and a larger upload is refused rather than resized.[optional] [example: 10485760]
logoTextStringThe wordmark to print next to the portal logo. It falls back to the built-in one while the portal has stored no text of its own, so it is never empty.[optional] [example: Company Name] [nullable]
externalResourcesCultureSpecificExternalResourcesThe addresses of the vendor's help, support, forum and video resources, already picked for the portal language. An entry is missing when the installation configures no address for it or the resource is switched off, which GET api/2.0/settings/rebranding/additional reports flag by flag.[optional]
defaultFolderTypeFolderTypeThe section the client should open after sign-in, which is the caller's own preference rather than a portal-wide one. Filled in for a signed-in caller only.[optional] [enum: 0, 1, 2, 3, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
externalDbEnabledBooleanWhether the installation has an external database wired up for form results, without which the operations that write form results there are refused. Filled in for a signed-in caller only.[optional] [example: true]

Model SettingsWrapper​

The successful API response containing the SettingsDto object.

NameTypeDescriptionNotes
responseSettingsDtoThe SettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SmtpOperationStatusRequestsDto​

The state of the background job that sends the portal SMTP test message.

NameTypeDescriptionNotes
completedBooleanWhether the job has finished. This is the field to poll; the first answer that reports it true also discards the job, so read error out of that same answer rather than calling again.[optional] [example: true]
idStringThe identifier of the queued job. A portal only ever has one test job at a time, so it names the run rather than selecting among several.[optional] [example: smtp-op-123] [nullable]
errorStringWhy the test failed. It stays empty while the job runs and also once the relay has accepted the message, so an empty value on a finished job is what success looks like; an unreachable relay is reported here after a 30-second connection timeout rather than as a failed request.[optional] [example: SMTP connection failed.] [nullable]
statusStringThe step the job has reached, in words - Connect to host or Send test message, for instance. It is meant to be shown to a person and is not a fixed set of values to branch on.[optional] [example: Completed] [nullable]
percentsInteger (int32)How far the job has got, as a percentage climbing to 100. Reaching 100 says the job ran to the end, not that the message was accepted - that is what an empty error says.[optional] [example: 1]

Model SmtpOperationStatusRequestsWrapper​

The successful API response containing the SmtpOperationStatusRequestsDto object.

NameTypeDescriptionNotes
responseSmtpOperationStatusRequestsDtoThe SmtpOperationStatusRequestsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SmtpSettingsDto​

The mail server the portal sends its letters through.

NameTypeDescriptionNotes
hostStringThe host name or address of the mail server. On a cloud portal that has saved no relay of its own every field of this object comes back empty, because the installation's own server is not disclosed - only isDefaultSettings is set there.[optional] [example: mail.example.com] [minLength: 0] [maxLength: 255] [nullable]
portInteger (int32)The port the mail server is reached on - conventionally 25 or 587 without encryption from the start, 465 with it. It is empty when no port was stored, in which case the portal falls back to its own default.[optional] [example: 25] [min: 1] [max: 65535] [nullable]
senderAddressStringThe address the letters are sent from, which appears in the From header and is what a reply goes to.[optional] [example: notify@example.com] [minLength: 0] [maxLength: 255] [nullable]
senderDisplayNameStringThe name shown beside that address in a recipient's mailbox.[optional] [example: Postman] [minLength: 0] [maxLength: 255] [nullable]
credentialsUserNameStringThe account the portal signs in to the mail server as, meaningful only while enableAuth is true.[optional] [example: notify@example.com] [minLength: 0] [maxLength: 255] [nullable]
credentialsUserPasswordStringAlways empty here: the stored password is never returned, so a client that sends these settings back has to supply it again rather than echoing what it read.[optional] [nullable]
enableSSLBooleanWhether the connection to the mail server is encrypted.[optional] [example: true]
enableAuthBooleanWhether the portal signs in to the mail server at all. While it is false the credentials above are ignored and the server is expected to accept mail unauthenticated.[optional] [example: true]
useNtlmBooleanAlways false here: the flag is accepted when settings are saved but is not stored, so it never comes back set and says nothing about how the portal authenticates.[optional] [example: false]
isDefaultSettingsBooleanWhether the portal is still on the mail configuration of the installation rather than on a relay of its own. DELETE api/2.0/smtpsettings/smtp puts it back to true, and while it is true on a cloud portal the fields above are blank rather than showing the installation's server.[optional] [example: true]

Model SmtpSettingsWrapper​

The successful API response containing the SmtpSettingsDto object.

NameTypeDescriptionNotes
responseSmtpSettingsDtoThe SmtpSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SocketSettingsDto​

Where a client connects for the portal's live updates.

NameTypeDescriptionNotes
urlStringThe base address of the Socket.IO hub that pushes file changes, presence and quota alerts, always with a trailing slash. It is empty when the installation runs no hub, and a client must then fall back to polling rather than guessing an address. The value comes from the installation's configuration and cannot be changed through this API.[optional] [example: https://example.com/socket.io/] [nullable]

Model SocketSettingsWrapper​

The successful API response containing the SocketSettingsDto object.

NameTypeDescriptionNotes
responseSocketSettingsDtoThe SocketSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SsoBindingTypeDto​

The SAML bindings the SSO settings accept.

NameTypeDescriptionNotes
saml20HttpPostStringThe SAML 2.0 HTTP POST binding, which carries the request in a self-submitting form. It is what the built-in configuration uses and the one to pick when requests are signed, since it has no length limit.[optional] [example: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST] [nullable]
saml20HttpRedirectStringThe SAML 2.0 HTTP redirect binding, which carries the request in the query string and is therefore bound by the length a URL may have.[optional] [example: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect] [nullable]

Model SsoCertificate​

The SSO certificate parameters.

NameTypeDescriptionNotes
selfSignedBooleanSpecifies if a certificate is self-signed or not.[optional] [example: false]
crtStringThe CRT certificate file.[optional] [example: crt file] [nullable]
keyStringThe certificate key.[optional] [example: key] [nullable]
actionStringThe certificate action.[optional] [example: validate] [nullable]
domainNameStringThe certificate domain name.[optional] [example: example.com] [nullable]
startDateDate (date-time)The certificate start date.[optional] [example: 2024-01-01T00:00:00Z]
expiredDateDate (date-time)The certificate expiration date.[optional] [example: 2024-01-01T00:00:00Z]

Model SsoEncryptAlgorithmTypeDto​

The encryption algorithms the SSO settings accept.

NameTypeDescriptionNotes
aes128StringThe AES-128-CBC encryption algorithm, which the built-in configuration uses.[optional] [example: http://www.w3.org/2001/04/xmlenc#aes128-cbc] [nullable]
aes256StringThe AES-256-CBC encryption algorithm, the strongest of the three.[optional] [example: http://www.w3.org/2001/04/xmlenc#aes256-cbc] [nullable]
triDecStringThe Triple DES CBC encryption algorithm, kept for identity providers that support nothing newer.[optional] [example: http://www.w3.org/2001/04/xmlenc#tripledes-cbc] [nullable]

Model SsoFieldMapping​

The SSO field mapping.

NameTypeDescriptionNotes
firstNameStringThe first name.[optional] [example: givenName] [nullable]
lastNameStringThe last name.[optional] [example: sn] [nullable]
emailString (email)The email address.[optional] [example: sn@example.com] [nullable]
titleStringThe title.[optional] [example: SN] [nullable]
locationStringThe location.[optional] [example: Location] [nullable]
phoneStringThe phone number.[optional] [example: +14155552671] [nullable]

Model SsoIdpCertificateActionTypeDto​

What the identity provider's certificate may be used for, as the action of an identity provider certificate.

NameTypeDescriptionNotes
verificationStringThe certificate verifies the signatures on what the provider sends, and nothing else - the counterpart of the service provider's signing action.[optional] [example: verification] [nullable]
decryptStringThe certificate is used to decrypt what the provider sends, but verifies no signature.[optional] [example: decrypt] [nullable]
verificationAndDecryptStringThe certificate does both, which is what a single provider certificate has to be set to.[optional] [example: verification and decrypt] [nullable]

Model SsoIdpCertificateAdvanced​

The IdP advanced certificate parameters.

NameTypeDescriptionNotes
verifyAlgorithmStringThe certificate verification algorithm.[optional] [example: rsa-sha256] [nullable]
verifyAuthResponsesSignBooleanSpecifies if the signatures of the SAML authentication responses sent to SP will be verified or not.[optional] [example: true]
verifyLogoutRequestsSignBooleanSpecifies if the signatures of the SAML logout requests sent to SP will be verified or not.[optional] [example: true]
verifyLogoutResponsesSignBooleanSpecifies if the signatures of the SAML logout responses sent to SP will be verified or not.[optional] [example: true]
decryptAlgorithmStringThe certificate decryption algorithm.[optional] [example: aes256-cbc] [nullable]
decryptAssertionsBooleanSpecifies if the assertions will be decrypted or not.[optional] [example: true]

Model SsoIdpSettings​

The SSO IdP settings.

NameTypeDescriptionNotes
entityIdStringThe entity ID.[optional] [example: https://idp.company.com/saml] [nullable]
ssoUrlStringThe SSO URL.[optional] [example: https://idp.example.com/sso] [nullable]
ssoBindingStringThe SSO binding.[optional] [example: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect] [nullable]
sloUrlStringThe SLO URL.[optional] [example: https://idp.example.com/slo] [nullable]
sloBindingStringThe SLO binding.[optional] [example: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect] [nullable]
nameIdFormatStringThe name ID format.[optional] [example: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress] [nullable]

Model SsoNameIdFormatTypeDto​

The SAML name ID formats the SSO settings accept.

NameTypeDescriptionNotes
saml11UnspecifiedStringThe SAML 1.1 unspecified name ID format.[optional] [example: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified] [nullable]
saml11EmailAddressStringThe SAML 1.1 email address name ID format.[optional] [example: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress] [nullable]
saml20EntityStringThe SAML 2.0 entity name ID format.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:entity] [nullable]
saml20TransientStringThe SAML 2.0 transient name ID format, whose identifier differs from one session to the next. It is what the built-in configuration uses.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:transient] [nullable]
saml20PersistentStringThe SAML 2.0 persistent name ID format, whose identifier stays the same for one person across sessions.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent] [nullable]
saml20EncryptedStringThe SAML 2.0 encrypted name ID format.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted] [nullable]
saml20UnspecifiedStringThe SAML 2.0 unspecified name ID format.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified] [nullable]
saml11X509SubjectNameStringThe SAML 1.1 X.509 subject name name ID format.[optional] [example: urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName] [nullable]
saml11WindowsDomainQualifiedNameStringThe SAML 1.1 Windows domain qualified name name ID format.[optional] [example: urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName] [nullable]
saml20KerberosStringThe SAML 2.0 Kerberos name ID format.[optional] [example: urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos] [nullable]

Model SsoSettingsRequestsDto​

The whole SAML Single Sign-On configuration of the portal, carried as a serialised JSON object.

NameTypeDescriptionNotes
serializeSettingsStringThe configuration object serialised to a JSON string, not a nested object. It is the complete configuration rather than a patch - fields left out are stored empty - so start from GET api/2.0/settings/ssov2 or GET api/2.0/settings/ssov2/default and send back a changed copy. The identity provider entity ID and sign-in URL are required, the sign-in and sign-out URLs have to be absolute http or https addresses, and the attribute mapping has to name the first name, last name and email fields; the values each SAML field accepts are listed by GET api/2.0/settings/ssov2/constants. An empty string, or a string that carries no configuration object, is refused with 400.[required] [example: {"enableSso":true,"idpSettings":{"entityId":"https://idp.example.com"}}] [nullable]

Model SsoSettingsV2​

The SSO portal settings.

NameTypeDescriptionNotes
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]
enableSsoBooleanSpecifies if the SSO settings are enabled or not.[optional] [example: false] [nullable]
idpSettingsSsoIdpSettingsThe SSO IdP settings.[optional]
idpCertificatesListThe list of the IdP certificates.[optional] [example: [{crt=base64-cert-data, key=base64-key-data}]] [nullable]
idpCertificateAdvancedSsoIdpCertificateAdvancedThe IdP advanced certificate.[optional]
spLoginLabelStringThe SP login label.[optional] [example: Single Sign-on] [nullable]
spCertificatesListThe list of the SP certificates.[optional] [example: [{crt=base64-cert-data, key=base64-key-data}]] [nullable]
spCertificateAdvancedSsoSpCertificateAdvancedThe SP advanced certificate.[optional]
fieldMappingSsoFieldMappingThe SSO field mapping.[optional]
hideAuthPageBooleanSpecifies if the authentication page will be hidden or not.[optional] [example: false]
usersTypeInteger (int32)The user type.[optional] [example: 1]
disableEmailVerificationBooleanSpecifies if the email verification is disabled or not.[optional] [example: false]

Model SsoSettingsV2ConstantsDto​

The SSO settings constants: every value the settings accept, by name.

NameTypeDescriptionNotes
ssoNameIdFormatTypeSsoNameIdFormatTypeDtoThe values the nameIdFormat of the identity provider settings accepts. The built-in configuration uses the SAML 2.0 transient format.[optional]
ssoBindingTypeSsoBindingTypeDtoThe values the ssoBinding and sloBinding of the identity provider settings accept - how the portal sends its sign-in and sign-out requests. The built-in configuration uses HTTP POST for both.[optional]
ssoSigningAlgorithmTypeSsoSigningAlgorithmTypeDtoThe values the signingAlgorithm of the service provider certificate and the verifyAlgorithm of the identity provider certificate accept. The built-in configuration uses RSA-SHA1 for both.[optional]
ssoEncryptAlgorithmTypeSsoEncryptAlgorithmTypeDtoThe values the encryptAlgorithm and decryptAlgorithm of the certificate settings accept. The built-in configuration uses AES-128 everywhere.[optional]
ssoSpCertificateActionTypeSsoSpCertificateActionTypeDtoThe values the action of a service provider certificate accepts, which is what the portal's own key pair may be used for.[optional]
ssoIdpCertificateActionTypeSsoIdpCertificateActionTypeDtoThe values the action of an identity provider certificate accepts, which is what the provider's certificate may be used for - the mirror image of the service provider actions.[optional]

Model SsoSettingsV2ConstantsWrapper​

The successful API response containing the SsoSettingsV2ConstantsDto object.

NameTypeDescriptionNotes
responseSsoSettingsV2ConstantsDtoThe SsoSettingsV2ConstantsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SsoSettingsV2Wrapper​

The successful API response containing the SsoSettingsV2 object.

NameTypeDescriptionNotes
responseSsoSettingsV2The SsoSettingsV2 object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SsoSigningAlgorithmTypeDto​

The signing algorithms the SSO settings accept.

NameTypeDescriptionNotes
rsaSha1StringThe RSA-SHA1 signing algorithm, which the built-in configuration uses. SHA-1 is the weakest of the three and some identity providers no longer accept it.[optional] [example: http://www.w3.org/2000/09/xmldsig#rsa-sha1] [nullable]
rsaSha256StringThe RSA-SHA256 signing algorithm.[optional] [example: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256] [nullable]
rsaSha512StringThe RSA-SHA512 signing algorithm.[optional] [example: http://www.w3.org/2001/04/xmldsig-more#rsa-sha512] [nullable]

Model SsoSpCertificateActionTypeDto​

What the portal's own key pair may be used for, as the action of a service provider certificate.

NameTypeDescriptionNotes
signingStringThe key pair signs the requests the portal sends and nothing else.[optional] [example: signing] [nullable]
encryptStringThe key pair encrypts what the portal sends and decrypts what comes back, but signs nothing.[optional] [example: encrypt] [nullable]
signingAndEncryptStringThe key pair does both, which is what one pair configured on its own has to be set to.[optional] [example: signing and encrypt] [nullable]

Model SsoSpCertificateAdvanced​

The SP advanced certificate parameters.

NameTypeDescriptionNotes
signingAlgorithmStringThe certificate signing algorithm.[optional] [example: rsa-sha256] [nullable]
signAuthRequestsBooleanSpecifies if SP will sign the SAML authentication requests sent to IdP or not.[optional] [example: true]
signLogoutRequestsBooleanSpecifies if SP will sign the SAML logout requests sent to IdP or not.[optional] [example: true]
signLogoutResponsesBooleanSpecifies if SP will sign the SAML logout responses sent to IdP or not.[optional] [example: true]
encryptAlgorithmStringThe certificate encryption algorithm.[optional] [example: aes256-cbc] [nullable]
decryptAlgorithmStringThe certificate decryption algorithm.[optional] [example: aes256-cbc] [nullable]
encryptAssertionsBooleanSpecifies if the assertions will be encrypted or not.[optional] [example: true]

Model StorageArrayWrapper​

The successful API response containing the list of StorageDto objects.

NameTypeDescriptionNotes
responseListThe list of StorageDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model StorageDto​

One third-party storage provider the portal data can be kept in, with the keys it expects.

NameTypeDescriptionNotes
idStringThe provider's key, which is what PUT api/2.0/settings/storage and its CDN and backup counterparts take as the storage to switch to. The built-in local storage has no entry of its own: a listing in which nothing is current means the data sits locally.[required] [example: s3] [nullable]
titleStringThe provider name in the portal language, falling back to id when this build ships no wording for it.[required] [example: Amazon AWS S3] [nullable]
propertiesListThe settings the provider expects, each with its key, its localised label and the value the server currently holds. For the entry marked current the values come from the portal's saved storage settings and for the others from the installation configuration, so a setting nobody has configured comes back with an empty value rather than being left out.[optional] [example: [{name=acesskey, value=AKIAIOSFODNN7EXAMPLE, title=Access key}]] [nullable]
currentBooleanWhether the portal is using this provider right now. At most one entry of a listing has it set.[required] [example: true]
isSetBooleanWhether the provider's keys are already filled in on the server, so it could be switched to without sending credentials. It says nothing about whether the credentials still work.[required] [example: true]

Model StorageEncryptionRequestsDto​

Whether the users are warned before the portals go down for the storage encryption pass.

NameTypeDescriptionNotes
notifyUsersBooleanWhether every user of every portal on the server is mailed before the encryption or decryption pass starts. The pass runs either way; the flag only decides whether people are told that their portal is about to become unavailable.[optional] [example: true]

Model StorageRequestsDto​

Which storage provider the portal is pointed at, and the credentials it needs.

NameTypeDescriptionNotes
moduleStringThe storage provider to switch to, by the identifier the matching listing operation reports - default for the built-in local storage. The provider has to be available on the server, which that listing reports as isSet, otherwise the request is refused with 400; sending the module already in use changes nothing.[required] [example: default] [nullable]
propsListThe credentials the provider expects, as the name and value pairs it defines - a bucket, a region and an access key for an Amazon S3 storage, for instance. Read the expected names from the entry of that provider in the listing operation; they differ per provider, so there is no fixed set.[optional] [example: [item1, item2]] [nullable]

Model StorageSettings​

The storage settings.

NameTypeDescriptionNotes
moduleStringThe storage name.[optional] [example: LocalStorage] [nullable]
propsMapThe storage properties.[optional] [example: {region=eu-central-1, bucket=tenant-files}]
lastModifiedDate (date-time)The date and time when the storage settings were last modified.[optional] [example: 2025-01-01T12:00:00Z]

Model StorageSettingsWrapper​

The successful API response containing the StorageSettings object.

NameTypeDescriptionNotes
responseStorageSettingsThe StorageSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model StringWrapper​

The successful API response containing the string value.

NameTypeDescriptionNotes
responseStringThe string value returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model StudioDefaultPageSettings​

The settings that define the folder opened by default after sign-in.

NameTypeDescriptionNotes
defaultFolderTypeFolderTypeSpecifies the type of the default folder associated with the settings.[optional] [enum: 0, 1, 2, 3, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model StudioDefaultPageSettingsWrapper​

The successful API response containing the StudioDefaultPageSettings object.

NameTypeDescriptionNotes
responseStudioDefaultPageSettingsThe StudioDefaultPageSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model SubAccount​

Represents a sub-account with a specific currency and balance.

NameTypeDescriptionNotes
currencyStringThe three-character ISO 4217 currency symbol.[optional] [example: "USD"] [nullable]
amountDouble (double)The amount in the specified currency.[optional] [example: 1500.75]

Model SubscriptionBalanceInfo​

The information about the current subscription and its unused balance.

NameTypeDescriptionNotes
totalCostDouble (double)The total cost of the current billing period (the sum across all subscription items).[optional] [example: 120.0]
currencyStringThe three-character ISO 4217 currency symbol of the subscription.[optional] [example: USD] [nullable]
periodStartDate (date-time)The start of the current billing period.[optional] [example: 2026-06-01T00:00:00Z]
periodEndDate (date-time)The end of the current billing period.[optional] [example: 2026-07-01T00:00:00Z]
periodUsedUntilDate (date-time)The boundary of the used part of the period (the moment of the request).[optional] [example: 2026-06-23T14:35:00Z]
daysElapsedInteger (int32)The number of days elapsed since the start of the period (inclusive).[optional] [example: 23]
remainingBalanceDouble (double)The unused balance of the subscription, in the subscription currency.[optional] [example: 87.74]
remainingBalanceInWalletCurrencyDouble (double)The unused balance of the subscription, converted to the wallet currency.[optional] [example: 87.74]
walletCurrencyStringThe three-character ISO 4217 currency symbol of the wallet.[optional] [example: USD] [nullable]

Model SubscriptionBalanceInfoWrapper​

The successful API response containing the SubscriptionBalanceInfo object.

NameTypeDescriptionNotes
responseSubscriptionBalanceInfoThe SubscriptionBalanceInfo object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TariffDto​

The subscription this portal runs on: its state, the end of the current period, and the quotas it is made of.

NameTypeDescriptionNotes
openSourceBooleanWhether the installation runs the open-source build, which has no paid plan at all. This flag and the two below describe the build rather than the subscription, and all three are left empty for a caller without the portal-settings right.[optional] [example: false] [nullable]
enterpriseBooleanWhether the installation runs on an Enterprise licence file, which is what makes the licence operations under api/2.0/settings/license usable.[optional] [example: true] [nullable]
developerBooleanWhether the installation runs on a Developer licence, an Enterprise licence meant for embedding rather than for production use.[optional] [example: false] [nullable]
idInteger (int32)The identifier of the subscription record itself, for quoting when a charge has to be traced. It is filled in for a caller with the portal-settings right only, and nothing accepts it as an argument.[optional] [example: 1]
stateTariffStateHow the subscription stands: on trial, paid, inside the grace period that follows the due date, or unpaid. It is the one field every caller gets, whatever their role, so a client can warn about payment without needing administrator rights.[optional] [enum: 0, 1, 2, 3]
dueDateApiDateTimeWhen the current period ends, in the portal time zone. It is filled in for a room or DocSpace administrator only, and set to the largest value a date can hold for a subscription that never ends.[optional]
delayDueDateApiDateTimeWhen the grace period after dueDate runs out and the portal is cut off, in the portal time zone. Filled in under the same conditions as dueDate, and equal to it when the plan grants no grace period.[optional]
licenseDateApiDateTimeWhen the licence file behind the subscription was issued, in the portal time zone. It is meaningful on a server installation and filled in for a caller with the portal-settings right only.[optional]
customerIdStringThe account in the billing system the subscription is charged to, empty for a portal that has never been billed. Filled in for a caller with the portal-settings right only.[optional] [example: 00000000-0000-0000-0000-000000000001] [nullable]
quotasListThe quotas the subscription is made of - the plan itself and its add-ons - with the overdue ones listed alongside the current ones, so an entry here is not proof that it is still being paid for; read each entry's own state for that. Filled in for a caller with the portal-settings right only.[optional] [example: [{id=1, quantity=500}]] [nullable]

Model TariffQuotaDto​

One quota the subscription is made of - the plan itself or an add-on - with its quantity and its own deadline.

NameTypeDescriptionNotes
idInteger (int32)The quota this entry stands for. GET api/2.0/portal/payment/quotas describes the quota behind the ID, including what its quantity counts; a negative ID belongs to a built-in quota rather than a purchased one.[optional] [example: -11]
quantityInteger (int32)How much of the quota the portal holds, in whatever the quota itself is measured in - seats for a plan, gigabytes for storage. It is 1 for a quota that is simply on or off.[optional] [example: 500]
walletBooleanWhether the quota is paid for out of the portal wallet as it is consumed, rather than being part of the subscription charged per period.[optional] [example: true]
additionalBooleanWhether this is an add-on bought on top of the plan rather than the plan itself. Exactly one entry of quotas is the plan, and the rest are add-ons.[optional] [example: true]
dueDateApiDateTimeWhen this quota runs out, in the portal time zone. An add-on can end earlier or later than the subscription; a quota with no deadline of its own reports the subscription's dueDate instead of an empty value.[optional]
nextQuantityInteger (int32)The quantity the next period is going to be charged for, when a change has been scheduled. It is empty while quantity simply carries over.[optional] [example: 100] [nullable]
nextQuotaInteger (int32)The quota this one is scheduled to be replaced by at the start of the next period, empty when no such switch is planned. GET api/2.0/portal/tariff/upcoming already reports the charge for the replacement.[optional] [example: 2] [nullable]
stateQuotaStateWhether the quota is still running or its deadline has passed. It is empty for a quota that has no deadline of its own, which means it lasts as long as the subscription does.[optional] [enum: 0, 1]

Model TariffState​

Possible values:

  • 0 — Trial (Trial)
  • 1 — Paid (Paid)
  • 2 — Delay (Delay)
  • 3 — Not paid (NotPaid)

Model TariffWrapper​

The successful API response containing the TariffDto object.

NameTypeDescriptionNotes
responseTariffDtoThe TariffDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TelegramStatusDto​

Whether the calling user's account is linked to the portal's Telegram bot.

NameTypeDescriptionNotes
statusRegStatusWhere the caller's own account stands: not linked, linked, or a registration link issued and the portal still waiting for it to be opened in Telegram. The waiting state ends on its own when the link expires, so it is worth polling rather than treating as final.[required] [enum: 0, 1, 2]
usernameStringThe Telegram handle the account is linked to, without the leading @. It is filled in only while the account is linked and comes back empty in the other two states.[optional] [example: john_doe] [nullable]

Model TelegramStatusWrapper​

The successful API response containing the TelegramStatusDto object.

NameTypeDescriptionNotes
responseTelegramStatusDtoThe TelegramStatusDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantAiAccessSettings​

The tenant-level settings for enabling or disabling all AI functionality in DocSpace.

NameTypeDescriptionNotes
enabledBooleanSpecifies whether AI functionality is enabled for the tenant. When set to false, all AI features (chat, agents, vectorization) are disabled tenant-wide.[optional] [example: true]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantAiAccessSettingsDto​

Whether AI functionality is available on the portal.

NameTypeDescriptionNotes
enabledBooleanWhether AI is available on the portal at all - chat, agents and vectorization together. Switching it off hides the AI Agents folder and makes every AI endpoint unreachable for all members at once, not only for the caller, and the change is pushed to connected clients rather than waiting for their next request.[optional] [example: false]

Model TenantAiAccessSettingsWrapper​

The successful API response containing the TenantAiAccessSettings object.

NameTypeDescriptionNotes
responseTenantAiAccessSettingsThe TenantAiAccessSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantAiAgentQuotaSettings​

The AI agent quota settings.

NameTypeDescriptionNotes
enableQuotaBooleanSpecifies if the quota is enabled for the tenant entity or not.[optional]
defaultQuotaLong (int64)The default quota of the tenant entity.[optional]
lastRecalculateDateDate (date-time)The date of the last quota recalculation.[optional]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional]

Model TenantAiAgentQuotaSettingsWrapper​

The successful API response containing the TenantAiAgentQuotaSettings object.

NameTypeDescriptionNotes
responseTenantAiAgentQuotaSettingsThe TenantAiAgentQuotaSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantAuditSettings​

The tenant audit settings parameters.

NameTypeDescriptionNotes
loginHistoryLifeTimeInteger (int32)The login history lifetime.[optional] [example: 180]
auditTrailLifeTimeInteger (int32)The audit trail lifetime.[optional] [example: 180]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantAuditSettingsResponseWrapper​

The successful API response containing the TenantAuditSettings object.

NameTypeDescriptionNotes
responseTenantAuditSettingsThe TenantAuditSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantAuditSettingsWrapper​

The tenant audit settings wrapper.

NameTypeDescriptionNotes
settingsTenantAuditSettingsThe tenant audit settings parameters.[optional]

Model TenantBannerSettings​

The visibility settings of the promotional banners.

NameTypeDescriptionNotes
hiddenBooleanThe banners visibility flag.[optional] [example: false]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantBannerSettingsDto​

Whether the portal promotional banners are hidden.

NameTypeDescriptionNotes
hiddenBooleanWhether the promotional banners are hidden from every user of the portal. The flag is only honoured on a self-hosted installation; a SaaS portal keeps showing the banners whatever is stored here.[optional] [example: true]

Model TenantBannerSettingsWrapper​

The successful API response containing the TenantBannerSettings object.

NameTypeDescriptionNotes
responseTenantBannerSettingsThe TenantBannerSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantDeepLinkSettings​

The deep link settings.

NameTypeDescriptionNotes
handlingModeDeepLinkHandlingModeThe deep link handling mode.[optional] [enum: 0, 1, 2]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantDeepLinkSettingsWrapper​

The successful API response containing the TenantDeepLinkSettings object.

NameTypeDescriptionNotes
responseTenantDeepLinkSettingsThe TenantDeepLinkSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantDevToolsAccessSettings​

The Developer Tools access settings.

NameTypeDescriptionNotes
limitedAccessForUsersBooleanSpecifies if the Developer Tools access are limited for users or not.[optional] [example: false]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantDevToolsAccessSettingsDto​

Whether the User role is barred from the portal developer tools.

NameTypeDescriptionNotes
limitedAccessForUsersBooleanWhether members holding the User role are barred from the developer tools - API keys, OAuth applications and webhooks. Room administrators and DocSpace administrators keep their access either way.[optional] [example: false]

Model TenantDevToolsAccessSettingsWrapper​

The successful API response containing the TenantDevToolsAccessSettings object.

NameTypeDescriptionNotes
responseTenantDevToolsAccessSettingsThe TenantDevToolsAccessSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantDomainValidator​

The domain validator.

NameTypeDescriptionNotes
regexStringThe regex string to validate a domain.[optional] [example: ^[a-z0-9]([a-z0-9-]){1,61}[a-z0-9]$] [nullable]
minLengthInteger (int32)The minimum length of the valid domain.[optional] [example: 6]
maxLengthInteger (int32)The maximum length of the valid domain.[optional] [example: 63]

Model TenantDto​

The record of one portal: its name, owner, language, time zone and lifecycle state.

NameTypeDescriptionNotes
affiliateIdStringThe partner the portal was signed up through, empty for a portal that came in directly. It is bookkeeping for the vendor and has no bearing on what the portal may do.[optional] [example: AFF12345] [nullable]
tenantAliasStringThe portal's own name within the installation, which together with the installation's base domain forms the address it is reached at. A caller without the portal-settings right gets tenantId alone, so an empty value here is the sign that the rest of this object was withheld rather than unset.[optional] [example: my-company] [nullable]
callsBooleanWhether telephony is switched on for the portal. It is carried over from portal registration and stays false on a DocSpace portal, where the feature does not exist.[optional] [example: true]
campaignStringThe marketing campaign the portal was signed up under, empty for a portal that came in outside one. Like affiliateId, it is bookkeeping only.[optional] [example: WINTER2024] [nullable]
creationDateTimeDate (date-time)When the portal was created, in UTC rather than in the portal time zone.[optional] [example: 2024-01-15T10:30:00Z]
hostedRegionStringThe data-centre region written on the portal record itself, as opposed to region, which is looked up from the hosting service. It is empty on a server installation.[optional] [example: EU] [nullable]
tenantIdInteger (int32)The numeric identifier of the portal inside the installation. It is the one field every caller gets, whatever their rights.[optional] [example: 1]
industryTenantIndustryThe line of business chosen when the portal was created. It only steers what the vendor suggests and restricts nothing.[optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
languageStringThe default language of the portal as a culture name, the same value GET api/2.0/settings reports as culture. A member may have a language of their own, which this does not reflect.[optional] [example: en-US] [nullable]
lastModifiedDate (date-time)When any field of this record last changed, in UTC. It does not move when portal settings outside this record are changed.[optional] [example: 2024-02-10T14:20:00Z]
mappedDomainStringThe custom domain the portal answers on in addition to its own address, empty when none has been set up.[optional] [example: mycompany.example.com] [nullable]
nameStringThe portal title as shown to people, which is what GET api/2.0/settings returns as greetingSettings. It is free text, unlike tenantAlias, and empty until someone sets it.[optional] [example: My Company] [nullable]
ownerIdUUID (uuid)The portal owner, the one account that cannot be removed or demoted. PUT api/2.0/settings/owner hands the role over.[optional] [example: 00000000-0000-0000-0000-000000000001]
paymentIdStringThe portal's identifier in the billing system, empty for a portal that has never been billed. The subscription itself is read with GET api/2.0/portal/tariff.[optional] [example: PAY123456789] [nullable]
spamBooleanWhether the owner agreed to receive the vendor's newsletter. Despite the name it does not mark the portal as a spammer and affects nothing but marketing mail.[optional] [example: false]
statusTenantStatusThe lifecycle state of the portal. Anything other than active means most operations are refused for the moment, because the portal is being transferred, restored, encrypted or removed.[optional] [enum: 0, 1, 2, 3, 4, 5, 6]
statusChangeDateDate (date-time)When status last changed, in UTC. For a portal pending removal it is the moment the countdown to deletion started.[optional] [example: 2024-01-15T10:30:00Z]
timeZoneStringThe portal time zone, which is the zone the dates this API calls portal time are expressed in. It may be stored as a Windows identifier here, while GET api/2.0/settings always reports the IANA form.[optional] [example: America/New_York] [nullable]
trustedDomainsListThe mail domains a new member may register or be invited from without confirming the address. It is empty whenever trustedDomainsType is not Custom.[optional] [example: [example.com, trusted.com]] [nullable]
trustedDomainsRawStringThe same domains as the single stored string they are kept in, separated by commas. Read trustedDomains instead; this one exists because it is what the record holds.[optional] [example: example.com,trusted.com] [nullable]
trustedDomainsTypeTenantTrustedDomainsTypeHow the mail domains are applied: no domain trusted, every domain trusted, or only the listed ones. Only the last of the three makes trustedDomains meaningful.[optional] [enum: 0, 1, 2]
versionInteger (int32)The identifier of the portal version the installation pins this portal to, which is an internal number and not the product version string that GET api/2.0/settings reports as version.[optional] [example: 2]
versionChangedDate (date-time)When version last changed, in UTC. It stays at its zero value on a portal whose version has never been switched.[optional] [example: 2024-02-01T09:00:00Z]
regionStringThe data-centre region the portal is actually served from, looked up from the hosting service. It is empty on a server installation and also whenever the installation's portal cache is switched off, so an empty value does not mean the portal has no region - hostedRegion is the value from the record itself.[optional] [example: us-east-1] [nullable]

Model TenantEntityQuotaSettings​

The tenant entity quota settings.

NameTypeDescriptionNotes
enableQuotaBooleanSpecifies if the quota is enabled for the tenant entity or not.[optional] [example: true]
defaultQuotaLong (int64)The default quota of the tenant entity.[optional] [example: 1000]
lastRecalculateDateDate (date-time)The date of the last quota recalculation.[optional] [example: 2024-01-01T00:00:00Z] [nullable]

Model TenantIndustry​

Possible values:

  • 0 — Other (Other)
  • 1 — Accounting (Accounting)
  • 2 — Advertising marketing PR (AdvertisingMarketingPR)
  • 3 — Banking (Banking)
  • 4 — Consulting (Consulting)
  • 5 — Design (Design)
  • 6 — Education (Education)
  • 7 — Environment (Environment)
  • 8 — Financial services (FinancialServices)
  • 9 — Health care (HealthCare)
  • 10 — IT (IT)
  • 11 — Legal (Legal)
  • 12 — Manufacturing (Manufacturing)
  • 13 — Public sector (PublicSector)
  • 14 — Publishing (Publishing)
  • 15 — Retail sales (RetailSales)
  • 16 — Telecommunications (Telecommunications)

Model TenantQuota​

The current tenant quota.

NameTypeDescriptionNotes
tenantIdInteger (int32)The tenant ID.[optional] [example: 1]
nameStringThe tenant name.[optional] [example: Default] [nullable]
priceDouble (double)The tenant price.[optional] [example: 10.0]
priceCurrencySymbolStringThe tenant price currency symbol.[optional] [example: $] [nullable]
priceISOCurrencySymbolStringThe tenant price three-character ISO 4217 currency symbol.[optional] [example: USD] [nullable]
productIdStringThe tenant product ID.[optional] [example: 64] [nullable]
serviceNameStringThe service name.[optional] [example: backup] [nullable]
serviceGroupStringThe service group.[optional] [example: services] [nullable]
visibleBooleanSpecifies if the tenant quota is visible or not.[optional] [example: true]
walletBooleanSpecifies if the tenant quota applies to the wallet or not[optional] [example: true]
additionalBooleanSpecifies if the tenant quota is primary or additional.[optional] [example: false]
dueDateDate (date-time)The quota due date.[optional] [example: 2021-01-01T00:00:00] [nullable]
featuresStringThe tenant quota features.[optional] [example: audit,ldap,sso] [nullable]
maxFileSizeLong (int64)The tenant maximum file size.[optional] [example: 25000000]
maxTotalSizeLong (int64)The tenant maximum total size.[optional] [example: 25000000000]
countUserInteger (int32)The number of portal users.[optional] [example: 100]
countRoomAdminInteger (int32)The number of portal room administrators.[optional] [example: 10]
usersInRoomInteger (int32)The number of room users.[optional] [example: 50]
countRoomInteger (int32)The number of rooms.[optional] [example: 500]
nonProfitBooleanSpecifies if the tenant quota is nonprofit or not.[optional] [example: false]
trialBooleanSpecifies if the tenant quota is trial or not.[optional] [example: false]
freeBooleanSpecifies if the tenant quota is free or not.[optional] [example: false]
updateBooleanSpecifies if the tenant quota is updated or not.[optional] [example: false]
auditBooleanSpecifies if the audit trail is available or not.[optional] [example: true]
docsEditionBooleanSpecifies if ONLYOFFICE Docs is included in the tenant quota or not.[optional] [example: true]
ldapBooleanSpecifies if the LDAP settings are available or not.[optional] [example: true]
ssoBooleanSpecifies if the SSO settings are available or not.[optional] [example: true]
statisticBooleanSpecifies if the statistics settings are available or not.[optional] [example: true]
brandingBooleanSpecifies if the branding settings are available or not.[optional] [example: true]
customizationBooleanSpecifies if the customization settings are available or not.[optional] [example: true]
lifetimeBooleanSpecifies if the license has the lifetime settings or not.[optional] [example: false]
automationApiBooleanSpecifies if the Automation API is available or not.[optional] [example: true]
customBooleanSpecifies if the custom domain URL is available or not.[optional] [example: false]
restoreBooleanSpecifies if the restore is enabled or not.[optional] [example: true]
oauthBooleanSpecifies if Oauth is available or not.[optional] [example: true]
contentSearchBooleanSpecifies if the content search is available or not.[optional] [example: true]
thirdPartyBooleanSpecifies if the third-party accounts linking is available or not.[optional] [example: true]
yearBooleanSpecifies if the tenant quota is yearly subscription or not.[optional] [example: true]
countFreeBackupInteger (int32)The number of free backups within a month.[optional] [example: 1]
backupBooleanSpecifies if the backup enabled as a wallet service or not.[optional] [example: true]
countAIAgentInteger (int32)The number of AI agents.[optional] [example: 5]
aiToolsBooleanSpecifies if the AI tools enabled as a wallet service or not.[optional] [example: true]
aiSearchBooleanSpecifies if the AI search enabled as a wallet service or not.[optional] [example: true]
docsCloudInteger (int32)The number of Docs Connect users.[optional] [example: true]
docsCloudDevPackBooleanSpecifies if the Docs Connect Dev Pack enabled or not.[optional] [example: true]
docsCloudTrialBooleanSpecifies if the Docs Connect trial enabled or not.[optional] [example: true]

Model TenantQuotaFeatureDto​

One feature a quota switches on, with the limit it grants and how much of that limit is used.

NameTypeDescriptionNotes
idStringThe stable key of the feature - total_size, manager, room, backup and so on. It is the value to branch on, since title is prose in the portal language.[optional] [example: total_size] [nullable]
titleStringThe feature described in the portal language, with its limit already substituted into the sentence, so it can be printed as it is. It is empty when this build ships no wording for the feature.[optional] [example: Premium Storage] [nullable]
imageStringThe feature's icon as SVG markup to render inline - not a URL to fetch. It is filled in only when the quota comes from the catalogue, and left empty on the quota the portal is actually on, on a feature that this quota switches off, and on a feature that ships no icon.[optional] [example: <svg viewBox="0 0 24 24"><path d="..."/></svg>] [nullable]
valueoas_any_type_not_mapped[optional] [nullable]
typeStringHow to read value and used: size for bytes, count for a number of things, flag for a feature that is merely on or off.[optional] [example: size] [nullable]
usedFeatureUsedDtoHow much of the limit is already used. It is present only on the quota the portal is actually on, and only for a feature whose consumption is counted; a guest is shown none of these figures and a plain member only the one for total size, so an absent value can mean the caller may not see it rather than that nothing is used.[optional]
priceTitleStringWhat the feature is charged as, in the portal language - for instance the per-unit price of an add-on. It is filled in only for a feature that costs money on top of the plan.[optional] [example: $9.99/month] [nullable]

Model TenantQuotaSettings​

The tenant quota settings.

NameTypeDescriptionNotes
enableQuotaBooleanSpecifies if the tenant quota is enabled or not.[optional] [example: true]
quotaLong (int64)The tenant quota.[optional] [example: 10737418240]
lastRecalculateDateDate (date-time)The date of the last tenant quota recalculation.[optional] [example: 1990-01-01T00:00:00Z] [nullable]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantQuotaSettingsRequestsDto​

The storage limit set on one tenant of a self-hosted installation.

NameTypeDescriptionNotes
tenantIdInteger (int32)The tenant the limit applies to, by tenant ID. Only a self-hosted installation has more than one, which is why the operation is refused on SaaS.[required] [example: 1]
quotaLong (int64)The limit in bytes. A negative value is not a smaller limit but the absence of one: it removes whatever limit the tenant had. The value is a ceiling on stored data and says nothing about how much of it is already used.[optional] [example: 1048576]

Model TenantQuotaSettingsWrapper​

The successful API response containing the TenantQuotaSettings object.

NameTypeDescriptionNotes
responseTenantQuotaSettingsThe TenantQuotaSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantQuotaWrapper​

The successful API response containing the TenantQuota object.

NameTypeDescriptionNotes
responseTenantQuotaThe TenantQuota object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantRoomQuotaSettings​

The room quota settings.

NameTypeDescriptionNotes
enableQuotaBooleanSpecifies if the quota is enabled for the tenant entity or not.[optional]
defaultQuotaLong (int64)The default quota of the tenant entity.[optional]
lastRecalculateDateDate (date-time)The date of the last quota recalculation.[optional]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional]

Model TenantRoomQuotaSettingsWrapper​

The successful API response containing the TenantRoomQuotaSettings object.

NameTypeDescriptionNotes
responseTenantRoomQuotaSettingsThe TenantRoomQuotaSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantStatus​

Possible values:

  • 0 — Active (Active)
  • 1 — Suspended (Suspended)
  • 2 — Remove pending (RemovePending)
  • 3 — Transfering (Transfering)
  • 4 — Restoring (Restoring)
  • 5 — Migrating (Migrating)
  • 6 — Encryption (Encryption)

Model TenantTrustedDomainsType​

Possible values:

  • 0 — None (None)
  • 1 — Custom (Custom)
  • 2 — All (All)

Model TenantUserInvitationSettingsDto​

Whether the portal currently lets anyone be invited into it, member and guest kept apart.

NameTypeDescriptionNotes
allowInvitingMembersBooleanWhether new members may be invited through the Contacts section. Switching it off stops new invitations from being created; links already handed out keep working and members already invited stay.[required] [example: true]
allowInvitingGuestsBooleanWhether every member, and not only an administrator, may invite an outside guest into a room. It is independent of allowInvitingMembers, and switching it off has the same forward-only effect.[required] [example: false]

Model TenantUserInvitationSettingsRequestDto​

Whether the portal still lets its members invite new members and new guests.

NameTypeDescriptionNotes
allowInvitingMembersBooleanWhether new DocSpace members may be invited through the Contacts section. Switching it off only stops new invitations being created; links already issued keep working and members already invited stay.[optional] [example: true]
allowInvitingGuestsBooleanWhether every DocSpace member, and not only an administrator, may invite external guests into rooms. Switching it off leaves the guests already invited in place.[optional] [example: false]

Model TenantUserInvitationSettingsWrapper​

The successful API response containing the TenantUserInvitationSettingsDto object.

NameTypeDescriptionNotes
responseTenantUserInvitationSettingsDtoThe TenantUserInvitationSettingsDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantUserQuotaSettings​

The user quota settings.

NameTypeDescriptionNotes
enableQuotaBooleanSpecifies if the quota is enabled for the tenant entity or not.[optional]
defaultQuotaLong (int64)The default quota of the tenant entity.[optional]
lastRecalculateDateDate (date-time)The date of the last quota recalculation.[optional]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional]

Model TenantUserQuotaSettingsWrapper​

The successful API response containing the TenantUserQuotaSettings object.

NameTypeDescriptionNotes
responseTenantUserQuotaSettingsThe TenantUserQuotaSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantWalletService​

Possible values:

  • -18 — AISearch (AISearch)
  • -16 — DocsCloudDevPack (DocsCloudDevPack)
  • -15 — DocsCloud (DocsCloud)
  • -14 — Admin (Admin)
  • -13 — AITools (AITools)
  • -12 — Backup (Backup)
  • -11 — Storage (Storage)

Model TenantWalletServiceSettings​

The wallet services settings.

NameTypeDescriptionNotes
enabledServicesListThe list of the enabled wallet services.[optional] [example: [-11, -12]] [enum: -18, -16, -15, -14, -13, -12, -11] [nullable]
lastModifiedDate (date-time)The date and time when the wallet services settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantWalletServiceSettingsWrapper​

The successful API response containing the TenantWalletServiceSettings object.

NameTypeDescriptionNotes
responseTenantWalletServiceSettingsThe TenantWalletServiceSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantWalletSettings​

The tenant wallet settings.

NameTypeDescriptionNotes
enabledBooleanSpecifies whether automatic top-up for the tenant wallet is enabled.[optional] [example: true]
minBalanceInteger (int32)The minimum wallet balance at which automatic top-up will be triggered. Must be between 5 and 1000.[optional] [example: 10] [min: 5] [max: 1000]
upToBalanceInteger (int32)The maximum wallet balance at which automatic top-up will be triggered. Must be between 6 and 5000.[optional] [example: 100] [min: 6] [max: 5000]
currencyStringThe three-character ISO 4217 currency symbol.[optional] [example: USD] [nullable]
lowBalanceThresholdInteger (int32)The wallet balance below which a low-balance notification is sent. Set internally, not user-configurable.[optional] [example: 1]
lowBalanceNotifiedBooleanSpecifies whether a low-balance notification has already been sent for the current dip below ASC.Core.Tenants.TenantWalletSettings.LowBalanceThreshold.[optional] [example: false]
lastModifiedDate (date-time)The date and time when the tenant wallet settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model TenantWalletSettingsResponseWrapper​

The successful API response containing the TenantWalletSettings object.

NameTypeDescriptionNotes
responseTenantWalletSettingsThe TenantWalletSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TenantWalletSettingsWrapper​

The wrapper for the tenant wallet settings.

NameTypeDescriptionNotes
settingsTenantWalletSettingsThe tenant wallet settings.[optional]

Model TenantWrapper​

The successful API response containing the TenantDto object.

NameTypeDescriptionNotes
responseTenantDtoThe TenantDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TfaAppCodeArrayWrapper​

The successful API response containing the list of TfaAppCodeDto objects.

NameTypeDescriptionNotes
responseListThe list of TfaAppCodeDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TfaAppCodeDto​

One backup code of the caller's authenticator credential.

NameTypeDescriptionNotes
isUsedBooleanWhether the code has already been spent. A spent code is kept in the list but is no longer accepted, so count the entries where this is false to know how many fallbacks remain.[optional] [example: true]
codeStringThe code itself, in the form it is typed at sign-in - six characters with the default configuration. It is stored encrypted and decrypted for this answer, so this is the one place a caller can read it.[optional] [example: 123456] [nullable]

Model TfaConfirmDataDto​

The confirmation link the caller has to follow to pass the two-factor step, and the cookie it depends on.

NameTypeDescriptionNotes
urlStringThe link to open. Its type shows which step it is: phone activation or phone authorization for the SMS method, and authenticator activation or re-verification for the application method. The whole body is empty when the portal requires no second factor of the caller.[optional] [example: https://example.com/confirm?type=TfaAuth&key=abc123] [nullable]
cookieNameStringThe name of the confirmation cookie the link is validated against. It is filled in only for the authenticator-application method; the SMS method returns url alone.[optional] [example: asc_confirm_key_TfaAuth] [nullable]
cookieValueStringThe value of that cookie. The call already set it on the response, so it is repeated here only for a client that does not keep cookies of its own; it is filled in under the same condition as cookieName, and a later call to this operation replaces it.[optional] [example: 1234567890.abcdef] [nullable]

Model TfaConfirmDataWrapper​

The successful API response containing the TfaConfirmDataDto object.

NameTypeDescriptionNotes
responseTfaConfirmDataDtoThe TfaConfirmDataDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TfaRequestsDto​

The portal two-factor policy: which method is in force, who must pass it, and from where it is waived.

NameTypeDescriptionNotes
typeTfaRequestsDtoTypeThe second factor the portal demands. The two methods are mutually exclusive, so switching one on switches the other off, and any value outside the defined set is read as switching TFA off rather than refused.[optional] [enum: 0, 1, 2]
idUUID (uuid)The account the request concerns, by portal user ID. Naming the portal owner is refused unless it is the caller's own account. Where an operation detaches an authenticator application, the empty GUID and the caller's own ID both mean the caller.[optional] [example: 00000000-0000-0000-0000-000000000000]
trustedIpsListThe list of IP addresses that bypass TFA verification. Each entry is a single address, an inclusive from-to range or a CIDR block. This is the whole list that is to hold afterwards, so send the addresses already trusted along with a new one; an entry that cannot be parsed fails the call with 400, and accounts named as mandatory still have to pass the challenge even from a trusted address.[optional] [example: [192.0.2.1, 198.51.100.1-198.51.100.20, 203.0.113.0/24]] [nullable]
mandatoryUsersList (uuid)The accounts that must pass the challenge whatever their address, by portal user ID. This is the whole list that is to hold afterwards - leaving it out clears it rather than keeping it - and naming the portal owner is refused unless the caller is the owner.[optional] [example: [00000000-0000-0000-0000-000000000000]] [nullable]
mandatoryGroupsList (uuid)The groups whose members must pass the challenge whatever their address, by group ID. This is the whole list that is to hold afterwards - leaving it out clears it rather than keeping it.[optional] [example: [00000000-0000-0000-0000-000000000000]] [nullable]

Model TfaRequestsDtoType​

Possible values:

  • 0 — None (None)
  • 1 — Sms (Sms)
  • 2 — App (App)

Model TfaSettingsArrayWrapper​

The successful API response containing the list of TfaSettingsDto objects.

NameTypeDescriptionNotes
responseListThe list of TfaSettingsDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TfaSettingsDto​

One two-factor authentication method the portal offers, with the portal-wide state of that method.

NameTypeDescriptionNotes
idStringWhich method this entry describes: sms for a code sent by text message, app for a code from an authenticator application. It is the value PUT api/2.0/settings/tfaapp takes as its type, and no other value ever appears here.[required] [example: app] [nullable]
titleStringThe label for the method in the portal language, meant for a button or a radio option. It is not stable enough to branch on - match id for that.[required] [example: Authenticator app] [nullable]
enabledBooleanWhether this method is the portal's current policy. At most one entry can have it set, and none has it while the portal challenges nobody. It says nothing about the caller's own account, which may be exempt through trustedIps or forced through mandatoryUsers.[required] [example: true]
availableBooleanWhether the method could be switched on at all. For sms it is false until the installation has a working SMS provider, so a method can be offered here and still be impossible to enable; for app it is always true.[required] [example: true]
trustedIpsListThe addresses that skip the challenge, each either a single address, a from-to pair or a CIDR range. It is empty when no address is exempt, which means every account is challenged.[optional] [example: [192.0.2.0/24]] [nullable]
mandatoryUsersList (uuid)The accounts that are challenged even from a trusted address, by user ID. Empty means the exemption in trustedIps holds for everyone.[optional] [example: [00000000-0000-0000-0000-000000000000]] [nullable]
mandatoryGroupsList (uuid)The groups whose members are challenged even from a trusted address, by group ID, with the same reading of an empty list as mandatoryUsers.[optional] [example: [00000000-0000-0000-0000-000000000000]] [nullable]

Model TfaSetupCodeDto​

The secret to enrol in an authenticator application, in both of the forms an application can take it.

NameTypeDescriptionNotes
accountStringThe label the authenticator application will list the credential under, which is the caller's own email address. It identifies the entry to a person, and no application checks it.[optional] [example: john.doe@onlyoffice.com] [nullable]
manualEntryKeyStringThe secret in the base32 form that is typed into an application by hand. It describes the very same credential as qrCodeSetupImageUrl, and repeating the call hands back the same value for the account until the credential is reset.[optional] [example: JBSWY3DPEHPK3PXP] [nullable]
qrCodeSetupImageUrlStringThe same secret as a scannable image, given as a data:image/png;base64, URL that can be rendered directly - it is not a link to fetch.[optional] [example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGMAAgAABAABiCEmiQAAAABJRU5ErkJggg==] [nullable]

Model TfaSetupCodeWrapper​

The successful API response containing the TfaSetupCodeDto object.

NameTypeDescriptionNotes
responseTfaSetupCodeDtoThe TfaSetupCodeDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TfaValidateRequestsDto​

The one-time code that completes a pending two-factor step, and how long the resulting sign-in lasts.

NameTypeDescriptionNotes
codeStringThe code to check - either one from the authenticator application or one of the account's unused backup codes, which is spent by the check. A wrong code is refused with 400 and counts against the portal login attempt limit.[required] [example: 123456] [nullable]
sessionBooleanWhether the sign-in that follows is tied to the browser session. When it is, the session ends with the browser rather than lasting for the portal session lifetime.[optional] [example: true]

Model TimeBound​

Represents the period the price is effective in.

NameTypeDescriptionNotes
startDateDate (date-time)The date and time when the period starts.[optional] [example: 2024-01-15T10:30:00Z]
endDateDate (date-time)The date and time when the period ends.[optional] [example: 2024-01-15T10:30:00Z] [nullable]

Model TimezonesRequestsArrayWrapper​

The successful API response containing the list of TimezonesRequestsDto objects.

NameTypeDescriptionNotes
responseListThe list of TimezonesRequestsDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model TimezonesRequestsDto​

One time zone the host offers, as its identifier and the label to show for it.

NameTypeDescriptionNotes
idStringThe IANA identifier of the time zone. This is the value the portal time zone is set to, so pass it on unchanged to PUT api/2.0/settings/timeandlanguage.[required] [example: America/New_York] [nullable]
displayNameStringThe label to show for the zone, carrying its UTC offset as it stood when the list was built. The offset is a snapshot rather than a rule, so a zone observing daylight saving reads differently at other times of the year; sort and match on id instead.[required] [example: (UTC-05:00) Eastern Time (US and Canada)] [nullable]

Model TopUpDepositRequestDto​

How much money is charged to the payment method on file and added to the portal wallet.

NameTypeDescriptionNotes
amountInteger (int32)The sum to charge, as a whole number of units of currency - 10 means ten dollars and not ten cents. The bounds are what one call may move, not what the wallet may hold, so a larger top-up is made of several calls.[optional] [example: 1] [min: 1] [max: 999999]
currencyStringThe currency the charge is made in, as an ISO 4217 code in upper case. It has to be one of the accounting currencies this installation supports, which GET api/2.0/portal/payment/accounting/currencies lists; any other code is refused with 400. The money lands on the wallet sub-account of that currency, so topping up in a second currency does not add to the first one.[optional] [example: USD] [minLength: 0] [maxLength: 3] [nullable]

Model TransactionInfo​

Represents information about the transaction applied to an account.

NameTypeDescriptionNotes
currencyStringThe three-character ISO 4217 currency symbol.[optional]
amountDouble (double)The amount in the specified currency.[optional]
dateDate (date-time)The date and time when the credit transaction occurred.[optional]

Model TurnOnAdminMessageSettingsRequestDto​

Whether the sign-in page offers the form for writing to the portal administrators.

NameTypeDescriptionNotes
turnOnBooleanWhether the form is offered. Switching it off hides the form for everybody and makes the operation that submits it refuse new messages; letters already sent are untouched.[optional] [example: true]

Model UnknownNullableWrapper​

The successful API response.

NameTypeDescriptionNotes
responseoas_any_type_not_mapped[optional] [nullable]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model UpcomingPaymentArrayWrapper​

The successful API response containing the list of UpcomingPaymentDto objects.

NameTypeDescriptionNotes
responseListThe list of UpcomingPaymentDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model UpcomingPaymentDto​

One charge the portal is going to be billed for at the start of the next period.

NameTypeDescriptionNotes
idInteger (int32)The quota that is going to be charged. When a switch to another quota is scheduled, this is the quota being switched to, so it can differ from what GET api/2.0/portal/tariff reports for today.[optional] [example: -11]
nameStringThe quota's stable key, which is the same identifier the wallet operations use for a service.[optional] [example: storage] [nullable]
titleStringThe quota name in the portal language, meant to be printed on an invoice preview.[optional] [example: Business plan] [nullable]
unitOfMeasureStringWhat quantity counts, in the portal language - seats, administrators, gigabytes. It is empty for a quota that is simply on or off.[optional] [example: admins] [nullable]
quantityInteger (int32)How much is going to be charged for, which is the quantity scheduled for the next period when one has been scheduled and today's quantity otherwise.[optional] [example: 100]
walletBooleanWhether the charge is paid out of the portal wallet rather than from the subscription.[optional] [example: true]
dueDateApiDateTimeWhen the charge falls due, in the portal time zone.[optional]
amountDouble (double)What the charge comes to: the unit price of the quota multiplied by quantity. Taxes are not part of it, and a quota with no price of its own is not listed at all rather than listed with a zero.[optional] [example: 14]
currencyStringThe currency amount is expressed in, as a three-letter ISO 4217 code. It follows the portal's billing account, so every entry of one answer carries the same code.[optional] [example: USD] [nullable]

Model UpdateWebhooksConfigRequestsDto​

The webhook subscription being changed, with the parameters it is to have afterwards.

NameTypeDescriptionNotes
nameStringThe label the subscription is listed under. It is for the administrator reading the list and is never sent to the target; it does not have to be unique.[required] [minLength: 0] [maxLength: 50]
uriStringThe address the portal posts the event payload to. It has to be an absolute http or https address outside the installation own network, and it is probed before anything is stored: it must answer a HEAD request with a success code, and a redirect does not count as one.[required] [minLength: 1]
secretKeyStringThe shared secret the payload signature is computed with, so the receiver can tell a genuine call from a forged one. It has to satisfy the portal password rules published by GET api/2.0/settings/security/password, and it is never echoed back by any operation. On an update an empty value keeps the secret already stored.[optional] [minLength: 0] [maxLength: 50]
enabledBooleanWhether the subscription delivers at all. While it is off the matching events are dropped rather than queued, so nothing from that period arrives once it is switched on again.[optional]
sslBooleanWhether the target certificate is verified. Setting it demands an https target with a valid certificate; leaving it off delivers without checking the certificate at all.[optional]
triggersWebhookTriggerThe events the subscription listens for, as a bitmask combining the flags; 0 subscribes to all of them. Take the flags the caller role is allowed to use from GET api/2.0/settings/webhook/triggers, since a flag beyond that set is refused with 400. A subscription still only fires for events its creator may see.[optional] [enum: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
targetIdStringThe single entity the subscription is narrowed to, by its identifier - a room or a file, for instance. Leaving it out delivers events about every entity the subscribed triggers cover.[optional] [minLength: 0] [maxLength: 255]
idInteger (int32)The subscription to act on, by the id that GET api/2.0/settings/webhook reports. It travels in the body rather than in the path, and an id that exists in no portal subscription answers 404.[required]

Model UsageSpaceStatItemArrayWrapper​

The successful API response containing the list of UsageSpaceStatItemDto objects.

NameTypeDescriptionNotes
responseListThe list of UsageSpaceStatItemDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model UsageSpaceStatItemDto​

The storage one category of a portal module occupies, in the form a statistics page prints it.

NameTypeDescriptionNotes
nameStringThe category name in the portal language, HTML-escaped and ready to be rendered as text. What a category stands for depends on the module asked about - for the Documents module it is a room type.[optional] [example: Collaboration rooms] [nullable]
iconStringThe path of the icon to render beside the name, relative to the portal address. It is empty for a category that ships no icon.[optional] [example: /images/icons/rooms.svg] [nullable]
disabledBooleanWhether the category is switched off for this portal. A disabled category still reports the space it occupies, so it is worth showing greyed out rather than dropping.[optional] [example: true]
sizeStringThe occupied space already formatted for display, with its unit and in the portal language - 0 Byte for an empty category. It is not a byte count and must not be parsed; the raw numbers live in the quota reported by GET api/2.0/portal/quota.[optional] [example: 1.5 GB] [nullable]
urlStringThe portal page that lists the contents of this category, relative to the portal address, so a statistics page can link through to it. It is empty for a category with no page of its own.[optional] [example: /rooms/shared] [nullable]

Model UserInfo​

The user information.

NameTypeDescriptionNotes
idUUID (uuid)The user ID.[optional] [example: 00000000-0000-0000-0000-000000000000]
firstNameStringThe user's first name.[optional] [example: John] [nullable]
lastNameStringThe user's last name.[optional] [example: Doe] [nullable]
userNameStringThe user username.[optional] [example: johndoe] [nullable]
birthDateDate (date-time)The user birthday.[optional] [example: 1990-01-01T00:00:00Z] [nullable]
sexBooleanThe user sex (male or female).[optional] [example: true] [nullable]
statusEmployeeStatusThe user status.[optional] [enum: 1, 2, 4, 5, 7]
activationStatusEmployeeActivationStatusThe user activation status.[optional] [enum: 0, 1, 2, 4]
terminatedDateDate (date-time)The date and time when the user account was terminated.[optional] [example: 2025-12-31T23:59:59Z] [nullable]
titleStringThe user title.[optional] [example: Manager] [nullable]
workFromDateDate (date-time)The user registration date.[optional] [example: 2020-01-15T00:00:00Z] [nullable]
emailString (email)The user email address.[optional] [example: john.doe@example.com] [nullable]
contactsStringThe list of user contacts in the string format.[optional] [example: skype:johndoe|telegram:@johndoe] [nullable]
contactsListListThe list of user contacts.[optional] [example: [skype:johndoe, telegram:@johndoe]] [nullable]
locationStringThe user location.[optional] [example: New York, USA] [nullable]
notesStringThe user notes.[optional] [example: Additional information about the user] [nullable]
removedBooleanSpecifies if the user account was removed or not.[optional] [example: false]
lastModifiedDate (date-time)The date and time when the user account was last modified.[optional] [example: 2025-02-08T10:30:00Z]
tenantIdInteger (int32)The tenant ID.[optional] [example: 1]
isActiveBooleanSpecifies if the user is active or not.[optional] [example: true]
cultureNameStringThe user culture code.[optional] [example: en-US] [nullable]
mobilePhoneStringThe user mobile phone.[optional] [example: +1234567890] [nullable]
mobilePhoneActivationStatusMobilePhoneActivationStatusThe user mobile phone activation status.[optional] [enum: 0, 1]
sidStringThe LDAP user identifier.[optional] [example: S-1-5-21-3623811015-3361044348-30300820-1013] [nullable]
ldapQoutaLong (int64)The LDAP user quota attribute.[optional] [example: 1073741824]
ssoNameIdStringThe SSO SAML user identifier.[optional] [example: johndoe@example.com] [nullable]
ssoSessionIdStringThe SSO SAML user session identifier.[optional] [example: _1a2b3c4d5e6f7g8h9i0j] [nullable]
createDateDate (date-time)The date and time when the user account was created.[optional] [example: 2020-01-15T00:00:00Z]
createdByUUID (uuid)The ID of the user who created the current user account.[optional] [example: 00000000-0000-0000-0000-000000000000] [nullable]
spamBooleanSpecifies if tips, updates and offers are allowed to be sent to the user or not.[optional] [example: false] [nullable]
checkActivationBooleanIndicates whether the activation status of the employee or recipient is unchecked or inactive. Depending on the context, this property evaluates the activation or eligibility status accordingly.[optional] [example: false]

Model UserInfoWrapper​

The successful API response containing the UserInfo object.

NameTypeDescriptionNotes
responseUserInfoThe UserInfo object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model ValidationResult​

Possible values:

  • 0 — Ok (Ok)
  • 1 — Invalid (Invalid)
  • 2 — Expired (Expired)
  • 3 — Tariff limit (TariffLimit)
  • 4 — User existed (UserExisted)
  • 5 — User excluded (UserExcluded)
  • 6 — Quota failed (QuotaFailed)

Model WalletQuantityRequestDto​

The wallet service being bought or scheduled, and the way its quantity is applied.

NameTypeDescriptionNotes
quantityMap (int32)The wallet service and the number of units of it, as a single pair. The key is the serviceName of a service from GET api/2.0/portal/payment/walletservices, and the value is read according to productQuantityType: the units to add, or the total the service is to have in the next period. Minimum quantities apply per service - disk storage starts at 100 units, the Docs Connect Dev Pack at 10, and the administrators may not be fewer than the portal already has. Exactly one pair is accepted, and a null or zero value cancels a change scheduled earlier rather than buying nothing.[required] [example: {admin=1}]
productQuantityTypeProductQuantityTypeHow the number in quantity is applied. Add buys the units straight away and charges them to the portal wallet, while Set charges nothing now and records the quantity the service is to have from the next period. Only these two are accepted here; Sub and Renew are refused with 400.[optional] [enum: 0, 1, 2, 3]

Model WalletServiceArrayWrapper​

The successful API response containing the list of WalletServiceDto objects.

NameTypeDescriptionNotes
responseListThe list of WalletServiceDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WalletServiceDto​

One service the portal can pay for out of its wallet: a quota sold per unit rather than per period.

NameTypeDescriptionNotes
idInteger (int32)The identifier of the quota, which is what the tariff reports as a quota id and what a purchase names. A negative value belongs to a built-in quota rather than one on the price list.[required]
titleStringThe quota name in the portal language, for printing rather than matching. It is empty when this build ships no wording for the quota, which is normal for a quota that is not on the public price list.[optional]
pricePriceDtoWhat the quota costs, in the currency resolved for the request. Its value is empty for a quota that is not sold for money, which is what free, trial and nonProfit describe.[required]
nonProfitBooleanWhether this is the non-profit quota, which is granted rather than bought. A portal on it cannot buy any other plan, so a catalogue asked for plans returns this one alone.[required]
freeBooleanWhether this is the free quota a portal falls back to when nothing is paid for. It has no end date and the tightest limits of any quota.[required]
trialBooleanWhether this is the trial quota, which grants the paid limits for a while and then expires. A trial is not extended by paying - a plan has to be bought instead.[required]
featuresListThe features the quota switches on, each with the limit it grants and, on the quota the portal is actually on, how much of that limit is already used. A feature that is absent is off, so the list is the whole truth about what the quota includes.[required]
usersQuotaTenantEntityQuotaSettingsThe per-member storage allowance an administrator has set on top of the quota, and whether it is applied at all. It describes the live portal rather than this quota, so every entry of a catalogue listing repeats the same values, and it is empty unless the portal is a server installation or its plan includes statistics.[optional]
roomsQuotaTenantEntityQuotaSettingsThe same kind of per-room storage override, filled in and read the same way as usersQuota.[optional]
aiAgentsQuotaTenantEntityQuotaSettingsThe same kind of per-agent storage override for AI agents, filled in and read the same way as usersQuota.[optional]
tenantCustomQuotaTenantQuotaSettingsThe storage allowance an administrator has set for the portal as a whole, which caps it below what the quota grants. Filled in under the same conditions as usersQuota.[optional]
dueDateDate (date-time)When the quota runs out, in UTC. It is empty on a quota from the catalogue, which has no date until it is bought, and on a quota that never expires.[optional]
innerServicesListThe variants of this service that are folded into it, so a client renders one card per group instead of one per variant. It is empty when the service has no variants, and always empty in the answer of GET api/2.0/portal/payment/walletservice, which looks one service up on its own.[optional] [nullable]
serviceNameStringThe stable key of the service, which is what the wallet operations take as their service argument and what the usage reports key their entries by.[optional] [nullable]

Model WalletServiceWrapper​

The successful API response containing the WalletServiceDto object.

NameTypeDescriptionNotes
responseWalletServiceDtoThe WalletServiceDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebItemSecurityRequestsDto​

The access rule stored for one portal module: whether it may be opened, and by whom.

NameTypeDescriptionNotes
idStringThe module the rule applies to, given as a GUID. A value that is not a GUID fails the request as invalid.[required] [example: 00000000-0000-0000-0000-000000000000] [nullable]
enabledBooleanWhether the module may be opened. It decides the outcome only while subjects names somebody: an empty subjects array is stored as access for everyone whatever this flag says.[optional] [example: true]
subjectsList (uuid)The users and groups the rule is stored for, given by their IDs. This is the whole allow-list that is to hold afterwards and not a list of additions - what was stored before is dropped. Leaving it out applies enabled to everyone and skips the audit trail entry, while sending it empty stores access for everyone.[optional] [example: [00000000-0000-0000-0000-000000000000]] [nullable]

Model WebItemsSecurityRequestsDto​

The modules switched on or off together, one entry per module.

NameTypeDescriptionNotes
itemsListThe modules to switch, each entry pairing a module GUID as its key with the new enabled flag as its value. A key that is not a GUID fails the whole request as invalid, and a module listed twice is applied once, from its first entry. No allow-list travels here: switching a product module on restores the users and groups it was last restricted to, and everything else is stored as a plain allow or deny for everyone.[optional] [example: [{key=00000000-0000-0000-0000-000000000000, value=true}]] [nullable]

Model WebPluginArrayWrapper​

The successful API response containing the list of WebPluginDto objects.

NameTypeDescriptionNotes
responseListThe list of WebPluginDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebPluginDto​

One web plugin available to the portal: its manifest, where to load it from, and the state the portal keeps.

NameTypeDescriptionNotes
nameStringThe plugin's manifest name, which is what every other operation of this group addresses it by and what makes it unique within the portal - an installation-wide plugin wins the name over a portal one.[required] [example: Example Plugin] [nullable]
versionStringThe plugin's own version from its manifest. The portal does not compare it against anything; it is there for a person to read.[required] [example: 1.0.0] [nullable]
minDocSpaceVersionStringThe oldest portal version the plugin declares it works with. It is a claim from the manifest and is not enforced, so a plugin can be loaded on an older portal and simply misbehave; compare it with the version of GET api/2.0/settings.[optional] [example: 12.0.0] [nullable]
descriptionStringThe plugin's description from its manifest, in the language the manifest was written in. The translations of it are in descriptionLocale.[required] [example: A plugin that provides additional functionality] [nullable]
licenseStringThe licence the plugin is published under, as its manifest states it. Nothing checks it.[required] [example: MIT] [nullable]
authorStringWho wrote the plugin, as its manifest states it - not the portal member who uploaded it, who is createBy.[required] [example: ONLYOFFICE] [nullable]
homePageStringThe plugin's own page, for a person to read more about it. It is empty when the manifest names none.[required] [example: https://example.com] [nullable]
pluginNameStringThe global the plugin registers itself under in the browser once its script has run, which is how a client reaches it. It is distinct from name, the identifier the portal uses.[required] [example: examplePlugin] [nullable]
scopesStringWhich parts of the interface the plugin hooks into, as one comma-separated string rather than a list.[required] [example: Files,Rooms] [nullable]
imageStringThe plugin's icon exactly as its manifest declares it, which is normally a file name inside the plugin's own package rather than an absolute address - resolve it against the directory url points into.[required] [example: icon.svg] [nullable]
createByEmployeeDtoThe portal member who uploaded the plugin. For a plugin that ships with the installation it is an empty profile, since no member put it there.[required]
createOnDate (date-time)When the plugin was uploaded. It stays at its zero value for a plugin that ships with the installation.[required] [example: 2024-01-15T10:30:00Z]
enabledBooleanWhether the portal loads the plugin. It is the state this portal stored, so an installation-wide plugin can be on for one portal and off for another.[required] [example: true]
systemBooleanWhether the plugin ships with the installation rather than having been uploaded here. A system plugin cannot be deleted through DELETE api/2.0/settings/webplugins/{name}, only switched off.[required] [example: false]
urlStringThe address of the plugin's script, which a client loads to run it. It ends in a hash query taken from version, so the address changes whenever the plugin is updated and an old one may be cached.[required] [example: https://example.com/plugin.js] [nullable]
cssUrlStringThe absolute address of the plugin's stylesheet, empty for a plugin that ships none.[required] [example: https://example.com/plugin.css] [nullable]
settingsStringThe settings string the portal keeps for the plugin, stored and returned verbatim - only the plugin knows its shape. It is empty until PUT api/2.0/settings/webplugins/{name} saves one.[required] [example: {"theme":"dark"}] [nullable]
nameLocaleMapThe plugin's name translated, keyed by culture name. A culture that is missing falls back to name, and the whole map is empty for a plugin that ships no translations.[optional] [example: {en-US=Example plugin, de-DE=Beispiel-Plugin}]
descriptionLocaleMapThe plugin's description translated, keyed the same way as nameLocale and falling back to description.[optional] [example: {en-US=Adds extra actions, de-DE=Fugt Aktionen hinzu}]
runtimeStringHow the script at url is to be loaded - as an ES module or as a classic script. It is empty for a plugin whose manifest does not say, which a client treats as a classic script.[optional] [example: module] [nullable]

Model WebPluginRequests​

The state the portal keeps for an installed web plugin: whether it runs, and its own settings blob.

NameTypeDescriptionNotes
enabledBooleanWhether the plugin runs in this portal. Switching it on adds the domains its manifest declares to the portal Content Security Policy and switching it off takes them away again; connected clients are told of the new state without a reload.[optional] [example: true]
settingsStringThe configuration the plugin reads at run time, as a JSON document serialised into a string. Its shape is defined by the plugin and not by the portal, which stores it encrypted for this portal alone. It replaces whatever was stored rather than merging into it, so send {} when there is nothing to keep.[required] [example: {"theme":"dark","autoSave":true}] [minLength: 0] [maxLength: 255] [nullable]

Model WebPluginWrapper​

The successful API response containing the WebPluginDto object.

NameTypeDescriptionNotes
responseWebPluginDtoThe WebPluginDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebhookGroupStatus​

Possible values:

  • 0 — None (None)
  • 1 — Not sent (NotSent)
  • 2 — Status2xx (Status2xx)
  • 4 — Status3xx (Status3xx)
  • 8 — Status4xx (Status4xx)
  • 16 — Status5xx (Status5xx)

Model WebhookRetryRequestsDto​

Which past webhook deliveries are sent again.

NameTypeDescriptionNotes
idsList (int32)The delivery records to send again, by the identifiers GET api/2.0/settings/webhooks/log reports. An identifier that exists nowhere, and one belonging to another member subscription when the caller is not a DocSpace administrator, is skipped in silence rather than failing the call, so compare the number of records that come back against the number sent. An empty list is accepted and queues nothing.[optional] [example: [1, 2, 3]] [nullable]

Model WebhookTrigger​

Possible values:

  • 0 — *
  • 1 — user.created
  • 2 — user.invited
  • 4 — user.updated
  • 8 — user.deleted
  • 16 — group.created
  • 32 — group.updated
  • 64 — group.deleted
  • 128 — file.created
  • 256 — file.uploaded
  • 512 — file.updated
  • 1024 — file.trashed
  • 2048 — file.deleted
  • 4096 — file.restored
  • 8192 — file.copied
  • 16384 — file.moved
  • 32768 — folder.created
  • 65536 — folder.updated
  • 131072 — folder.trashed
  • 262144 — folder.deleted
  • 524288 — folder.restored
  • 1048576 — folder.copied
  • 2097152 — folder.moved
  • 4194304 — room.created
  • 8388608 — room.updated
  • 16777216 — room.archived
  • 33554432 — room.deleted
  • 67108864 — room.restored
  • 134217728 — room.copied
  • 268435456 — form.submit
  • 536870912 — form.filled.out
  • 1073741824 — form.stopped

Model WebhookTriggerArrayWrapper​

The successful API response containing the list of WebhookTriggerDto objects.

NameTypeDescriptionNotes
responseListThe list of WebhookTriggerDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebhookTriggerDto​

One event a webhook can listen to, with the bit that selects it and whether the caller may subscribe to it.

NameTypeDescriptionNotes
nameStringThe event name exactly as it appears in a delivered payload, so a receiver can match on it. The entry named * is not an event but the catch-all.[optional] [example: file.created] [nullable]
idLong (int64)The bit that stands for this event in the triggers bitmask of a subscription. Add the bits of the wanted events together; the catch-all entry has the value 0 and is used on its own rather than added to anything.[optional] [example: 128]
availableBooleanWhether the caller's own role may subscribe to this event - a plain member cannot subscribe to user, group or room creation, where a room administrator can. An unavailable event is listed all the same, and sending its bit to POST api/2.0/settings/webhook is refused as an invalid request.[optional] [example: true]

Model WebhooksConfigDto​

One webhook subscription of the portal: where deliveries go, which events they cover, and how they have fared.

NameTypeDescriptionNotes
idInteger (int32)The identifier of the subscription, which is what PUT api/2.0/settings/webhook, DELETE api/2.0/settings/webhook/{id} and the configId filter of the delivery log address it by.[required] [example: 1]
nameStringThe label the subscription was given, free text with no meaning to the portal.[optional] [example: Room activity] [nullable]
uriStringThe address every delivery is posted to. The signing secret that lets the receiver verify a delivery is never part of this answer, so it has to be kept from the moment the subscription was created.[optional] [example: https://example.com/hooks/docspace] [nullable]
enabledBooleanWhether the subscription is delivering. While it is false events are dropped rather than queued, so nothing arrives late after it is switched back on.[optional] [example: true]
sslBooleanWhether the certificate of uri is verified before a delivery. While it is false a self-signed certificate is accepted as well.[optional] [example: true]
triggersWebhookTriggerThe events the subscription covers, as the bits of GET api/2.0/settings/webhook/triggers added together. 0 is the catch-all and means every event, not none.[optional] [enum: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
targetIdStringThe single room or file the subscription is narrowed to, empty for a subscription that covers the whole portal. It is kept as an opaque value, so both a numeric and a third-party identifier can appear.[optional] [example: 00000000-0000-0000-0000-000000000001] [nullable]
createdByEmployeeDtoThe member who created the subscription, which is also who a non-administrator is limited to seeing. It is empty for a subscription created by a portal background job.[optional]
createdOnDate (date-time)When the subscription was created, in the portal time zone.[optional] [example: 2024-01-15T10:30:00Z] [nullable]
modifiedByEmployeeDtoThe member who last changed the subscription, empty while nobody has changed it since it was created.[optional]
modifiedOnDate (date-time)When it was last changed, in the portal time zone, and empty under the same condition as modifiedBy.[optional] [example: 2024-01-15T10:30:00Z] [nullable]
lastFailureOnDate (date-time)When a delivery last failed, in the portal time zone. It is empty for a subscription that has never failed, and it is not cleared by a later success - compare it with lastSuccessOn to see which came last.[optional] [example: 2024-01-15T10:30:00Z] [nullable]
lastFailureContentStringWhat the target answered on that failure, truncated, for diagnosing without opening the delivery log. It is empty when the failure produced no body at all, a timeout for instance.[optional] [example: 502 Bad Gateway] [nullable]
lastSuccessOnDate (date-time)When a delivery last succeeded, in the portal time zone, empty for a subscription that has never delivered. Both this and lastFailureOn being empty means nothing has been attempted yet.[optional] [example: 2024-01-15T10:30:00Z] [nullable]

Model WebhooksConfigWithStatusArrayWrapper​

The successful API response containing the list of WebhooksConfigWithStatusDto objects.

NameTypeDescriptionNotes
responseListThe list of WebhooksConfigWithStatusDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebhooksConfigWithStatusDto​

A webhook subscription together with how its last delivery ended.

NameTypeDescriptionNotes
configsWebhooksConfigDtoThe subscription itself. Despite the plural name it is one subscription, not a list.[optional]
statusInteger (int32)The HTTP status code the target answered on the last attempt. 0 means nothing has been delivered yet, which is not the same as a failure.[optional] [example: 200]

Model WebhooksConfigWrapper​

The successful API response containing the WebhooksConfigDto object.

NameTypeDescriptionNotes
responseWebhooksConfigDtoThe WebhooksConfigDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebhooksLogArrayWrapper​

The successful API response containing the list of WebhooksLogDto objects.

NameTypeDescriptionNotes
responseListThe list of WebhooksLogDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WebhooksLogDto​

One delivery attempt of a webhook: what was sent where, and what came back.

NameTypeDescriptionNotes
idInteger (int32)The identifier of this attempt, which is what the eventId filter of GET api/2.0/settings/webhooks/log picks one record by and what PUT api/2.0/settings/webhook/{id}/retry re-sends. A retry produces a new record with a new identifier and leaves this one as it is.[required] [example: 1]
configNameStringThe name of the subscription the attempt belongs to. It is the name as it stands now, so it follows a later rename of the subscription rather than recording what it was called at the time.[optional] [example: Room activity] [nullable]
triggerWebhookTriggerThe event that caused the attempt, as a single bit rather than a mask - a delivery is always for one event, even though a subscription covers several.[optional] [enum: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]
creationTimeDate (date-time)When the attempt was queued, as a UTC instant - unlike the dates of the subscription itself, which come in the portal time zone. Records come back newest first by this moment.[optional] [example: 2024-01-15T10:30:00Z]
methodStringThe HTTP method the delivery was sent with, which is POST for every webhook the portal sends.[optional] [example: POST] [nullable]
routeStringThe address the delivery was sent to, which is the subscription's URL as it stood at the time - so an older record can name an address the subscription no longer uses.[optional] [example: https://example.com/hooks/docspace] [nullable]
requestHeadersStringThe headers the portal sent, serialised as one string, including the signature header a receiver verifies the payload with.[optional] [example: {"x-docspace-signature":"9f86d081884c7d65"}] [nullable]
requestPayloadStringThe body the portal sent, which is the event payload as JSON text. It is stored as it was sent, so it still describes the entity as it looked at the time of the event.[optional] [example: {"id":42,"title":"report.docx"}] [nullable]
responseHeadersStringThe headers the target answered with, serialised the same way as requestHeaders. It is empty while the attempt is still on its way and on an attempt that never reached the target.[optional] [example: {"content-type":"application/json"}] [nullable]
responsePayloadStringThe body the target answered with, truncated for storage. Empty under the same conditions as responseHeaders, and also for a target that answers with no body at all.[optional] [example: {"ok":true}] [nullable]
statusInteger (int32)The HTTP status code the target answered. It is 0 while the attempt is still on its way and on one that never reached the target, so 0 is not a failure code - it is the absence of an answer.[optional] [example: 200]
deliveryDate (date-time)When the answer came back, as a UTC instant like creationTime. It is empty while the attempt is still on its way, which together with status is how a pending record is told from a finished one.[optional] [example: 2024-01-15T10:30:00Z] [nullable]

Model WebhooksLogWrapper​

The successful API response containing the WebhooksLogDto object.

NameTypeDescriptionNotes
responseWebhooksLogDtoThe WebhooksLogDto object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WhiteLabelItemArrayWrapper​

The successful API response containing the list of WhiteLabelItemDto objects.

NameTypeDescriptionNotes
responseListThe list of WhiteLabelItemDto objects returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model WhiteLabelItemDto​

One branding logo slot of the portal: the size it is drawn at, and where its images are served from.

NameTypeDescriptionNotes
typeWhiteLabelLogoTypeWhich branding slot this entry describes. Notification is part of the type but never appears here: that logo is derived from the login-page one and used only in letters.[optional] [enum: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
nameStringThe stable name of the same slot, which is what GET api/2.0/settings/whitelabel/logos/isdefault keys its entries by. It is a name to match on, not a file name.[optional] [example: LightSmall] [nullable]
sizeWhiteLabelItemSizeDtoThe pixel box the slot is drawn in. Only width and height carry information here; the resize flags and offsets alongside them are left at their defaults and say nothing about how an uploaded image is treated.[optional]
pathWhiteLabelItemPathDtoThe absolute URLs to render the slot from, one per theme.[optional]

Model WhiteLabelItemPathDto​

The image URLs of one logo slot, per interface theme.

NameTypeDescriptionNotes
lightStringThe absolute URL of the image to render on a light background. It is filled in unless the request asked for the dark theme alone with isDark=true, in which case only dark comes back.[optional] [example: /images/logo-light.png] [nullable]
darkStringThe absolute URL of the image to render on a dark background. When both themes are asked for it comes back empty for a slot that has no separate dark image, meaning the light one is to be used for both; when isDark=false was passed it is left out entirely.[optional] [example: /images/logo-dark.png] [nullable]

Model WhiteLabelItemSizeDto​

The pixel box a logo slot is drawn in, in the shape the imaging library reports a geometry.

NameTypeDescriptionNotes
aspectRatioBooleanWhether the numbers are to be read as an aspect ratio rather than as pixels. Always false on the sizes this API reports.[optional] [example: false]
fillAreaBooleanWhether an image would be scaled to cover the box rather than to fit inside it. Always false here.[optional] [example: false]
greaterBooleanWhether scaling would apply only to an image larger than the box. Always false here.[optional] [example: false]
heightInteger (int32)The height of the box in pixels - one of the two fields of this object that carry information.[optional] [example: 48]
ignoreAspectRatioBooleanWhether scaling would be allowed to distort the image. Always false here.[optional] [example: false]
isPercentageBooleanWhether width and height are to be read as percentages. Always false here, so both are pixels.[optional] [example: false]
lessBooleanWhether scaling would apply only to an image smaller than the box. Always false here.[optional] [example: false]
limitPixelsBooleanWhether the box is to be read as a total pixel-area budget instead of as two dimensions. Always false here.[optional] [example: false]
widthInteger (int32)The width of the box in pixels - the other field of this object that carries information.[optional] [example: 422]
xInteger (int32)The horizontal offset of the box from the origin. Always 0 here.[optional] [example: 0]
yInteger (int32)The vertical offset of the box from the origin. Always 0 here.[optional] [example: 0]

Model WhiteLabelLogoType​

Possible values:

  • 1 — Light small (LightSmall)
  • 2 — Login page (LoginPage)
  • 3 — Favicon (Favicon)
  • 4 — Docs editor (DocsEditor)
  • 5 — Docs editor embed (DocsEditorEmbed)
  • 6 — Left menu (LeftMenu)
  • 7 — About page (AboutPage)
  • 8 — Notification (Notification)
  • 9 — Spreadsheet editor (SpreadsheetEditor)
  • 10 — Spreadsheet editor embed (SpreadsheetEditorEmbed)
  • 11 — Presentation editor (PresentationEditor)
  • 12 — Presentation editor embed (PresentationEditorEmbed)
  • 13 — Pdf editor (PdfEditor)
  • 14 — Pdf editor embed (PdfEditorEmbed)
  • 15 — Diagram editor (DiagramEditor)
  • 16 — Diagram editor embed (DiagramEditorEmbed)

Model WhiteLabelRequestsDto​

The branding a portal is given: the wordmark, the logo images, or both.

NameTypeDescriptionNotes
logoTextStringThe wordmark printed next to or instead of a logo image, on the login page, in the editors and in notification letters. An empty or blank value, and the built-in ONLYOFFICE itself, clear the setting rather than store it. The text is not rendered into the logo images, which carry their own wordmark.[optional] [example: Company Name] [minLength: 0] [maxLength: 40] [nullable]
logoListThe logo images to store, each entry naming a logo slot in its key - the numeric type published by GET api/2.0/settings/whitelabel/logos - and carrying the two theme images in its value. A slot left out of the list keeps the image it has, so this is a partial update rather than a replacement of the whole branding. Saving the login-page slot also rebuilds the notification logo from it.[optional] [example: [item1, item2]] [nullable]

Model WizardRequestsDto​

What the initial setup wizard needs to finish a new portal: the owner credentials and the portal locale.

NameTypeDescriptionNotes
emailString (email)The address the portal owner account is created with, which is also the address every administrative letter goes to afterwards. It has to be a well-formed email address; a malformed one leaves the wizard unfinished.[required] [example: user@example.com] [nullable]
passwordHashStringThe owner password, already hashed in the client rather than sent in the clear. Hash it with the salt, iteration count and hash size that GET api/2.0/settings?withpassword=true publishes, so the portal can recognise it later; an empty value leaves the wizard unfinished.[required] [example: 2DYmIoA/aYKEksFocEf6uw==] [nullable]
lngStringThe portal interface language, as a culture name such as en-US. It has to be one of the cultures enabled for the installation, and an unknown one leaves the shipped default in place instead of failing the wizard.[optional] [example: en-US] [nullable]
timeZoneStringThe time zone every portal date is rendered in, as an IANA identifier such as Europe/Riga. A value that matches nothing falls back to UTC rather than failing the wizard.[optional] [example: UTC] [nullable]
amiIdStringThe identifier of the Amazon Machine Image the portal was launched from, for an installation started from an AWS image. It is recorded for the installation record only and changes nothing about the portal; leave it out anywhere else.[optional] [example: 00000000-0000-0000-0000-000000000001] [nullable]
subscribeFromSiteBooleanWhether the owner agrees to receive product news at the address in email. It is a mailing consent and has no bearing on the portal notifications, which are subscribed separately.[optional] [example: true]

Model WizardSettings​

The Wizard settings.

NameTypeDescriptionNotes
completedBooleanSpecifies if the Wizard settings are completed or not[optional] [example: true]
lastModifiedDate (date-time)The timestamp indicating when the settings were last modified.[optional] [example: 1990-01-01T00:00:00Z]

Model WizardSettingsWrapper​

The successful API response containing the WizardSettings object.

NameTypeDescriptionNotes
responseWizardSettingsThe WizardSettings object returned by the operation.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]

Model getPortalPrices 200 response​

The successful API response.

NameTypeDescriptionNotes
responseMap (double)The response payload.[optional]
countInteger (int32)The total number of items in the response[optional]
linksListList of links related to the response[optional]
statusInteger (int32)HTTP status code of the response[optional]
statusCodeInteger (int32)HTTP status code of the response (duplicate of status)[optional]
NameTypeDescriptionNotes
hrefStringURL of the link[optional]
actionStringAction associated with the link[optional]

Authorization​

cookieAuth​

  • Type: API key
  • API key parameter name: asc_auth_key
  • Location:

bearerAuth​

  • Type: HTTP Bearer Token authentication

asc_auth_key​

  • Type: API key
  • API key parameter name: asc_auth_key
  • Location:

Basic​

  • Type: HTTP basic authentication

Bearer​

  • Type: HTTP Bearer Token authentication (JWT)

ApiKeyBearer​

  • Type: API key
  • API key parameter name: ApiKeyBearer
  • Location: HTTP header

OAuth2​

  • Type: OAuth
  • Flow: accessCode
  • Authorization URL:
  • Scopes:
    • read: Read access to protected resources
    • write: Write access to protected resources

OpenId​

x-signature​

  • Type: API key
  • API key parameter name: x-signature
  • Location: