mero.admin (AdminApi) is the node’s /admin-api REST surface — the full set
(~106 methods) across applications, contexts, namespaces, groups, blobs, aliases,
capabilities, metadata, upgrades, and TEE. Every method is a suspend fun over
the shared HttpClient ; most reads unwrap the node’s
{ data } envelope for you. Endpoints below are relative to /admin-api.
List methods return the node’s full result set — the admin API does not paginate,
so there are no limit/offset/cursor parameters.
Method
Endpoint
healthCheck(): HealthStatus
GET /health
isAuthed(): AdminAuthStatus
GET /is-authed
Method
Endpoint
installApplication(request): InstallApplicationResponseData
POST /install-application
installFromRegistry(registryUrl, packageName, version): InstallApplicationResponseData
registry → POST /install-application
getRegistryVersions(registryUrl, packageName): List<String>
off-node registry read
installDevApplication(request): InstallApplicationResponseData
POST /install-dev-application
uninstallApplication(appId): UninstallApplicationResponseData
DELETE /applications/{appId}
listApplications(): ListApplicationsResponseData
GET /applications
getApplication(appId): GetApplicationResponseData
GET /applications/{appId}
listApplicationVersions(applicationId): List<ApplicationVersionEntry>
GET /applications/{applicationId}/versions
Method
Endpoint
listPackages(): ListPackagesResponseData
GET /packages
listPackageVersions(packageName): ListVersionsResponseData
GET /packages/{packageName}/versions
getLatestPackageVersion(packageName): GetLatestVersionResponseData
GET /packages/{packageName}/latest
Method
Endpoint
createContext(request): CreateContextResponseData
POST /contexts
deleteContext(contextId, request? = null): DeleteContextResponseData
DELETE /contexts/{contextId}
getContexts(): GetContextsResponseData
GET /contexts
getContext(contextId): Context
GET /contexts/{contextId}
getContextsForApplication(applicationId): GetContextsResponseData
GET /contexts/for-application/{applicationId}
generateContextIdentity(): GenerateContextIdentityResponseData
POST /identity/context
getContextIdentities(contextId): GetContextIdentitiesResponseData
GET /contexts/{contextId}/identities
getContextIdentitiesOwned(contextId): GetContextIdentitiesResponseData
GET /contexts/{contextId}/identities-owned
joinContext(contextId): JoinContextResponseData
POST /contexts/{contextId}/join
getContextGroup(contextId): ContextGroupResponseData
GET /contexts/{contextId}/group
getContextStorage(contextId): ContextStorageResponseData
GET /contexts/{contextId}/storage
syncContext(contextId? = null)
POST /contexts/sync/{contextId?}
resyncContext(contextId, request = ResyncContextRequest()): ResyncContextResponseData
POST /contexts/{contextId}/resync
inviteSpecializedNode(request): InviteSpecializedNodeResponseData
POST /contexts/invite-specialized-node
updateContextApplication(contextId, request)
POST /contexts/{contextId}/application
getContextsWithExecutorsForApplication(applicationId): ContextsWithExecutorsResponseData
GET /contexts/with-executors/for-application/{applicationId}
Method
Endpoint
uploadBlob(request): UploadBlobResponseData
PUT /blobs
deleteBlob(blobId): DeleteBlobResponseData
DELETE /blobs/{blobId}
listBlobs(): ListBlobsResponseData
GET /blobs
getBlob(blobId): ByteArray
GET /blobs/{blobId} (raw bytes)
getBlobInfo(blobId): GetBlobInfoResponseData
HEAD /blobs/{blobId}
Method
Endpoint
createContextAlias(request): CreateAliasResponseData
POST /alias/create/context
createApplicationAlias(request): CreateAliasResponseData
POST /alias/create/application
lookupContextAlias(name): LookupAliasResponseData
POST /alias/lookup/context/{name}
lookupApplicationAlias(name): LookupAliasResponseData
POST /alias/lookup/application/{name}
deleteContextAlias(name): DeleteAliasResponseData
POST /alias/delete/context/{name}
deleteApplicationAlias(name): DeleteAliasResponseData
POST /alias/delete/application/{name}
listContextAliases(): ListAliasesResponseData
GET /alias/list/context
listApplicationAliases(): ListAliasesResponseData
GET /alias/list/application
listContextIdentityAliases(contextId): ListContextIdentityAliasesResponseData
GET /alias/list/identity/{contextId}
createContextIdentityAlias(contextId, request): CreateContextIdentityAliasResponseData
POST /alias/create/identity/{contextId}
lookupContextIdentityAlias(contextId, name): LookupContextIdentityAliasResponseData
POST /alias/lookup/identity/{contextId}/{name}
deleteContextIdentityAlias(contextId, name): DeleteContextIdentityAliasResponseData
POST /alias/delete/identity/{contextId}/{name}
Method
Endpoint
listNamespaces(): ListNamespacesResponseData
GET /namespaces
getNamespace(namespaceId): Namespace
GET /namespaces/{namespaceId}
getNamespaceIdentity(namespaceId): NamespaceIdentity
GET /namespaces/{namespaceId}/identity
listNamespacesForApplication(applicationId): ListNamespacesResponseData
GET /namespaces/for-application/{applicationId}
createNamespace(request): CreateNamespaceResponseData
POST /namespaces
deleteNamespace(namespaceId, request? = null): DeleteNamespaceResponseData
DELETE /namespaces/{namespaceId}
createNamespaceInvitation(namespaceId, request? = null): CreateNamespaceInvitationResult
POST /namespaces/{namespaceId}/invite
joinNamespace(namespaceId, request): JoinNamespaceResponseData
POST /namespaces/{namespaceId}/join
leaveNamespace(namespaceId, request? = null)
POST /namespaces/{namespaceId}/leave
createGroupInNamespace(namespaceId, request? = null): CreateGroupInNamespaceResponseData
POST /namespaces/{namespaceId}/groups
listNamespaceGroups(namespaceId): List<SubgroupEntry>
GET /namespaces/{namespaceId}/groups
Method
Endpoint
createGroup(request): CreateGroupResponseData
POST /groups
getGroupInfo(groupId): GroupInfoResponseData
GET /groups/{groupId}
updateGroupSettings(groupId, request)
PATCH /groups/{groupId}
deleteGroup(groupId, request? = null): DeleteGroupResponseData
DELETE /groups/{groupId}
listGroupMembers(groupId): ListGroupMembersResponseData
GET /groups/{groupId}/members
listGroupContexts(groupId): ListGroupContextsResponseData
GET /groups/{groupId}/contexts
addGroupMembers(groupId, request)
POST /groups/{groupId}/members
removeGroupMembers(groupId, request)
POST /groups/{groupId}/members/remove
updateMemberRole(groupId, identity, request)
PUT /groups/{groupId}/members/{identity}/role
setMemberAutoFollow(groupId, identity, request)
PUT /groups/{groupId}/members/{identity}/auto-follow
listSubgroups(groupId): List<SubgroupEntry>
GET /groups/{groupId}/subgroups
reparentGroup(childGroupId, request): ReparentGroupResponseData
POST /groups/{childGroupId}/reparent
detachContextFromGroup(groupId, contextId, request? = null)
POST /groups/{groupId}/contexts/{contextId}/remove
leaveGroup(groupId, request? = null)
POST /groups/{groupId}/leave
leaveContext(contextId, request? = null)
POST /contexts/{contextId}/leave
Method
Endpoint
createGroupInvitation(groupId, request? = null): CreateGroupInvitationResult
POST /groups/{groupId}/invite
joinGroup(request): JoinGroupResponseData
POST /groups/join
joinSubgroupInheritance(groupId): JoinSubgroupInheritanceResponseData
POST /groups/{groupId}/join-via-inheritance
issueOwnershipProof(groupId, request? = null): JsonElement
POST /groups/{groupId}/issue-ownership-proof
issueNamespaceOwnershipProof(groupId, request? = null): JsonElement
POST /groups/{groupId}/issue-namespace-ownership-proof
Method
Endpoint
getMemberCapabilities(groupId, identity): MemberCapabilities
GET /groups/{groupId}/members/{identity}/capabilities
setMemberCapabilities(groupId, identity, request)
PUT /groups/{groupId}/members/{identity}/capabilities
getDefaultCapabilities(groupId): Int
(reads getGroupInfo)
setDefaultCapabilities(groupId, request)
PUT /groups/{groupId}/settings/default-capabilities
getSubgroupVisibility(groupId): String
(reads getGroupInfo)
setSubgroupVisibility(groupId, request)
PUT /groups/{groupId}/settings/subgroup-visibility
getTeeAdmissionPolicy(groupId): GetTeeAdmissionPolicyResponseData
GET /groups/{groupId}/settings/tee-admission-policy
setTeeAdmissionPolicy(groupId, request)
PUT /groups/{groupId}/settings/tee-admission-policy
Method
Endpoint
setGroupMetadata(groupId, request)
PUT /groups/{groupId}/metadata
getGroupMetadata(groupId): MetadataRecord?
GET /groups/{groupId}/metadata
setMemberMetadata(groupId, identity, request)
PUT /groups/{groupId}/members/{identity}/metadata
getMemberMetadata(groupId, identity): MetadataRecord?
GET /groups/{groupId}/members/{identity}/metadata
setContextMetadata(groupId, contextId, request)
PUT /groups/{groupId}/contexts/{contextId}/metadata
getContextMetadata(groupId, contextId): MetadataRecord?
GET /groups/{groupId}/contexts/{contextId}/metadata
Method
Endpoint
syncGroup(groupId, request? = null): SyncGroupResponseData
POST /groups/{groupId}/sync
syncGroupContexts(groupId): ListGroupContextsResponseData
composite — see below
registerGroupSigningKey(groupId, request): RegisterGroupSigningKeyResponseData
POST /groups/{groupId}/signing-key
upgradeGroup(groupId, request): UpgradeGroupResponseData
POST /groups/{groupId}/upgrade
getGroupUpgradeStatus(groupId): GroupUpgradeStatusResponseData
GET /groups/{groupId}/upgrade/status
retryGroupUpgrade(groupId, request? = null): RetryGroupUpgradeResponseData
POST /groups/{groupId}/upgrade/retry
getMigrationStatus(namespaceId): MigrationStatus
GET /groups/{namespaceId}/migration-status
getCascadeStatus(namespaceId): List<CascadeStatusEntry>
GET /groups/{namespaceId}/cascade-status
abortMigration(namespaceId, request? = null): JsonElement
POST /groups/{namespaceId}/migration/abort
Joining a group does not initialize its contexts on your node: cross-node sync is
asynchronous, and until a context is joined and state-pulled it sits on the
all-ones (1111…) uninitialized hash, so every read looks empty.
syncGroupContexts does the whole dance for you:
// sync the group, then join + state-pull every context in it
val contexts = mero.admin. syncGroupContexts (groupId)
It runs syncGroup, lists the group’s contexts, then joinContext +
syncContext for each, tolerating per-context failures (sync is async — call it
again). The sample app’s chat calls it in a short retry loop right after
joinNamespace, which is what makes an invited space’s channels appear.
Method
Endpoint
getTeeInfo(): TeeInfoResponseData
GET /tee/info
teeAttest(request): TeeAttestResponseData
POST /tee/attest
teeVerifyQuote(request): TeeVerifyQuoteResponseData
POST /tee/verify-quote
Method
Endpoint
getPeersCount(): PeersCountResponseData
GET /peers
getNetworkStatus(): JsonElement
GET /network/status
getUsage(): JsonElement
GET /usage
getCertificate(): String
GET /certificate
The file also exports a top-level helper compareSemver(a: String, b: String): Int
for ordering dotted version strings.
val applicationId: String ,
val serviceName: String ? = null ,
val contextStateHash: String ,
val dagHeads: List < List < Int >>,
val applicationVersion: String ? = null ,
// The element type of getContexts() / getContextsForApplication().
data class ContextWithGroup ( /* Context fields … */ val groupId: String ? = null )
val namespaceId: String , val appKey: String , val targetApplicationId: String ,
val upgradePolicy: String , val createdAt: Int , val name: String ? = null ,
val memberCount: Int , val contextCount: Int , val subgroupCount: Int ,
val groupId: String , val appKey: String , val targetApplicationId: String ,
val upgradePolicy: String , val memberCount: Int , val contextCount: Int ,
val activeUpgrade: GroupUpgradeStatus ? = null ,
val defaultCapabilities: Int , val subgroupVisibility: String ,
val metadata: MetadataRecord ? = null ,
data class BlobInfo ( val blobId: String , val size: Int ) // GetBlobInfoResponseData adds hash?, mimeType?
data class MetadataRecord (
val name: String ? = null , val data : Map < String , String >,
val updatedAt: Int , val updatedBy: String ,
data class MemberCapabilities ( val capabilities: Int ) // see /reference/capabilities/
enum class UpgradePolicy { AUTOMATIC, LAZY_ON_ACCESS } // wire: "Automatic" / "LazyOnAccess"
See AdminTypes.kt
for the complete set of request and response types.