{
"components": {
"responses": {
"BadRequest": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Bad request"
},
"NotFound": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Resource not found"
}
},
"schemas": {
"CreateCronJobRequest": {
"properties": {
"enabled": {
"default": true,
"type": "boolean"
},
"handler": {
"type": "string"
},
"metadata": {},
"schedule": {
"example": "0 30 9 * * 1-5 *",
"type": "string"
}
},
"required": [
"schedule",
"handler"
],
"type": "object"
},
"CronJob": {
"properties": {
"created_at": {
"format": "int64",
"minimum": 0,
"type": "integer"
},
"enabled": {
"type": "boolean"
},
"handler": {
"type": "string"
},
"id": {
"type": "string"
},
"metadata": {},
"schedule": {
"example": "@hourly",
"type": "string"
},
"source": {
"description": "\"managed\" for server-owned jobs; \"system:*\" for read-only system cron entries",
"example": "managed",
"type": "string"
},
"updated_at": {
"format": "int64",
"minimum": 0,
"type": "integer"
}
},
"required": [
"id",
"schedule",
"handler",
"metadata",
"enabled",
"source",
"created_at",
"updated_at"
],
"type": "object"
},
"EchoRequest": {
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
},
"EchoResponse": {
"properties": {
"message": {
"type": "string"
},
"timestamp": {
"format": "int64",
"minimum": 0,
"type": "integer"
}
},
"required": [
"message",
"timestamp"
],
"type": "object"
},
"ErrorResponse": {
"properties": {
"error": {
"type": "string"
}
},
"required": [
"error"
],
"type": "object"
},
"HealthResponse": {
"properties": {
"running": {
"type": "boolean"
},
"status": {
"example": "ok",
"type": "string"
},
"uptime_secs": {
"format": "int64",
"minimum": 0,
"type": "integer"
}
},
"required": [
"status",
"uptime_secs",
"running"
],
"type": "object"
},
"UpdateCronJobRequest": {
"properties": {
"enabled": {
"nullable": true,
"type": "boolean"
},
"handler": {
"nullable": true,
"type": "string"
},
"metadata": {
"nullable": true
},
"schedule": {
"nullable": true,
"type": "string"
}
},
"type": "object"
}
}
},
"info": {
"description": "REST API for managing cron jobs",
"title": "Moadim Server API",
"version": "0.1.0"
},
"openapi": "3.0.3",
"paths": {
"/": {
"get": {
"operationId": "index",
"responses": {
"200": {
"content": {
"text/plain": {
"schema": {
"example": "Moadim server is running",
"type": "string"
}
}
},
"description": "Server is running"
}
},
"summary": "Liveness check"
}
},
"/cron-jobs": {
"get": {
"operationId": "listCronJobs",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/CronJob"
},
"type": "array"
}
}
},
"description": "Array of cron jobs sorted by creation time"
}
},
"summary": "List all cron jobs"
},
"post": {
"operationId": "createCronJob",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateCronJobRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
},
"description": "Created cron job"
},
"400": {
"$ref": "#/components/responses/BadRequest"
}
},
"summary": "Create a cron job"
}
},
"/cron-jobs/{id}": {
"delete": {
"operationId": "deleteCronJob",
"responses": {
"204": {
"description": "Deleted"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
},
"summary": "Delete a cron job"
},
"get": {
"operationId": "getCronJob",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
},
"description": "Cron job"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
},
"summary": "Get a cron job by ID"
},
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"schema": {
"format": "uuid",
"type": "string"
}
}
],
"patch": {
"operationId": "updateCronJobPatch",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCronJobRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
},
"description": "Updated cron job"
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
},
"summary": "Update a cron job (partial)"
},
"put": {
"operationId": "updateCronJobPut",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCronJobRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CronJob"
}
}
},
"description": "Updated cron job"
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"404": {
"$ref": "#/components/responses/NotFound"
}
},
"summary": "Update a cron job (full)"
}
},
"/echo": {
"post": {
"operationId": "echo",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EchoRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EchoResponse"
}
}
},
"description": "Echoed message with timestamp"
},
"400": {
"$ref": "#/components/responses/BadRequest"
}
},
"summary": "Echo a message back with server timestamp"
}
},
"/health": {
"get": {
"operationId": "health",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HealthResponse"
}
}
},
"description": "Health status"
}
},
"summary": "Health check"
}
},
"/system-cron-jobs": {
"get": {
"description": "Returns cron jobs discovered from the host system (crontab -l, /etc/crontab, /etc/cron.d/*). Not managed by this server — cannot be created, updated, or deleted.",
"operationId": "listSystemCronJobs",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/CronJob"
},
"type": "array"
}
}
},
"description": "Array of read-only system cron jobs"
}
},
"summary": "List read-only system cron jobs"
}
}
},
"servers": [
{
"description": "Local development",
"url": "http://127.0.0.1:5784"
}
]
}