@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Adobe Experience Manager (AEM) API
@base /
@version 3.7.1-pre.0
@auth Bearer basic
@endpoints 48
@hint download_for_search
@toc system(7), libs(6), .cqactions.html(1), {path}(5), apps(9), bin(2), etc(8), crx(7), {intermediatePath}(3)

@group system
@endpoint GET /system/console/configMgr
@returns(200) OK
@errors {5XX: Unexpected error.}

@endgroup

@group libs
@endpoint GET /libs/granite/core/content/login.html

@endgroup

@group .cqactions.html
@endpoint POST /.cqactions.html
@required {authorizableId: str, changelog: str}

@endgroup

@group {path}
@endpoint POST /{path}/
@required {path: str, jcr:primaryType: str, :name: str}

@endpoint GET /{path}/{name}
@required {path: str, name: str}

@endpoint POST /{path}/{name}
@required {path: str, name: str}
@optional {:operation: str, deleteAuthorizable: str}

@endpoint DELETE /{path}/{name}
@required {path: str, name: str}

@endpoint POST /{path}/{name}.rw.html
@required {path: str, name: str}
@optional {addMembers: str}

@endgroup

@group apps
@endpoint POST /apps/system/config/{configNodeName}
@required {configNodeName: str}

@endpoint POST /apps/system/config/org.apache.felix.http
@optional {org.apache.felix.https.nio: bool, org.apache.felix.https.nio@TypeHint: str, org.apache.felix.https.keystore: str, org.apache.felix.https.keystore@TypeHint: str, org.apache.felix.https.keystore.password: str, org.apache.felix.https.keystore.password@TypeHint: str, org.apache.felix.https.keystore.key: str, org.apache.felix.https.keystore.key@TypeHint: str, org.apache.felix.https.keystore.key.password: str, org.apache.felix.https.keystore.key.password@TypeHint: str, org.apache.felix.https.truststore: str, org.apache.felix.https.truststore@TypeHint: str, org.apache.felix.https.truststore.password: str, org.apache.felix.https.truststore.password@TypeHint: str, org.apache.felix.https.clientcertificate: str, org.apache.felix.https.clientcertificate@TypeHint: str, org.apache.felix.https.enable: bool, org.apache.felix.https.enable@TypeHint: str, org.osgi.service.http.port.secure: str, org.osgi.service.http.port.secure@TypeHint: str}

@endpoint POST /apps/system/config/org.apache.sling.servlets.get.DefaultGetServlet
@optional {json.maximumresults: str, json.maximumresults@TypeHint: str, enable.html: bool, enable.html@TypeHint: str, enable.txt: bool, enable.txt@TypeHint: str, enable.xml: bool, enable.xml@TypeHint: str}

@endpoint POST /apps/system/config/org.apache.sling.security.impl.ReferrerFilter
@optional {allow.empty: bool, allow.empty@TypeHint: str, allow.hosts: str, allow.hosts@TypeHint: str, allow.hosts.regexp: str, allow.hosts.regexp@TypeHint: str, filter.methods: str, filter.methods@TypeHint: str}

@endpoint POST /apps/system/config/org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet
@optional {alias: str, alias@TypeHint: str, dav.create-absolute-uri: bool, dav.create-absolute-uri@TypeHint: str}

@endpoint POST /apps/system/config/com.shinesolutions.aem.passwordreset.Activator
@optional {pwdreset.authorizables: [str], pwdreset.authorizables@TypeHint: str}

@endpoint POST /apps/system/config/com.shinesolutions.healthcheck.hc.impl.ActiveBundleHealthCheck
@optional {bundles.ignored: [str], bundles.ignored@TypeHint: str}

@endgroup

@group bin
@endpoint GET /bin/querybuilder.json
@required {path: str, p.limit: num, 1_property: str, 1_property.value: str}

@endpoint POST /bin/querybuilder.json
@required {path: str, p.limit: num, 1_property: str, 1_property.value: str}

@endgroup

@group etc
@endpoint GET /etc/packages/{group}/{name}-{version}.zip
@required {group: str, name: str, version: str}

@endpoint GET /etc/packages/{group}/{name}-{version}.zip/jcr:content/vlt:definition/filter.tidy.2.json
@required {group: str, name: str, version: str}

@endpoint GET /etc/replication/agents.{runmode}.-1.json
@required {runmode: str}

@endpoint GET /etc/replication/agents.{runmode}/{name}
@required {runmode: str, name: str}

@endpoint DELETE /etc/replication/agents.{runmode}/{name}
@required {runmode: str, name: str}

@endpoint POST /etc/replication/agents.{runmode}/{name}
@required {runmode: str, name: str}
@optional {jcr:content/cq:distribute: bool, jcr:content/cq:distribute@TypeHint: str, jcr:content/cq:name: str, jcr:content/cq:template: str, jcr:content/enabled: bool, jcr:content/jcr:description: str, jcr:content/jcr:lastModified: str, jcr:content/jcr:lastModifiedBy: str, jcr:content/jcr:mixinTypes: str, jcr:content/jcr:title: str, jcr:content/logLevel: str, jcr:content/noStatusUpdate: bool, jcr:content/noVersioning: bool, jcr:content/protocolConnectTimeout: num, jcr:content/protocolHTTPConnectionClosed: bool, jcr:content/protocolHTTPExpired: str, jcr:content/protocolHTTPHeaders: [str], jcr:content/protocolHTTPHeaders@TypeHint: str, jcr:content/protocolHTTPMethod: str, jcr:content/protocolHTTPSRelaxed: bool, jcr:content/protocolInterface: str, jcr:content/protocolSocketTimeout: num, jcr:content/protocolVersion: str, jcr:content/proxyNTLMDomain: str, jcr:content/proxyNTLMHost: str, jcr:content/proxyHost: str, jcr:content/proxyPassword: str, jcr:content/proxyPort: num, jcr:content/proxyUser: str, jcr:content/queueBatchMaxSize: num, jcr:content/queueBatchMode: str, jcr:content/queueBatchWaitTime: num, jcr:content/retryDelay: str, jcr:content/reverseReplication: bool, jcr:content/serializationType: str, jcr:content/sling:resourceType: str, jcr:content/ssl: str, jcr:content/transportNTLMDomain: str, jcr:content/transportNTLMHost: str, jcr:content/transportPassword: str, jcr:content/transportUri: str, jcr:content/transportUser: str, jcr:content/triggerDistribute: bool, jcr:content/triggerModified: bool, jcr:content/triggerOnOffTime: bool, jcr:content/triggerReceive: bool, jcr:content/triggerSpecific: bool, jcr:content/userId: str, jcr:primaryType: str, :operation: str}

@endgroup

@group libs
@endpoint POST /libs/replication/treeactivation.html
@required {ignoredeactivated: bool, onlymodified: bool, path: str, cmd: str=activate}

@endpoint POST /libs/granite/security/post/authorizables
@required {authorizableId: str, intermediatePath: str}
@optional {createUser: str, createGroup: str, rep:password: str, profile/givenName: str}

@endgroup

@group crx
@endpoint POST /crx/explorer/ui/setpassword.jsp
@required {old: str, plain: str, verify: str}

@endpoint GET /crx/packmgr/installstatus.jsp
@returns(200) {status: map{finished: bool, itemCount: int}} # Retrieved CRX package manager install status

@endpoint POST /crx/packmgr/service.jsp
@required {cmd: str}

@endpoint POST /crx/packmgr/update.jsp
@required {groupName: str, packageName: str, version: str, path: str}
@optional {filter: str, _charset_: str}

@endpoint POST /crx/packmgr/service/.json/{path}
@required {path: str, cmd: str}
@optional {groupName: str, packageName: str, packageVersion: str, _charset_: str, force: bool, recursive: bool}

@endpoint GET /crx/packmgr/service/script.html
@errors {404: Package Manager Servlet is disabled, 405: Package Manager Servlet is active}

@endpoint GET /crx/server/crx.default/jcr:root/.1.json
@returns(200) CRXDE is enabled
@errors {404: CRXDE is disabled}

@endgroup

@group system
@endpoint GET /system/console/bundles/{name}.json
@required {name: str}
@returns(200) {status: str, s: [int], data: [map]} # Retrieved bundle info

@endpoint POST /system/console/bundles/{name}
@required {name: str, action: str}

@endpoint POST /system/console/jmx/com.adobe.granite:type=Repository/op/{action}
@required {action: str}

@endpoint GET /system/health
@optional {tags: str, combineTagsOr: bool}

@endgroup

@group apps
@endpoint POST /apps/system/config/com.adobe.granite.auth.saml.SamlAuthenticationHandler.config
@optional {keyStorePassword: str, keyStorePassword@TypeHint: str, service.ranking: int, service.ranking@TypeHint: str, idpHttpRedirect: bool, idpHttpRedirect@TypeHint: str, createUser: bool, createUser@TypeHint: str, defaultRedirectUrl: str, defaultRedirectUrl@TypeHint: str, userIDAttribute: str, userIDAttribute@TypeHint: str, defaultGroups: [str], defaultGroups@TypeHint: str, idpCertAlias: str, idpCertAlias@TypeHint: str, addGroupMemberships: bool, addGroupMemberships@TypeHint: str, path: [str], path@TypeHint: str, synchronizeAttributes: [str], synchronizeAttributes@TypeHint: str, clockTolerance: int, clockTolerance@TypeHint: str, groupMembershipAttribute: str, groupMembershipAttribute@TypeHint: str, idpUrl: str, idpUrl@TypeHint: str, logoutUrl: str, logoutUrl@TypeHint: str, serviceProviderEntityId: str, serviceProviderEntityId@TypeHint: str, assertionConsumerServiceURL: str, assertionConsumerServiceURL@TypeHint: str, handleLogout: bool, handleLogout@TypeHint: str, spPrivateKeyAlias: str, spPrivateKeyAlias@TypeHint: str, useEncryption: bool, useEncryption@TypeHint: str, nameIdFormat: str, nameIdFormat@TypeHint: str, digestMethod: str, digestMethod@TypeHint: str, signatureMethod: str, signatureMethod@TypeHint: str, userIntermediatePath: str, userIntermediatePath@TypeHint: str}

@endpoint POST /apps/system/config/org.apache.http.proxyconfigurator.config
@optional {proxy.host: str, proxy.host@TypeHint: str, proxy.port: int, proxy.port@TypeHint: str, proxy.exceptions: [str], proxy.exceptions@TypeHint: str, proxy.enabled: bool, proxy.enabled@TypeHint: str, proxy.user: str, proxy.user@TypeHint: str, proxy.password: str, proxy.password@TypeHint: str}

@endgroup

@group libs
@endpoint POST /libs/granite/security/post/truststore
@optional {:operation: str, newPassword: str, rePassword: str, keyStoreType: str, removeAlias: str}

@endpoint GET /libs/granite/security/truststore.json
@returns(200) {aliases: [map], exists: bool} # Retrieved AEM Truststore info

@endgroup

@group etc
@endpoint GET /etc/truststore/truststore.p12

@endpoint POST /etc/truststore

@endgroup

@group system
@endpoint POST /system/console/configMgr/com.adobe.granite.auth.saml.SamlAuthenticationHandler
@optional {post: bool, apply: bool, delete: bool, action: str, $location: str, path: [str], service.ranking: int, idpUrl: str, idpCertAlias: str, idpHttpRedirect: bool, serviceProviderEntityId: str, assertionConsumerServiceURL: str, spPrivateKeyAlias: str, keyStorePassword: str, defaultRedirectUrl: str, userIDAttribute: str, useEncryption: bool, createUser: bool, addGroupMemberships: bool, groupMembershipAttribute: str, defaultGroups: [str], nameIdFormat: str, synchronizeAttributes: [str], handleLogout: bool, logoutUrl: str, clockTolerance: int, digestMethod: str, signatureMethod: str, userIntermediatePath: str, propertylist: [str]}
@returns(200) Retrieved AEM SAML Configuration
@errors {302: Default response}

@endpoint GET /system/console/status-productinfo.json

@endgroup

@group {intermediatePath}
@endpoint POST /{intermediatePath}/{authorizableId}.ks.html
@required {intermediatePath: str, authorizableId: str}
@optional {:operation: str, currentPassword: str, newPassword: str, rePassword: str, keyPassword: str, keyStorePass: str, alias: str, newAlias: str, removeAlias: str}
@returns(200) Retrieved Authorizable Keystore info

@endpoint GET /{intermediatePath}/{authorizableId}.ks.json
@required {intermediatePath: str, authorizableId: str}
@returns(200) Retrieved Authorizable Keystore info

@endpoint GET /{intermediatePath}/{authorizableId}/keystore/store.p12
@required {intermediatePath: str, authorizableId: str}

@endgroup

@group libs
@endpoint POST /libs/granite/security/post/sslSetup.html
@required {keystorePassword: str, keystorePasswordConfirm: str, truststorePassword: str, truststorePasswordConfirm: str, httpsHostname: str, httpsPort: str}

@endgroup

@end
