Cernion Jobs API

Async job status and result polling (v0.9.8+)

Operations 14

GET /api/job-status/:jobId/status Poll async job status #
GET /api/job-status/:jobId/progress Get job progress (JSON polling or SSE) #
GET /api/job-status/:jobId/result Retrieve async job result #
GET /api/job-status/alarms List persistent async watchdog alarms #
POST /api/job-status/alarms/:alarmId/ack Acknowledge persistent async watchdog alarm #
POST /api/job-status/alarms/:alarmId/resolve Resolve persistent async watchdog alarm #
POST /api/job-status/:jobId/wake-up Trigger idempotent wake-up for a recovery_pending async job #
GET /api/jobs/:jobId/status Poll async job status #
GET /api/jobs/:jobId/progress Get job progress (JSON polling or SSE) #
GET /api/jobs/:jobId/result Retrieve async job result #
POST /api/jobs/:jobId/wake-up Trigger idempotent wake-up for a recovery_pending async job #
GET /api/jobs/alarms List persistent async watchdog alarms #
POST /api/jobs/alarms/:alarmId/ack Acknowledge persistent async watchdog alarm #
POST /api/jobs/alarms/:alarmId/resolve Resolve persistent async watchdog alarm #

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.
All 92 tools →

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

cernion-de-jobs-api-openapi.yml Raw ↑
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.'