🔌 API Docs
A token-authenticated JSON REST API. Prefer the command line? jm CLI Docs →
https://jmtechpower.com/api/v1Authorization: Bearer <token>Quick start
# 1) get a token (or use the jm CLI: jm token create)
curl -s -X POST https://jmtechpower.com/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"you@example.com","password":"••••"}'
# 2) call the API with it
curl -s https://jmtechpower.com/api/v1/user -H "Authorization: Bearer jm_xxx"
Authentication
Most endpoints need a token in the Authorization: Bearer <token> header. Get one from the API Tokens page or via jm auth login.
/api/v1/ping
public
/api/v1/auth/login
public
username, password, name?/api/v1/user
🔒 token
/api/v1/user
🔒 token
nickname?, bio?/api/v1/tokens
🔒 token
/api/v1/tokens
🔒 token
name?/api/v1/tokens/{id}
🔒 token
/api/v1/cli/auth/start
public
device_name?/api/v1/cli/auth/poll
public
device_code/jm/version
public
Apps & releases
Manage applications and their release history.
/api/v1/apps
🔒 token
query: mine, search/api/v1/apps/{id}
🔒 token
/api/v1/apps
🔒 token
name, description, version, category, supported_os, license_type, install_path?, installer_path?, file? | download_url?/api/v1/apps/{id}
🔒 token
/api/v1/apps/{id}/releases
🔒 token
version, notes?, highlights?, file? | download_url?/api/v1/releases/{id}/download
🔒 token
/api/v1/installed
🔒 token
/api/v1/installed
🔒 token
app_id, version, path?/api/v1/installed/{app_id}
🔒 token
Articles
Create and manage articles.
/api/v1/articles
🔒 token
query: mine, search, category/api/v1/articles/{id}
🔒 token
/api/v1/articles
🔒 token
title, content, category, summary?, tags?, published?/api/v1/articles/{id}
🔒 token
title?, content?, category?, tags?, summary?, published?/api/v1/articles/{id}
🔒 token
JMDrive
Personal file storage with shareable links.
/api/v1/drive
🔒 token
query: folder/api/v1/drive/upload
🔒 token
file (repeatable), folder?, visibility?/api/v1/drive/folder
🔒 token
name, parent?, visibility?/api/v1/drive/{id}/download
🔒 token
/api/v1/drive/{id}/share
🔒 token
password?, limit?/api/v1/drive/{id}
🔒 token
Admin
Official-account only (token belongs to JM Tech Power Official). Used by the desktop Admin tab and jm admin.
/api/v1/admin/stats
🔒 token
/api/v1/admin/apps
🔒 token
/api/v1/admin/apps/{id}/approve
🔒 token
/api/v1/admin/apps/{id}/revoke
🔒 token
/api/v1/admin/apps/{id}
🔒 token
/api/v1/admin/users
🔒 token
Search
JM Search — unified search over apps, articles and people. Public (no token needed).
/api/v1/search?q={query}&limit={n}
public
/api/v1/search?q={query}&web=1
public
JM OAuth (Sign in with JM Tech Power)
A full OpenID Connect provider — like "Sign in with Google". Register an app at /settings/oauth, supports Authorization Code + PKCE, signed id_token (RS256), refresh tokens and revocation. Discovery: /oauth/openid-configuration · keys: /oauth/jwks. Full integration guide →
/oauth/authorize?client_id=&redirect_uri=&response_type=code&scope=openid%20profile%20email&state=&nonce=&code_challenge=&code_challenge_method=S256&access_type=offline
public
/oauth/token
public
/oauth/userinfo
🔒 token
/oauth/jwks
public
/oauth/revoke
public
/oauth/openid-configuration
public
Direct Install (devices)
Run jm link on a machine to register it as a device; the website's Direct Install button then queues install jobs the linked machine picks up via long-poll.
/api/v1/devices/register
🔒 token
/api/v1/devices
🔒 token
/api/v1/devices/poll?device={id}&wait=25
🔒 token
/api/v1/devices/jobs/{id}
🔒 token
/api/v1/devices/{id}
🔒 token
Chat
Direct messages and group chats.
/api/v1/chat/groups
🔒 token
/api/v1/chat/messages
🔒 token
query: group | with, limit/api/v1/chat/send
🔒 token
message, to | groupErrors
Errors return a non-2xx status and a JSON body like {"error":"forbidden","message":"…"}.
Common codes: 400 bad request, 401 unauthorized, 403 forbidden, 404 not found, 410 gone, 413 over quota.