PluginStatusResponse
Response after enabling or disabling a plugin
Health check error message (None if passed or not performed)
Health check latency in milliseconds (None if not performed)
Possible values: >= 0
150Health check passed (None if not performed)
trueWhether a health check was performed
trueStatus change message
Plugin enabled successfullyplugin objectrequired
A plugin (credentials are never exposed)
Command arguments
["/opt/codex/plugins/mangabaka/dist/index.js"]Auto-match conditions (JSON object with mode and rules)
Command to spawn the plugin
nodePlugin-specific configuration
When the plugin was created
How credentials are delivered to the plugin
envRead-only: the default log level a plugin gets when it has no override,
i.e. the server's own logging.level (with trace shown as debug).
Surfaced so the UI can label what "use the server default" resolves to.
infoDescription of the plugin
Fetch manga metadata from MangaBaka (MangaUpdates)Reason the plugin was disabled
Human-readable display name
MangaBakaWhether the plugin is enabled
trueAdditional environment variables (non-sensitive only)
Number of consecutive failures
0Whether credentials have been set (actual credentials are never returned)
trueHealth status: unknown, healthy, degraded, unhealthy, disabled
healthyPlugin ID
550e8400-e29b-41d4-a716-446655440000internalConfig object
Internal server-side configuration (not sent to plugin)
Maximum results returned by metadata search (None = plugin default)
Possible values: >= 0
When the last failure occurred
When the last successful operation occurred
Library IDs this plugin applies to (empty = all libraries)
[]Per-plugin override for the log level sent to the plugin at startup
(error/warn/info/debug). None means "use the server default".
debugmanifest object
Cached manifest from plugin (if available)
Admin-facing setup instructions (e.g., how to create OAuth app, set client ID)
Author
capabilities objectrequired
Plugin capabilities
External ID source for matching sync entries to series (e.g., "api:anilist")
Content types this plugin can provide metadata for (e.g., ["series", "book"])
Whether the plugin declares the release_source capability (announces
new chapter / volume releases for tracked series).
Can sync user reading progress
Can provide personalized recommendations
Whether the plugin consumes the per-book reading-progress breakdown on the
sync entries it receives. Only meaningful when user_read_sync is true.
Whether the plugin consumes enriched series data (bibliographic metadata, custom metadata) on the sync/recommendation entries it receives.
configSchema object
Configuration schema documenting available config options
Human-readable description of the configuration
fields object[]required
List of configuration fields
Default value if not provided
Description of what this field does
Example value for documentation
Field name (key in JSON config)
Human-readable label
Whether this field is required
Field type — free-form documentation hint. Common values: "number", "string", "boolean", "string-array", "object". The host never validates stored config against this; it forwards the raw JSON to the plugin.
Supported content types
Description
Display name for UI
Homepage URL
Unique identifier
oauth object
OAuth 2.0 configuration (if plugin supports OAuth)
OAuth 2.0 authorization endpoint URL
Whether to use PKCE (Proof Key for Code Exchange)
Required OAuth scopes
OAuth 2.0 token endpoint URL
Optional user info endpoint URL
Protocol version
requiredCredentials object[]
Required credentials
Input type for UI
Description for the user
Credential key (e.g., "api_key")
Display label (e.g., "API Key")
Whether this credential is required
Whether to mask the value in UI
Supported scopes
URI template for searching on the plugin's website
User-facing setup instructions (e.g., how to connect or get a personal token)
Semantic version
Metadata targets: which resource types this plugin auto-matches against null = auto-detect from plugin capabilities
["series","book"]Unique identifier (e.g., "mangabaka")
mangabakaRBAC permissions for metadata writes
["metadata:write:summary","metadata:write:genres"]Plugin type: "system" (admin-configured) or "user" (per-user instances)
systemRate limit in requests per minute (None = no limit)
60Per-plugin override for the host → plugin RPC deadline, in seconds. None means "use the server default" (typically 30s).
300Scopes where plugin can be invoked
["series:detail","series:bulk"]Preprocessing rules for search queries (JSON array of regex rules)
Handlebars template for customizing search queries
Admin-managed cron schedule for automatic user-plugin syncs (null = no scheduled sync)
0 0 */6 * * *When the plugin was last updated
Whether to skip search when external ID exists for this plugin
trueNumber of users who have enabled this plugin (only for user-type plugins)
Possible values: >= 0
3Working directory for the plugin process
{
"healthCheckError": "string",
"healthCheckLatencyMs": 150,
"healthCheckPassed": true,
"healthCheckPerformed": true,
"message": "Plugin enabled successfully",
"plugin": {
"args": [
"/opt/codex/plugins/mangabaka/dist/index.js"
],
"command": "node",
"createdAt": "2024-07-29T15:51:28.071Z",
"credentialDelivery": "env",
"defaultLogLevel": "info",
"description": "Fetch manga metadata from MangaBaka (MangaUpdates)",
"disabledReason": "string",
"displayName": "MangaBaka",
"enabled": true,
"failureCount": 0,
"hasCredentials": true,
"healthStatus": "healthy",
"id": "550e8400-e29b-41d4-a716-446655440000",
"internalConfig": {
"searchResultsLimit": 0
},
"lastFailureAt": "2024-07-29T15:51:28.071Z",
"lastSuccessAt": "2024-07-29T15:51:28.071Z",
"libraryIds": [],
"logLevel": "debug",
"manifest": {
"adminSetupInstructions": "string",
"author": "string",
"capabilities": {
"externalIdSource": "string",
"metadataProvider": [
"string"
],
"releaseSource": true,
"userReadSync": true,
"userRecommendationProvider": true,
"wantsDetailedProgress": true,
"wantsFullMetadata": true
},
"configSchema": {
"description": "string",
"fields": [
{
"description": "string",
"key": "string",
"label": "string",
"required": true,
"type": "string"
}
]
},
"contentTypes": [
"string"
],
"description": "string",
"displayName": "string",
"homepage": "string",
"name": "string",
"oauth": {
"authorizationUrl": "string",
"pkce": true,
"scopes": [
"string"
],
"tokenUrl": "string",
"userInfoUrl": "string"
},
"protocolVersion": "string",
"requiredCredentials": [
{
"credentialType": "string",
"description": "string",
"key": "string",
"label": "string",
"required": true,
"sensitive": true
}
],
"scopes": [
"string"
],
"searchUriTemplate": "string",
"userSetupInstructions": "string",
"version": "string"
},
"metadataTargets": [
"series",
"book"
],
"name": "mangabaka",
"permissions": [
"metadata:write:summary",
"metadata:write:genres"
],
"pluginType": "system",
"rateLimitRequestsPerMinute": 60,
"requestTimeoutSeconds": 300,
"scopes": [
"series:detail",
"series:bulk"
],
"searchQueryTemplate": "string",
"syncCronSchedule": "0 0 */6 * * *",
"updatedAt": "2024-07-29T15:51:28.071Z",
"useExistingExternalId": true,
"userCount": 3,
"workingDirectory": "string"
}
}