{"openapi":"3.0.3","info":{"title":"CronLume Professional Developer API","version":"1.0.0","description":"Complete API for cron scheduling, monitoring, incident response and organisation."},"servers":[{"url":"https://api.cronlume.com/v1","description":"CronLume production API"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"CronLume API key"}}},"paths":{"/account":{"get":{"operationId":"account","tags":["Authentication"],"summary":"Verify API connection","description":"Validate the Bearer key and return the authenticated API-key identity and workspace. The interactive console uses this endpoint when Connect is selected. Permission: Any active API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}}},"/crons":{"get":{"operationId":"crons-list","tags":["Cron jobs"],"summary":"List and search cron jobs","description":"Returns jobs ordered by operational urgency. Combine filters to locate a project, incident state or endpoint quickly. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"description":"Search title, URL and description.","schema":{"type":"string"},"example":"invoices"},{"name":"status","in":"query","required":false,"description":"pending, healthy, degraded, down or paused.","schema":{"type":"string"},"example":"down"},{"name":"active","in":"query","required":false,"description":"Filter active or disabled jobs.","schema":{"type":"string"},"example":"true"},{"name":"group_id","in":"query","required":false,"description":"Filter by project/site group.","schema":{"type":"string"},"example":null},{"name":"category_id","in":"query","required":false,"description":"Filter by category.","schema":{"type":"string"},"example":null},{"name":"limit","in":"query","required":false,"description":"1–100. Defaults to 50.","schema":{"type":"integer"},"example":50},{"name":"offset","in":"query","required":false,"description":"Pagination offset. Defaults to 0.","schema":{"type":"integer"},"example":0}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}},"post":{"operationId":"crons-create","tags":["Cron jobs"],"summary":"Create a cron job","description":"Create a fully monitored HTTP schedule. Required fields are intentionally minimal; every operational safeguard can be configured in the same request. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"201":{"description":"Cron job created"},"401":{"description":"Invalid API key"},"422":{"description":"Missing field, invalid cron expression or invalid emergency URL"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"name":"Generate customer invoices","url":"https://billing.example.com/tasks/invoices","cron_expression":"*/15 * * * *","timezone":"Europe/Brussels","method":"POST","timeout_seconds":180,"criticality":"critical","failure_threshold":3,"alert_on_pause":true,"failure_action_enabled":true,"failure_action_threshold":3,"failure_action_url":"https://backup.example.com/recover/invoices"}}}}}},"/crons/{cron_id}":{"get":{"operationId":"crons-get","tags":["Cron jobs"],"summary":"Retrieve one cron job","description":"Return complete configuration and current operational state, including decrypted request headers for authorised engineering use. Treat the response as sensitive. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"200":{"description":"Cron job returned"},"401":{"description":"Invalid API key"},"404":{"description":"Cron job not found in this workspace"}}},"patch":{"operationId":"crons-update","tags":["Cron jobs"],"summary":"Change cron configuration","description":"Update one or more supported fields. Omitted fields keep their current values. Changing schedule or timezone recalculates next_run_at. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"cron_expression":"0 */2 * * *","timeout_seconds":240,"failure_threshold":4}}}}},"delete":{"operationId":"crons-delete","tags":["Cron jobs"],"summary":"Permanently delete a cron job","description":"Delete the job and its execution history. This operation is permanent and returns no response body. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"204":{"description":"Cron job and related history deleted"},"401":{"description":"Invalid API key"},"404":{"description":"Cron job not found"}}}},"/crons/{cron_id}/activate":{"post":{"operationId":"crons-activate","tags":["Cron jobs"],"summary":"Activate or reactivate a cron","description":"Clears the pause date and reason, resets locks and calculates the next execution. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"200":{"description":"Cron state changed"},"401":{"description":"Invalid API key"},"404":{"description":"Cron job not found"}}}},"/crons/{cron_id}/deactivate":{"post":{"operationId":"crons-deactivate","tags":["Cron jobs"],"summary":"Disable a cron","description":"Stops future executions and records the exact UTC pause timestamp and API reason. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"200":{"description":"Cron state changed"},"401":{"description":"Invalid API key"},"404":{"description":"Cron job not found"}}}},"/crons/{cron_id}/run":{"post":{"operationId":"crons-run","tags":["Cron jobs"],"summary":"Queue an immediate execution","description":"Moves next_run_at to the current UTC time. The scheduler accepts the job asynchronously. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"202":{"description":"Execution queued"},"409":{"description":"Cron is inactive; reactivate it first"},"401":{"description":"Invalid API key"},"404":{"description":"Cron job not found"}}}},"/crons/bulk-activate":{"post":{"operationId":"crons-bulk-activate","tags":["Cron jobs"],"summary":"Reactivate multiple cron jobs","description":"Reactivate selected disabled jobs after a server outage or resolved incident. Unknown or already active identifiers are ignored. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"job_ids":["a870d9ac-3a0f-49bb-b8e2-5f392fffc821"]}}}}}},"/crons/{cron_id}/executions":{"get":{"operationId":"executions-list","tags":["Executions"],"summary":"List execution history","description":"Inspect response time, HTTP status, retries and safe response evidence for a single cron. Most recent execution is returned first. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"},{"name":"limit","in":"query","required":false,"description":"1–200. Defaults to 50.","schema":{"type":"integer"},"example":50}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}}},"/crons/{cron_id}/failure-actions":{"get":{"operationId":"failure-actions-list","tags":["Executions"],"summary":"List emergency-action executions","description":"Inspect every recovery URL invocation triggered by a consecutive-failure rule. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"},{"name":"limit","in":"query","required":false,"description":"1–200. Defaults to 50.","schema":{"type":"integer"},"example":50}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}}},"/groups":{"get":{"operationId":"groups-list","tags":["Organisation"],"summary":"List Groups","description":"Return every project, website, service or other configured in the authenticated workspace. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}},"post":{"operationId":"groups-create","tags":["Organisation"],"summary":"Create group","description":"Create a reusable project, website, service or other for organising the cron fleet. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"201":{"description":"Groups created"},"401":{"description":"Invalid API key"},"422":{"description":"Invalid or duplicate values"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"group_type":"service","name":"Billing platform","client_reference":"CLIENT-ACME-0042","description":"Customer billing automation","color":"#147d64"}}}}}},"/groups/{group_id}":{"patch":{"operationId":"groups-update","tags":["Organisation"],"summary":"Update group","description":"Change one or more fields. Omitted fields remain unchanged. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"description":"Groups identifier.","schema":{"type":"string"},"example":"6ef63789-baf1-44fc-99bb-0c5ce2d37a8b"}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"name":"Billing platform Production"}}}}},"delete":{"operationId":"groups-delete","tags":["Organisation"],"summary":"Delete group","description":"Delete the organisational item. Jobs remain available; deleted group relations become empty. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"description":"Groups identifier.","schema":{"type":"string"},"example":"6ef63789-baf1-44fc-99bb-0c5ce2d37a8b"}],"responses":{"204":{"description":"Groups item deleted"},"401":{"description":"Invalid API key"},"404":{"description":"Item not found"}}}},"/categories":{"get":{"operationId":"categories-list","tags":["Organisation"],"summary":"List Categories","description":"Return every operational category configured in the authenticated workspace. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}},"post":{"operationId":"categories-create","tags":["Organisation"],"summary":"Create categorie","description":"Create a reusable operational category for organising the cron fleet. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"201":{"description":"Categories created"},"401":{"description":"Invalid API key"},"422":{"description":"Invalid or duplicate values"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"name":"Billing","description":"Invoice and payment workflows","color":"#46769b"}}}}}},"/categories/{category_id}":{"patch":{"operationId":"categories-update","tags":["Organisation"],"summary":"Update categorie","description":"Change one or more fields. Omitted fields remain unchanged. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"description":"Categories identifier.","schema":{"type":"string"},"example":"125976d5-c276-481c-984c-a9b4b70e477e"}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"name":"Billing Production"}}}}},"delete":{"operationId":"categories-delete","tags":["Organisation"],"summary":"Delete categorie","description":"Delete the organisational item. Jobs remain available; deleted group relations become empty. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"description":"Categories identifier.","schema":{"type":"string"},"example":"125976d5-c276-481c-984c-a9b4b70e477e"}],"responses":{"204":{"description":"Categories item deleted"},"401":{"description":"Invalid API key"},"404":{"description":"Item not found"}}}},"/incidents":{"get":{"operationId":"incidents-list","tags":["Incidents"],"summary":"List incidents","description":"Return up to 500 incidents ordered by opening time. Responses contain open, acknowledged and resolved operational history. Permission: Any API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}}},"/incidents/{incident_id}/acknowledge":{"post":{"operationId":"incidents-ack","tags":["Incidents"],"summary":"Acknowledge an incident","description":"Mark an open incident as acknowledged and record the exact UTC acknowledgement time. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"description":"Incident identifier.","schema":{"type":"integer"},"example":731}],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}}}},"/crons/{cron_id}/duplicate":{"post":{"operationId":"crons-duplicate","tags":["Cron jobs"],"summary":"Duplicate a cron safely","description":"Create an exact operational copy, including categories, alert channels, encrypted headers and request body. The copy is always paused and clearly named so it can be reviewed before activation without causing a double execution. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[{"name":"cron_id","in":"path","required":true,"description":"Source cron job identifier.","schema":{"type":"string"},"example":"a870d9ac-3a0f-49bb-b8e2-5f392fffc821"}],"responses":{"201":{"description":"Paused duplicate created"},"401":{"description":"Invalid API key"},"404":{"description":"Source cron job not found"}}}},"/crons/bulk-pause":{"post":{"operationId":"crons-bulk-pause","tags":["Cron jobs"],"summary":"Pause multiple cron jobs","description":"Pause up to 200 active jobs in one operation. CronLume records the exact UTC pause time and a developer-API reason on every affected job. Unknown, inaccessible and already paused identifiers are reported as ignored. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"job_ids":["a870d9ac-3a0f-49bb-b8e2-5f392fffc821"]}}}}}},"/crons/bulk-move":{"post":{"operationId":"crons-bulk-move","tags":["Cron jobs"],"summary":"Move multiple cron jobs to a group","description":"Move up to 200 jobs to a project, website, service or customer group. Send group_id as null to make the selected jobs ungrouped. Only jobs and groups from the authenticated workspace can be used. Permission: Write-enabled API key.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Request completed successfully"},"401":{"description":"Missing, invalid or expired API key"},"403":{"description":"Insufficient permission"},"422":{"description":"Request validation failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"job_ids":["a870d9ac-3a0f-49bb-b8e2-5f392fffc821"],"group_id":"6ef63789-baf1-44fc-99bb-0c5ce2d37a8b"}}}}}}}}