Cernion Project ingest API
The Project ingest API from Cernion — 5 operation(s) for project ingest.
The Project ingest API from Cernion — 5 operation(s) for project ingest.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/cernion-de:cernion-de-project-ingest-api"
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.
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: 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.'