Cernion Project ingest API

The Project ingest API from Cernion — 5 operation(s) for project ingest.

Operations 5

POST /api/project-upload/start Start or resume a project object upload #
PUT /api/project-upload/uploads/:uploadId/chunks/:index Store one bounded binary chunk with server-side SHA-256 verification #
POST /api/project-upload/uploads/:uploadId/complete Verify an upload and queue asynchronous bundle ingest #
GET /api/project-upload/uploads/:uploadId Get received and missing chunks for a visible project upload #
GET /api/project-upload/:projectId/objects List project object metadata without embedding original bytes #

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-project-ingest-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-project-ingest-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cernion Energy Tools Project ingest 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: Project ingest
paths:
  /api/project-upload/start:
    post:
      summary: Start or resume a project object upload
      tags:
      - Project ingest
      operationId: project_upload_start
      parameters:
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Start or resume a project object upload
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                  objectId:
                    type: string
                  chunkSize:
                    type: integer
                  status:
                    type: string
                    enum:
                    - receiving
                    - received
                    - failed
                    - extracted
                  chunks:
                    type: array
                    items:
                      type: object
                  missing:
                    type: array
                    items:
                      type: integer
                  job:
                    type: object
                    properties:
                      jobId:
                        type: string
                      status:
                        type: string
        '403':
          description: Insufficient sensitivity clearance or authentication
        '404':
          description: Upload/project absent or invisible
        '409':
          description: Immutable project, failed upload or missing chunks
        '413':
          description: Project, file, chunk or archive limit exceeded
        '422':
          description: Invalid hash or unsafe archive
        '429':
          description: Tenant async job quota exhausted
        '507':
          description: Insufficient free disk space
      description: Tenant-scoped resumable project ingest. SHA-256 hashes are lowercase hex. Chunks use a raw octet stream; status lists received and missing indexes. Completed originals trigger project.object.received.v1. The async job is polled through /api/jobs/:jobId/status.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - projectId
              - name
              - size
              - hash
              properties:
                projectId:
                  type: string
                  example: example-project
                name:
                  type: string
                  example: documents.zip
                size:
                  type: integer
                  minimum: 1
                  example: 1024
                hash:
                  type: string
                  pattern: ^[a-f0-9]{64}$
                  example: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                mimeType:
                  type: string
                  example: application/zip
                sensitivityLevel:
                  type: string
                  enum:
                  - public
                  - tenant_internal
                  - restricted
                  - highly_sensitive
                  example: tenant_internal
                requiredClearance:
                  type: array
                  items:
                    type: string
                  example: []
                chunks:
                  type: array
                  items:
                    type: object
                    properties:
                      hash:
                        type: string
                      size:
                        type: integer
                  example:
                  - hash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                    size: 1024
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
            example:
              projectId: example-project
              name: documents.zip
              size: 1024
              hash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
              mimeType: application/zip
            examples:
              upload:
                summary: Start a resumable bundle upload
                value:
                  projectId: example-project
                  name: documents.zip
                  size: 1024
                  hash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  mimeType: application/zip
  /api/project-upload/uploads/:uploadId/chunks/:index:
    put:
      summary: Store one bounded binary chunk with server-side SHA-256 verification
      tags:
      - Project ingest
      operationId: project_upload_chunk
      parameters:
      - name: uploadId
        in: path
        required: true
        schema:
          type: string
          example: example-id
      - name: index
        in: path
        required: true
        schema:
          type: integer
          example: 0
      - name: hash
        in: query
        required: true
        schema:
          type: string
          pattern: ^[a-f0-9]{64}$
          example: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Store one bounded binary chunk with server-side SHA-256 verification
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                  objectId:
                    type: string
                  chunkSize:
                    type: integer
                  status:
                    type: string
                    enum:
                    - receiving
                    - received
                    - failed
                    - extracted
                  chunks:
                    type: array
                    items:
                      type: object
                  missing:
                    type: array
                    items:
                      type: integer
                  job:
                    type: object
                    properties:
                      jobId:
                        type: string
                      status:
                        type: string
        '403':
          description: Insufficient sensitivity clearance or authentication
        '404':
          description: Upload/project absent or invisible
        '409':
          description: Immutable project, failed upload or missing chunks
        '413':
          description: Project, file, chunk or archive limit exceeded
        '422':
          description: Invalid hash or unsafe archive
        '429':
          description: Tenant async job quota exhausted
        '507':
          description: Insufficient free disk space
      description: Tenant-scoped resumable project ingest. SHA-256 hashes are lowercase hex. Chunks use a raw octet stream; status lists received and missing indexes. Completed originals trigger project.object.received.v1. The async job is polled through /api/jobs/:jobId/status.
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
            example: raw chunk bytes
  /api/project-upload/uploads/:uploadId/complete:
    post:
      summary: Verify an upload and queue asynchronous bundle ingest
      tags:
      - Project ingest
      operationId: project_upload_complete
      parameters:
      - name: uploadId
        in: path
        required: true
        schema:
          type: string
          example: example-id
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Verify an upload and queue asynchronous bundle ingest
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                  objectId:
                    type: string
                  chunkSize:
                    type: integer
                  status:
                    type: string
                    enum:
                    - receiving
                    - received
                    - failed
                    - extracted
                  chunks:
                    type: array
                    items:
                      type: object
                  missing:
                    type: array
                    items:
                      type: integer
                  job:
                    type: object
                    properties:
                      jobId:
                        type: string
                      status:
                        type: string
        '202':
          description: Ingest job queued; poll Location or upload status
        '403':
          description: Insufficient sensitivity clearance or authentication
        '404':
          description: Upload/project absent or invisible
        '409':
          description: Immutable project, failed upload or missing chunks
        '413':
          description: Project, file, chunk or archive limit exceeded
        '422':
          description: Invalid hash or unsafe archive
        '429':
          description: Tenant async job quota exhausted
        '507':
          description: Insufficient free disk space
      description: Tenant-scoped resumable project ingest. SHA-256 hashes are lowercase hex. Chunks use a raw octet stream; status lists received and missing indexes. Completed originals trigger project.object.received.v1. The async job is polled through /api/jobs/:jobId/status.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
  /api/project-upload/uploads/:uploadId:
    get:
      summary: Get received and missing chunks for a visible project upload
      tags:
      - Project ingest
      operationId: project_upload_status
      parameters:
      - name: uploadId
        in: path
        required: true
        schema:
          type: string
          example: example-id
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Get received and missing chunks for a visible project upload
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                  objectId:
                    type: string
                  chunkSize:
                    type: integer
                  status:
                    type: string
                    enum:
                    - receiving
                    - received
                    - failed
                    - extracted
                  chunks:
                    type: array
                    items:
                      type: object
                  missing:
                    type: array
                    items:
                      type: integer
                  job:
                    type: object
                    properties:
                      jobId:
                        type: string
                      status:
                        type: string
        '403':
          description: Insufficient sensitivity clearance or authentication
        '404':
          description: Upload/project absent or invisible
        '409':
          description: Immutable project, failed upload or missing chunks
        '413':
          description: Project, file, chunk or archive limit exceeded
        '422':
          description: Invalid hash or unsafe archive
        '429':
          description: Tenant async job quota exhausted
        '507':
          description: Insufficient free disk space
      description: Tenant-scoped resumable project ingest. SHA-256 hashes are lowercase hex. Chunks use a raw octet stream; status lists received and missing indexes. Completed originals trigger project.object.received.v1. The async job is polled through /api/jobs/:jobId/status.
  /api/project-upload/:projectId/objects:
    get:
      summary: List project object metadata without embedding original bytes
      tags:
      - Project ingest
      operationId: project_upload_objects
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
          example: example-id
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: List project object metadata without embedding original bytes
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    objectId:
                      type: string
                    projectId:
                      type: string
                    name:
                      type: string
                    mimeType:
                      type: string
                    size:
                      type: integer
                    hash:
                      type: string
                    status:
                      type: string
                      enum:
                      - receiving
                      - received
                      - failed
                      - extracted
                    chunks:
                      type: array
                      items:
                        type: object
                        properties:
                          hash:
                            type: string
                          size:
                            type: integer
                    provenance:
                      type: object
                      properties:
                        actorId:
                          type: string
                        uploadId:
                          type: string
                    receivedAt:
                      type: string
                      format: date-time
                    sensitivityLevel:
                      type: string
        '403':
          description: Insufficient sensitivity clearance or authentication
        '404':
          description: Upload/project absent or invisible
        '409':
          description: Immutable project, failed upload or missing chunks
        '413':
          description: Project, file, chunk or archive limit exceeded
        '422':
          description: Invalid hash or unsafe archive
        '429':
          description: Tenant async job quota exhausted
        '507':
          description: Insufficient free disk space
      description: Tenant-scoped resumable project ingest. SHA-256 hashes are lowercase hex. Chunks use a raw octet stream; status lists received and missing indexes. Completed originals trigger project.object.received.v1. The async job is polled through /api/jobs/:jobId/status.
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.'