Moleant Discover API
REST interface for the Moleant Discover platform: organizations, systems, servers, Active Directory,
SBOM/VEX artifacts, Microsoft 365 licenses, and account lifecycle. This reference was regenerated
directly from the 101 live endpoint handlers in discover/*/index.php and
account/*/index.php — every path, HTTP method, and body field below reflects what the
code actually does, not an idealized spec.
⚠ Known issue
POST /account/OffBoardAccount currently calls Plan::OnBoardAccount() instead
of an off-boarding method (confirmed in account/OffBoardAccount/index.php) — almost
certainly a copy/paste leftover from OnBoardAccount. The endpoint does not actually
off-board an account today. Documented here as a known defect, not intended behavior.
🔑 Authentication
There is no Authorization header. Every endpoint is a
POST with a JSON body read via php://input, and the credential travels
as a field inside that same JSON body:
POST /discover/<Endpoint>
Content-Type: application/json
{ "jwt": "<JWT>", "CGuid": "...", ... }
Most endpoints authenticate with a user session JWT in a field named
jwt, validated against a shared secret and carrying an id/email
claim used for permission checks against the customer identified by CGuid.
A small subset — the Active Directory data-push endpoints
(ADCheckUpdateAllowed, ADUpdateDomainControllers, ADUpdateDomainData,
ADUpdateDomainStatistics, ADUpdateDomainUserData, ADUpdateForestData)
and createserver — use a field named token instead of jwt.
These are agent/scanner-facing endpoints (an installed on-prem discovery agent pushing inventory data),
not interactive user session calls, and use a separate token scheme.
discover/AcceptOrder is the exception: it's a Stripe webhook receiver (see the Discover
Orders section) and carries no jwt/token field at all — it reads
Stripe's own event payload shape.
↩ Response Envelope
{ "result" : "TRUE" | "FALSE", // string, not boolean "message" : "<status text, or a JSON-encoded payload string on success>" }
On success, message is often itself a hand-built JSON string (not a nested object) that
the endpoint echos directly back to the client. On failure the HTTP status is usually
400 and message carries a human-readable reason. This envelope shape is
built ad hoc per endpoint rather than by shared middleware, so treat it as the common case, not a
strict guarantee for every path.
/discover/ Endpoints
# Organizations
POST/discover/AddOrganizationOrganization::AddOrganization
jwtCGuidCustomerNameCustomerShortName
POST/discover/DeleteOrganizationOrganization::DeleteOrganization
jwtCGuid
POST/discover/ListOrganizationsOrganization::ListOrganizations
jwt
POST/discover/ListOrganizationDetailsOrganization::ListOrganizationDetails
jwtCGuid
POST/discover/ModifyOrganizationDetailsOrganization::ModifyOrganizationDetails
jwtCGuidCustomerNameCustomerShortNameDescriptionHQAddress
POST/discover/AddOrganizationKBsOrganization::AddOrganizationKBs
jwtCGuidFilenameDescriptionFileData (base64)
POST/discover/DeleteOrganizationKBsOrganization::DeleteOrganizationKBs
jwtCGuidguid
POST/discover/ListOrganizationKBsOrganization::ListOrganizationKBs
jwtCGuid
POST/discover/ModifyOrganizationKBsOrganization::ModifyOrganizationKBs
jwtCGuidguidDescription
# Systems
POST/discover/AddSystemSystem::AddSystem
jwtCGuidSystemNamePOST/discover/DeleteSystemSystem::DeleteSystem
jwtCGuidSystemIDPOST/discover/ListSystemsOrganization::ListSystems
jwtCGuidComputerSoftwareCountCreateTotalCountIncludeDetailsIncludeOrgNameOrganizationsSearchServerIDSkipSystemIDUserIDissueNoPOST/discover/ListSystemDetailsSystem::ListSystemDetails
jwtCGuidSystemIDPOST/discover/ModifySystemDetailsSystem::ModifySystemDetails
jwtCGuidSystemIDDescriptionHostnameOtherPOST/discover/ListSystemsForReportOrganization::ListSystemsForReport
jwtCGuidComputerSoftwareCountCreateTotalCountIncludeDetailsIncludeOrgNameOrganizationsSearchServerIDSkipSystemIDUserIDissueNoPOST/discover/ListSystemsForServerServer::ListSystemsForServer
jwtCGuidServerIDServerListSystemIDPOST/discover/AddSystemKBsSystem::AddSystemKBs
jwtCGuidSystemIDFilenameDescriptionFileData (base64)POST/discover/DeleteSystemKBsBlobStore::DeleteSystemKBs
jwtCGuidSystemIDguidPOST/discover/ListSystemKBsBlobStore::ListSystemKBs
jwtCGuidSystemIDPOST/discover/ModifySystemKBsSystem::ModifySystemKBs
jwtCGuidSystemIDguidDescriptionPOST/discover/AddSystemLicenseSystem::AddSystemLicense
jwtCGuidSystemIDLicModelLicNameLicKeyLicExpPOST/discover/DeleteSystemLicenseSystem::DeleteSystemLicense
jwtCGuidguidPOST/discover/ListSystemLicensesSystem::ListSystemLicenses
jwtCGuidSystemIDPOST/discover/ModifySystemLicenseSystem::ModifySystemLicense
jwtCGuidSystemIDguidLicModelLicNameLicKeyLicExpPOST/discover/ListSystemLicenseTypesSystem::ListSystemLicenseTypes
jwtCGuidSystemIDPOST/discover/ListSystemLogTypesSystem::ListSystemLogTypes
jwtCGuidSystemID# Servers
POST/discover/createserverServer::createserver
tokenServerGuidHostnameDomainSuffixSerialNumberSystemTypeOperatingSystemRolesVendorNICSStaticRoutesWindowsTypeWindowsMemberShipListeningPortsLocalUsersLocalGroupsWindowsServicesInstalledApplicationsMemoryDisksCertificatesLastLoggedinSharesCPUDateRebootedDateCreated
token, not jwt) — this is how an installed discovery agent registers/updates a server asset.POST/discover/DeleteServerServer::DeleteServer
jwtCGuidServerIDPOST/discover/ListServerDetailsServer::ListServerDetails
jwtCGuidServerIDServerDetailBasicServerDetailHardwareServerDetailCPUServerDetailMemoryServerDetailStorageServerDetailNetworkServerDetailApplicationsServerDetailSoftwareServerDetailServicesServerDetailRolesServerDetailGroupsServerDetailLoginsServerDetailSharesServerDetailListeningPortsServerDetailCertificatesServerDetailCardServerDetailPrimaryUser
ServerDetail* flags select which detail blocks to include in the response.POST/discover/ListServersInSystemSystem::ListServersInSystem
jwtCGuidSystemIDServerIDServerListPOST/discover/ModifyServerDetailsServer::ModifyServerDetails
jwtCGuidServerIDDescriptionPrimaryUserEnvironmentAssetStateDomainPOST/discover/DeleteServerKBsBlobStore::DeleteServerKBs
jwtCGuidServerIDguidPOST/discover/ModifyServerKBsBlobstore::ModifyServerKBs
jwtCGuidServerIDguidDescriptionPOST/discover/AddServerToSystemSystem::AddServerToSystem
jwtCGuidSystemIDServerIDPOST/discover/RemoveServerFromSystemSystem::RemoveServerFromSystem
jwtCGuidSystemIDServerIDPOST/discover/AddSystemToServerServer::AddSystemToServer
jwtCGuidServerIDSystemIDPOST/discover/RemoveSystemFromServerServer::RemoveSystemFromServer
jwtCGuidServerIDSystemID# Users & Permissions
POST/discover/AddUserUser::AddUser
jwtCGuidSystemIDLogAuthorLogDescriptionLogTypeLogdatePOST/discover/DeleteUserAdministration::DeleteUser
jwtCGuidEmailModePOST/discover/InviteUserAdministration::InviteUser
jwtCGuidEmailFirstNameLastNameModePOST/discover/ListUsersOrganization::ListUsers
jwtCGuidComputerSoftwareCountCreateTotalCountOrganizationsSearchServerIDSkipSystemIDUserIDUserTypeissueNoPOST/discover/ModifyPermissionAdministration::ModifyPermission
jwtCGuidUserIDReadWriteAdminOrgAdminPlanOwnerReadPasswordWritePasswordPOST/discover/AddCoAdminAdministration::AddCoAdmin
jwtSubjectPOST/discover/DeleteCoAdminAdministration::DeleteCoAdmin
jwtSubjectPOST/discover/ListCoAdminsAdministration::ListCoAdmins
jwtSubjectUserlist# Active Directory
POST/discover/ADCheckUpdateAllowedActiveDirectory::ADCheckUpdateAllowed
tokenCGuidServerGuidDomainObjectGUIDDomainDNSRootForestDNSRootForestObjectGUIDPOST/discover/ADListDomainDataActiveDirectory::ADListDomainData
jwtCGuidDomainDNSRootDomainObjectGUIDPOST/discover/ADSearchUserActiveDirectory::ADSearchUser
jwtCGuidDomainSearchPOST/discover/ADUpdateDomainControllersActiveDirectory::ADUpdateDomainControllers
tokenCGuidDomainControllersPOST/discover/ADUpdateDomainDataActiveDirectory::ADUpdateDomainData
tokenCGuidServerGuidDNSRootDomainObjectGUIDDomainSIDForestDistinguishedNameNetBIOSNameDomainModeParentDomainObjectClassManagedByInfrastructureMasterPDCEmulatorRIDMasterSubordinateReferencesReplicaDirectoryServersReadOnlyReplicaDirectoryServersAllowedDNSSuffixesChildDomainsComputersContainerUsersContainerSystemsContainerDomainControllersContainerDeletedObjectsContainerForeignSecurityPrincipalsContainerLostAndFoundContainerQuotasContainerLinkedGroupPolicyObjectsLastLogonReplicationIntervalPublicKeyRequiredPasswordRolling
POST/discover/ADUpdateDomainStatisticsActiveDirectory::ADUpdateDomainStatistics
tokenServerGuidDomainDNSRootDomainObjectGUIDForestDNSRootForestObjectGUIDUsersComputersGroupsServersWorkstationsDisabledUsersDisabledComputersInactiveUsersExpiredUsersLockedOutUsersPasswordExpiredUsersLastUpdatedPrimaryUpdateServer
POST/discover/ADUpdateDomainUserDataActiveDirectory::ADUpdateDomainUserData
tokenCGuidServerGuidDNSRootDomainObjectGUIDDomainUsersUserUpdateSessionPOST/discover/ADUpdateForestDataActiveDirectory::ADUpdateForestData
tokenCGuidServerGuidNameForestDNSRootForestModeDomainsGlobalCatalogsDomainNamingMasterSchemaMasterSitesSPNSuffixesUPNSuffixesPartitionsContainerApplicationPartitionsCrossForestReferences
# Assets, Software & Attributes
POST/discover/ListAssetsOrganization::ListAssets
jwtCGuidComputerSoftwareCountCreateTotalCountIncludeDetailsIncludeOrgNameOrganizationsSearchServerIDSkipSystemIDUserIDissueNoPOST/discover/ListComputersOrganization::ListComputers
jwtCGuidComputerSoftwareCountCreateTotalCountIncludeDetailsSearchServerIDSkipSystemIDUserIDissueNoPOST/discover/ListSoftwareOrganization::ListSoftware
jwtCGuidComputerSoftwareCountCreateTotalCountOrganizationsSearchServerIDSkipStackSoftwareSystemIDUserIDissueNoPOST/discover/ListIssuesOrganization::ListIssues
jwtCGuidComputerSoftwareCountCreateTotalCountOrganizationsSearchServerIDSkipSystemIDUserIDissueNoPOST/discover/AddAttributeAttributes::AddAttributes
jwtCGuidNameTypeCardTypeOrgIDSystemIDServerIDPOST/discover/DeleteAttributeAttributes::DeleteAttribute
jwtCGuidAttributeGuidNameOrgIDSystemIDServerIDPOST/discover/ListAttributesAttributes::ListAttributes
jwtCGuidAttributeGuidOrgIDSystemIDServerID
CGuid.POST/discover/ModifyAttributeAttributes::ModifyAttribute
jwtCGuidAttributeGuidNameOrgIDSystemIDServerIDPOST/discover/ModifyAttributeValueAttributes::ModifyAttributeValue
jwtCGuidAttributeGuidItemValueOrgIDSystemIDServerID# Knowledge Base
POST/discover/listkbsBlobStore::listkbs
jwtCGuidServerIDPOST/discover/downloadkbBlobStore::downloadkb
jwtCGuidRandomNo
POST/discover/uploadkbBlobStore::uploadkb
jwtCGuidServerIDFilenameDescriptionFileData (base64)POST/discover/PopulateKBCarouselSystem::PopulateKBCarousel
jwtCGuidSystemIDServerID# Security, SBOM & VEX
POST/discover/ListSbomBlobStore::listsbom
jwtCGuidSystemIDFilenameDescriptionPOST/discover/UploadSBOMBlobStore::uploadsbom
jwtCGuidSystemIDFilenameDescriptionFileData (base64 CycloneDX XML)POST/discover/ListVexBlobStore::listvex
jwtCGuidSystemIDFilenameDescriptionPOST/discover/DownloadVexBlobStore::downloadvex
jwtCGuidSystemID
POST/discover/UploadVEXBlobStore::uploadvex
jwtCGuidSystemIDFilenameDescriptionFileData (base64 CycloneDX/OpenVEX JSON)POST/discover/ModifyVexBlobStore::modifyvex
jwtCGuidSystemIDidFilenameDescriptionStateJustificationDetailResponseCommentPOST/discover/SecBuildTicketSecurity::SecBuildTicket
jwt
# Logs & Events
POST/discover/AddLogEntrySystem::AddLogEntry
jwtCGuidSystemIDServerIDLogTypeLogAuthorLogDescriptionLogEpochLogdateLogtimePOST/discover/DeleteLogEntrySystem::DeleteLogEntry
jwtCGuidguidPOST/discover/ListLogEntriesSystem::ListLogEntries
jwtCGuidSystemIDServerIDFilterPOST/discover/ModifyLogEntrySystem::ModifyLogEntry
jwtCGuidguidSystemIDServerIDLogTypeLogAuthorLogDescriptionLogdateLogtimePOST/discover/ListMasterLogEntriesOrganization::ListMasterLogEntries
jwtCGuidSystemIDServerIDFilterAdminFilterAuth# Microsoft 365
POST/discover/AddM365AppM365::AddM365App
jwtCGuidTenantNameAppIDClientSecretTenantIDPOST/discover/ListM365Licensesm365::Listm365Licenses
jwtCGuidSystemIDPOST/discover/Populatem365Licensesm365::Populatem365licenses
jwtCGuidSystemIDClientSecret# Address Book
POST/discover/ListAddressBookAddressBook::ListAddressBook
jwtCGuidPOST/discover/AddAddressBookEntryAddressBook::AddAddressBookEntry
jwtCGuidGivenNameLastNameInitialPhoneEmailRoleNotesPOST/discover/DeleteAddressBookEntryAddressBook::DeleteAddressBookEntry
jwtCGuidGuidPOST/discover/ModifyAddressBookEntryAddressBook::ModifyAddressBookEntry
jwtCGuidGuidGivenNameLastNameInitialPhoneEmailRoleNotes# Keys
POST/discover/ListKeysKeys::ListKeys
jwtCGuidPOST/discover/AddKeyKeys::AddKey
jwtCGuidNameKeyPOST/discover/DeleteKeyKeys::DeleteKey
jwtCGuidKey# RACI Tasks
POST/discover/AddRACITaskRACI::AddRACITask
jwtCGuidSystemIDTaskRACINPOST/discover/DeleteRACITaskRACI::DeleteRACITask
jwtCGuidSystemIDguidPOST/discover/ListRACITasksRACI::ListRACITasks
jwtCGuidSystemIDPOST/discover/ModifyRACITaskRACI::ModifyRACITask
jwtCGuidSystemIDguidTaskRACIN# Discover Orders
POST/discover/AcceptOrderPayment::CreateOrder
jwt/token field.
checkout.session-style webhook (reads data.object.id, customer, customer_name, customer_phone, customer_email) and calls Payment::CreateOrder(), not an "accept" method. Not called directly by frontend clients.POST/discover/ListAccountsAdministration::ListAccounts
jwt/account/ Endpoints
# Account Lifecycle
POST/account/CreateAccountIdentity::CreateAccount
jwtEmailFirstNameMiddleNameLastNameModePurchasedSubscriptionsPOST/account/OnBoardAccountPlan::OnBoardAccount
jwtAccountGuidPOST/account/OffBoardAccountPlan::OnBoardAccount ⚠
jwtAccountGuid
OnBoardAccount() instead of an off-boarding method — see the notice at the top of this page. Documented as it actually behaves today.POST/account/CreateOrderPayment::CreateOrder
jwtAccountGuidcouponpurchase_countryPOST/account/FinishOrderPayment::FinishOrder
jwtAccountGuidOrdernumberPOST/account/FinishOrderKlarnaPayment::FinishOrder
jwtOrdernumber
Payment::FinishOrder() as the plain FinishOrder endpoint — worth confirming this is intentionally provider-agnostic rather than a missing Klarna-specific path.POST/account/ReceivePushPayment::ReceivePush
jwt