API reference
Artifacts
Stored job results: list them by workflow port, inspect a manifest, upload inputs, download a whole zip or one record (?record=), and delete.
On this page
List your artifacts
GET/api/v1/artifacts
API key or token
One item per chainable manifest port.
Default never exposes job-row port=archive as a selectable bind port. Pass include_archive=true for /workflows/storage so users can download the job zip. Expired artifacts are omitted. Metadata-only.
Parameters
| Name | Type | Description |
|---|---|---|
limit | integer | Limits: |
offset | integer | Limits: |
data_kind | string | |
data_format | string | |
run_id | string | |
include_archive | boolean | When true, also list zip Default: |
Example request
curl "https://api.cognichem.com/api/v1/artifacts" \
-H "X-Api-Key: $COGNICHEM_API_KEY"from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.list()
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY.
Responses
Successful Response · application/json · ArtifactListResponse
| Field | Type | Description |
|---|---|---|
has_more | boolean | Default: |
items[]required | ArtifactListItem[] | |
items.artifact_idrequired | string | |
items.created_at | string | null | |
items.data_formatrequired | string | |
items.data_kindrequired | string | |
items.expires_at | string | null | |
items.is_virtual | boolean | Default: |
items.job_id | string | null | |
items.job_name | string | null | |
items.job_type | string | null | |
items.portrequired | string | |
items.record_count | integer | Default: |
items.run_id | string | null | |
items.run_name | string | null | |
items.size_bytes | integer | Default: |
items.step_id | string | null | |
next_offset | integer | null |
Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Invalid input or business rule violation. |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Resource not found or not owned by the user. |
409 | Conflict (e.g. idempotency key reuse with a different body). |
413 | Request body or workflow spec exceeds size caps. |
422 | Request body or query failed validation. |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |
Upload a CogniChem-compatible library artifact
POST/api/v1/artifacts
API key or token
Register a durable library artifact from an upload.
cognichem_zip: validated result.zip with chainable manifest ports. raw_file: server packages an allowlisted PDB/SDF/SMILES file.
Call GET /artifacts/usage as a preflight. Oversized bodies are rejected via Content-Length before the file is read into memory.
Parameters
| Name | Type | Description |
|---|---|---|
Idempotency-Key | string | A unique key (a UUID) for this request. Retrying with the same key and body returns the first result instead of repeating the work; the same key with a different body is a 409. |
Request body
multipart/form-data
| Field | Type | Description |
|---|---|---|
data_format | string | null | Required for |
data_kind | string | null | Required for |
filerequired | string | CogniChem zip or raw allowlisted file |
moderequired | string |
|
Example request
curl -X POST "https://api.cognichem.com/api/v1/artifacts" \
-H "X-Api-Key: $COGNICHEM_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-F "[email protected]" \
-F 'mode=MODE'from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.upload("file.zip")
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY. The SDK sends an Idempotency-Key; pass idempotency_key= to reuse one when you retry.
Responses
Successful Response · application/json · ArtifactResponse
| Field | Type | Description |
|---|---|---|
content_type | string | Default: |
created_at | string | null | |
expires_at | string | null | |
idrequired | string | |
job_id | string | null | |
manifest | object | |
size_bytes | integer | Default: |
{
"content_type": "application/zip",
"created_at": "2026-07-31T12:00:00+00:00",
"expires_at": "2026-08-30T12:00:00+00:00",
"id": "art-01JTESTEXAMPLE0000000000",
"job_id": "job-abc123",
"manifest": {
"job_type": "autodockvina",
"manifest_version": 1,
"ports": {
"archive": {
"format": "zip",
"kind": "archive",
"record_count": 1,
"records": [
{
"files": {
"primary": "."
},
"id": "all"
}
]
},
"poses": {
"format": "pdbqt",
"kind": "docking_poses",
"record_count": 1,
"records": [
{
"files": {
"primary": "pocket-1/lig-0007_out.pdbqt"
},
"id": "lig-0007",
"metrics": {
"binding_affinity_kcal_mol": -9.4
}
}
]
}
},
"warnings": []
},
"size_bytes": 4096
}Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Missing fields or unsupported mode |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Resource not found or not owned by the user. |
409 | Conflict (e.g. idempotency key reuse with a different body). |
413 | File/zip exceeds size cap or storage quota |
422 | Invalid zip/manifest or unsupported raw kind/format |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |
Get artifact storage usage
GET/api/v1/artifacts/usage
API key or token
Return used_bytes, quota_bytes, artifact_count, and tier.
Example request
curl "https://api.cognichem.com/api/v1/artifacts/usage" \
-H "X-Api-Key: $COGNICHEM_API_KEY"from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.usage()
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY.
Responses
Successful Response · application/json · ArtifactUsageResponse
| Field | Type | Description |
|---|---|---|
artifact_countrequired | integer | |
quota_bytesrequired | integer | |
tierrequired | integer | |
used_bytesrequired | integer |
Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Invalid input or business rule violation. |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Resource not found or not owned by the user. |
409 | Conflict (e.g. idempotency key reuse with a different body). |
413 | Request body or workflow spec exceeds size caps. |
422 | Request body or query failed validation. |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |
Get an artifact
GET/api/v1/artifacts/{artifact_id}
API key or token
Return metadata and manifest summary for an owned artifact.
Parameters
| Name | Type | Description |
|---|---|---|
artifact_idrequired | string |
Example request
curl "https://api.cognichem.com/api/v1/artifacts/ARTIFACT_ID" \
-H "X-Api-Key: $COGNICHEM_API_KEY"from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.get("ARTIFACT_ID")
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY.
Responses
Successful Response · application/json · ArtifactResponse
| Field | Type | Description |
|---|---|---|
content_type | string | Default: |
created_at | string | null | |
expires_at | string | null | |
idrequired | string | |
job_id | string | null | |
manifest | object | |
size_bytes | integer | Default: |
{
"content_type": "application/zip",
"created_at": "2026-07-31T12:00:00+00:00",
"expires_at": "2026-08-30T12:00:00+00:00",
"id": "art-01JTESTEXAMPLE0000000000",
"job_id": "job-abc123",
"manifest": {
"job_type": "autodockvina",
"manifest_version": 1,
"ports": {
"archive": {
"format": "zip",
"kind": "archive",
"record_count": 1,
"records": [
{
"files": {
"primary": "."
},
"id": "all"
}
]
},
"poses": {
"format": "pdbqt",
"kind": "docking_poses",
"record_count": 1,
"records": [
{
"files": {
"primary": "pocket-1/lig-0007_out.pdbqt"
},
"id": "lig-0007",
"metrics": {
"binding_affinity_kcal_mol": -9.4
}
}
]
}
},
"warnings": []
},
"size_bytes": 4096
}Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Invalid input or business rule violation. |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Resource not found or not owned by the user. |
409 | Conflict (e.g. idempotency key reuse with a different body). |
413 | Request body or workflow spec exceeds size caps. |
422 | Request body or query failed validation. |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |
Delete an artifact
DELETE/api/v1/artifacts/{artifact_id}
API key or token
Delete volume prefix and metadata for an owned artifact.
Parameters
| Name | Type | Description |
|---|---|---|
artifact_idrequired | string |
Example request
curl -X DELETE "https://api.cognichem.com/api/v1/artifacts/ARTIFACT_ID" \
-H "X-Api-Key: $COGNICHEM_API_KEY"from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.delete("ARTIFACT_ID")
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY.
Responses
Successful Response · application/json · MessageResponse
| Field | Type | Description |
|---|---|---|
messagerequired | string | The message content. |
Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Invalid input or business rule violation. |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Resource not found or not owned by the user. |
409 | Conflict (e.g. idempotency key reuse with a different body). |
413 | Request body or workflow spec exceeds size caps. |
422 | Request body or query failed validation. |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |
Download artifact zip or one record member
GET/api/v1/artifacts/{artifact_id}/download
API key or token
Stream result.zip or a single record member.
Without record: whole-zip (virtual artifacts → 409). With record: volume-side member extract; virtual hops to parent.
Parameters
| Name | Type | Description |
|---|---|---|
artifact_idrequired | string |
| Name | Type | Description |
|---|---|---|
record | string | When set, stream one manifest record member via volume-side extract. Omit for whole |
port | string | Optional port scope when record id is ambiguous. |
Example request
curl "https://api.cognichem.com/api/v1/artifacts/ARTIFACT_ID/download" \
-H "X-Api-Key: $COGNICHEM_API_KEY"from cognichem_client import CogniChem
client = CogniChem.from_env()
result = client.artifacts.download("ARTIFACT_ID", save_path=".")
print(result)Python SDK pip install cognichem-client (1.1 or later). from_env() reads COGNICHEM_API_KEY.
Responses
Successful Response · application/json
Response fields: any
Errors are RFC 7807 problem details (application/problem+json) with status, title, detail, request_id, and a retryability hint (validation, auth, quota, conflict, upstream, timeout, or terminal). Handling errors
| Status | When |
|---|---|
400 | Invalid input or business rule violation. |
401 | Missing or invalid credentials. |
402 | Wallet cannot cover the Assistant turn hold. |
403 | Authenticated but not allowed to access the resource. |
404 | Artifact missing/not owned, or with |
409 | Virtual whole-zip (no |
410 | Virtual |
413 | Whole zip or record member exceeds download size cap. |
422 | Request body or query failed validation. |
429 | Rate limit exceeded. |
500 | Unexpected server error. |
503 | Dependency temporarily unavailable. |