Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/cernion-de:cernion-de-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Cernion Energy Tools Jobs API
version: 0.99.22
description: 'MicroService Agent System for Energy Markets - REST API with AI integration.
CERNION_TOKEN: request at https://cernion.de/ or by email: dev@stromdao.com.
For the public instance at https://api.cernion.de/, create your token at https://cernion.de/cet-token/.'
servers:
- url: https://api.cernion.de
description: API Server
tags:
- name: Jobs
description: Async job status and result polling (v0.9.8+)
paths:
/api/job-status/:jobId/status:
get:
summary: Poll async job status
tags:
- Jobs
operationId: job_status_status
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
description: Job UUID returned by the 202 response
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Job status record
content:
application/json:
schema:
type: object
properties:
jobId:
type: string
service:
type: string
description: Originating service name
action:
type: string
description: Originating action name
status:
type: string
enum:
- queued
- running
- recovery_pending
- completed
- error
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
completedAt:
type:
- string
- 'null'
format: date-time
error:
type:
- string
- 'null'
location:
type: string
description: URL of this status endpoint (for polling)
resultUrl:
type:
- string
- 'null'
description: Result URL — only set when status is "completed"
examples:
queued:
summary: Job queued
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
service: grid-operations
action: gridData
status: queued
createdAt: '2026-03-19T10:00:00.000Z'
updatedAt: '2026-03-19T10:00:00.000Z'
completedAt: null
error: null
location: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/status
resultUrl: null
completed:
summary: Job completed
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
service: grid-operations
action: gridData
status: completed
createdAt: '2026-03-19T10:00:00.000Z'
updatedAt: '2026-03-19T10:08:00.000Z'
completedAt: '2026-03-19T10:08:00.000Z'
error: null
location: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/status
resultUrl: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/result
'404':
description: Job not found (unknown ID or TTL expired)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
message:
type: string
description: 'Poll the status of a background job started by a long-running endpoint (v0.9.8+).
**Status values**:
- **queued** — job is registered, worker starting soon
- **running** — worker is executing (MCP polling in progress)
- **completed** — result is available at `resultUrl`
- **error** — worker failed; see `error` field
**Polling strategy**: start polling 5 s after submission, then every 10–30 s.
Most jobs complete within 8–12 minutes.'
/api/job-status/:jobId/progress:
get:
summary: Get job progress (JSON polling or SSE)
tags:
- Jobs
operationId: job_status_progress
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
- name: stream
in: query
required: false
schema:
type: boolean
default: false
description: Set true to receive text/event-stream output.
- name: lastEventId
in: query
required: false
schema:
type: string
example: '3'
description: Optional replay cursor when headers cannot be set by the client.
- name: Last-Event-ID
in: header
required: false
schema:
type: string
example: '3'
description: SSE replay cursor. Events with greater IDs are returned.
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Progress payload (JSON) or SSE stream (text/event-stream)
'404':
description: Job not found (unknown ID or TTL expired)
description: Returns normalized job progress. Use query `stream=true` for text/event-stream output. SSE supports `Last-Event-ID` replay (or `lastEventId` query fallback).
/api/job-status/:jobId/result:
get:
summary: Retrieve async job result
tags:
- Jobs
operationId: job_status_result
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
description: Job UUID returned by the 202 response
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Job result payload (original MCP tool response)
content:
application/json:
schema:
type: object
'202':
description: Job not yet completed — poll status endpoint
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
status:
type: string
message:
type: string
location:
type: string
'404':
description: Job not found or result expired
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
message:
type: string
description: 'Retrieve the full result payload of a completed async job.
Returns **202** if the job is still running — poll `/status` first.
Returns **404** if the job ID is unknown or the result has expired (24 h TTL).'
/api/job-status/alarms:
get:
summary: List persistent async watchdog alarms
tags:
- Jobs
operationId: job_status_listAlarms
parameters:
- name: status
in: query
required: false
schema:
type: string
enum:
- open
- acknowledged
- resolved
default: open
example: open
- name: jobId
in: query
required: false
schema:
type: string
example: a3f8b2c1-0000-0000-0000-000000000001
- name: limit
in: query
required: false
schema:
type: number
default: 100
minimum: 1
maximum: 1000
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
/api/job-status/alarms/:alarmId/ack:
post:
summary: Acknowledge persistent async watchdog alarm
tags:
- Jobs
operationId: job_status_acknowledgeAlarm
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
alarmId: alarm_abc123
actor: hitl-user
note: Investigating this alert.
schema:
type: object
required:
- alarmId
properties:
alarmId:
type: string
example: alarm_abc123
actor:
type: string
maxLength: 120
example: hitl-user
note:
type: string
maxLength: 1000
example: Investigating this alert.
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
/api/job-status/alarms/:alarmId/resolve:
post:
summary: Resolve persistent async watchdog alarm
tags:
- Jobs
operationId: job_status_resolveAlarm
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
alarmId: alarm_abc123
actor: problem-solver-agent
note: Recovery completed successfully.
schema:
type: object
required:
- alarmId
properties:
alarmId:
type: string
example: alarm_abc123
actor:
type: string
maxLength: 120
example: problem-solver-agent
note:
type: string
maxLength: 1000
example: Recovery completed successfully.
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
/api/job-status/:jobId/wake-up:
post:
summary: Trigger idempotent wake-up for a recovery_pending async job
tags:
- Jobs
operationId: job_status_wakeUp
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
idempotencyKey: ck:wakeup:tenant-1:monitor:123
reason: manual
schema:
type: object
required:
- jobId
properties:
jobId:
type: string
example: a3f8b2c1-0000-0000-0000-000000000001
idempotencyKey:
type: string
maxLength: 256
example: ck:wakeup:tenant-1:monitor:123
reason:
type: string
maxLength: 120
example: manual
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
/api/jobs/:jobId/status:
get:
summary: Poll async job status
tags:
- Jobs
operationId: getApiJobs:jobIdStatus
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
description: Job UUID returned by the 202 response
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Job status record
content:
application/json:
schema:
type: object
properties:
jobId:
type: string
service:
type: string
description: Originating service name
action:
type: string
description: Originating action name
status:
type: string
enum:
- queued
- running
- recovery_pending
- completed
- error
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
completedAt:
type:
- string
- 'null'
format: date-time
error:
type:
- string
- 'null'
location:
type: string
description: URL of this status endpoint (for polling)
resultUrl:
type:
- string
- 'null'
description: Result URL — only set when status is "completed"
examples:
queued:
summary: Job queued
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
service: grid-operations
action: gridData
status: queued
createdAt: '2026-03-19T10:00:00.000Z'
updatedAt: '2026-03-19T10:00:00.000Z'
completedAt: null
error: null
location: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/status
resultUrl: null
completed:
summary: Job completed
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
service: grid-operations
action: gridData
status: completed
createdAt: '2026-03-19T10:00:00.000Z'
updatedAt: '2026-03-19T10:08:00.000Z'
completedAt: '2026-03-19T10:08:00.000Z'
error: null
location: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/status
resultUrl: /api/jobs/a3f8b2c1-0000-0000-0000-000000000001/result
'404':
description: Job not found (unknown ID or TTL expired)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
message:
type: string
description: 'Poll the status of a background job started by a long-running endpoint (v0.9.8+).
**Status values**:
- **queued** — job is registered, worker starting soon
- **running** — worker is executing (MCP polling in progress)
- **completed** — result is available at `resultUrl`
- **error** — worker failed; see `error` field
**Polling strategy**: start polling 5 s after submission, then every 10–30 s.
Most jobs complete within 8–12 minutes.'
x-operation-id-source: normalized
x-operation-id-original: job_status_status
/api/jobs/:jobId/progress:
get:
summary: Get job progress (JSON polling or SSE)
tags:
- Jobs
operationId: getApiJobs:jobIdProgress
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
- name: stream
in: query
required: false
schema:
type: boolean
default: false
description: Set true to receive text/event-stream output.
- name: lastEventId
in: query
required: false
schema:
type: string
example: '3'
description: Optional replay cursor when headers cannot be set by the client.
- name: Last-Event-ID
in: header
required: false
schema:
type: string
example: '3'
description: SSE replay cursor. Events with greater IDs are returned.
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Progress payload (JSON) or SSE stream (text/event-stream)
'404':
description: Job not found (unknown ID or TTL expired)
description: Returns normalized job progress. Use query `stream=true` for text/event-stream output. SSE supports `Last-Event-ID` replay (or `lastEventId` query fallback).
x-operation-id-source: normalized
x-operation-id-original: job_status_progress
/api/jobs/:jobId/result:
get:
summary: Retrieve async job result
tags:
- Jobs
operationId: getApiJobs:jobIdResult
parameters:
- name: jobId
in: path
required: true
schema:
type: string
example: a3f8b2c1-...
description: Job UUID returned by the 202 response
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Job result payload (original MCP tool response)
content:
application/json:
schema:
type: object
'202':
description: Job not yet completed — poll status endpoint
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
status:
type: string
message:
type: string
location:
type: string
'404':
description: Job not found or result expired
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: false
message:
type: string
description: 'Retrieve the full result payload of a completed async job.
Returns **202** if the job is still running — poll `/status` first.
Returns **404** if the job ID is unknown or the result has expired (24 h TTL).'
x-operation-id-source: normalized
x-operation-id-original: job_status_result
/api/jobs/:jobId/wake-up:
post:
summary: Trigger idempotent wake-up for a recovery_pending async job
tags:
- Jobs
operationId: postApiJobs:jobIdWakeUp
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
jobId: a3f8b2c1-0000-0000-0000-000000000001
idempotencyKey: ck:wakeup:tenant-1:monitor:123
reason: manual
schema:
type: object
required:
- jobId
properties:
jobId:
type: string
example: a3f8b2c1-0000-0000-0000-000000000001
idempotencyKey:
type: string
maxLength: 256
example: ck:wakeup:tenant-1:monitor:123
reason:
type: string
maxLength: 120
example: manual
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
x-operation-id-source: normalized
x-operation-id-original: job_status_wakeUp
/api/jobs/alarms:
get:
summary: List persistent async watchdog alarms
tags:
- Jobs
operationId: getApiJobsAlarms
parameters:
- name: status
in: query
required: false
schema:
type: string
enum:
- open
- acknowledged
- resolved
default: open
example: open
- name: jobId
in: query
required: false
schema:
type: string
example: a3f8b2c1-0000-0000-0000-000000000001
- name: limit
in: query
required: false
schema:
type: number
default: 100
minimum: 1
maximum: 1000
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
x-operation-id-source: normalized
x-operation-id-original: job_status_listAlarms
/api/jobs/alarms/:alarmId/ack:
post:
summary: Acknowledge persistent async watchdog alarm
tags:
- Jobs
operationId: postApiJobsAlarms:alarmIdAck
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
alarmId: alarm_abc123
actor: hitl-user
note: Investigating this alert.
schema:
type: object
required:
- alarmId
properties:
alarmId:
type: string
example: alarm_abc123
actor:
type: string
maxLength: 120
example: hitl-user
note:
type: string
maxLength: 1000
example: Investigating this alert.
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
x-operation-id-source: normalized
x-operation-id-original: job_status_acknowledgeAlarm
/api/jobs/alarms/:alarmId/resolve:
post:
summary: Resolve persistent async watchdog alarm
tags:
- Jobs
operationId: postApiJobsAlarms:alarmIdResolve
parameters:
- $ref: '#/components/parameters/TokenQuery'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
requestBody:
required: false
content:
application/json:
examples:
default:
value:
alarmId: alarm_abc123
actor: problem-solver-agent
note: Recovery completed successfully.
schema:
type: object
required:
- alarmId
properties:
alarmId:
type: string
example: alarm_abc123
actor:
type: string
maxLength: 120
example: problem-solver-agent
note:
type: string
maxLength: 1000
example: Recovery completed successfully.
token:
type: string
description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
x-operation-id-source: normalized
x-operation-id-original: job_status_resolveAlarm
components:
parameters:
TokenQuery:
name: token
in: query
required: false
schema:
type: string
description: Optional Cernion MCP token as URL query parameter. If provided, it overrides CERNION_TOKEN for this request. Prefer Authorization Bearer header in production to reduce token exposure in URLs/logs.
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: 'Optional Cernion MCP token. If not provided, falls back to CERNION_TOKEN from environment. Request token at https://cernion.de/ or by email: dev@stromdao.com.'